For legacy IBC implementations, refer to the IBC‑go docs. The latest version of Inter‑Blockchain Communication (IBC) enables token transfers across multiple blockchain environments through a standard set of components, interfaces, and a defined packet flow.

Core Data Structures

The Packet is the primary container for cross‑chain communication. Each packet wraps one or more application‑specific Payload objects.
// The main data container sent between chains
interface Packet {
  sourceClientId: bytes; // Client ID for destination chain (stored on source)
  destClientId: bytes;   // Client ID for source chain (stored on destination)
  sequence: uint64;      // Monotonically increasing nonce for ordering
  timeout: uint64;       // UNIX timestamp (seconds) when the packet expires
  data: Payload[];       // List of application payloads
}

// Application‑specific data and routing information
interface Payload {
sourcePort: bytes; // Identifies sending application module
destPort: bytes;   // Identifies receiving application module
version: string;   // App‑specific version for interpretation
encoding: string;  // MIME‑type for decoding appData
appData: bytes;    // Opaque application data
}

Key Components

Packet Lifecycle

The end‑to‑end flow from send to completion involves five discrete steps. Expand any step below for details.