IBC

An Overview of the Inter-Blockchain Communication Protocol
This is a summary view of IBC v2 [Eureka]. For more comprehensive details, guides and more please visit the official Eureka documentation.

Core Data Structures

The Packet is the primary container for cross-chain communication in IBC v2. Each packet may wrap one or more application-specific Payload objects.
/ Main 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 per client-pair
  timeout: uint64;          / UNIX timestamp (seconds) for packet expiry
  data: Payload[];          / Application payload(s)
}

/ Application-specific data
interface Payload {
  sourcePort: bytes;  / Sending application identifier
  destPort: bytes;    / Receiving application identifier
  version: string;    / Application version
  encoding: string;   / MIME-type for decoding
  value: bytes;       / Opaque app data
}
Timeout is measured against the destination chain’s clock, not the source. This ensures safety even under clock drift.

Key On-Chain Components

Application Interface (ICS-26)

An IBC-enabled application must implement these callbacks to manage the packet lifecycle:
  • OnRecvPacket(...) – Executed on the destination chain to process incoming data. Must return an Acknowledgement, which may contain success data or an error.
  • OnAcknowledgePacket(...) – Executed on the source chain once an acknowledgement is verified. Provides acknowledgement data so the sending application can finalize or revert actions.
  • OnTimeoutPacket(...) – Executed on the source chain if a timeout occurs, enabling rollback or refunds.

Packet Lifecycle