🏗️ IBC Architecture: Clients, Connections & Channels

Understand the layered architecture of IBC

Enable inter-blockchain communication protocols

IBC Architecture

IBC is designed as a **layered protocol** with clear separation between transport, application, and relayer layers. This modular architecture allows developers to build custom IBC applications while reusing the proven transport layer that handles light client verification and packet delivery.

The protocol consists of **IBC/TAO** (Transport, Authentication, Ordering) for the core infrastructure and **IBC/APP** for application-specific logic like token transfers (ICS-20) and interchain accounts (ICS-27).

Interactive: Layer Explorer

Explore the three layers of IBC architecture and their responsibilities.

IBC/TAO (Transport Layer)

Core protocol for authentication and transport

Key Components

Light ClientsConnectionsChannelsPacket Commitments

Responsibilities

  • Verify block headers from connected chains
  • Establish cryptographic connections
  • Define packet ordering semantics
  • Store commitment proofs

🔑 Core IBC Components

Light Clients

Each chain runs light clients of connected chains to verify block headers and state commitments without downloading full blocks. Supports Tendermint, Solo Machine, and custom client types.

Client ID: 07-tendermint-0

Connections

Established through a four-way handshake between two chains. A connection links two light clients and enables multiple channels to be created.

Connection ID: connection-0

Channels

Define packet ordering (ORDERED, UNORDERED) and bind to application modules. Multiple channels can exist over a single connection for different applications.

Channel ID: channel-141 (transfer)

IBC Packet Structure

IBC packets contain all information needed for trustless delivery and execution on the destination chain.

// IBC Packet Structure
type Packet = {
sequence: uint64, // Unique sequence number
sourcePort: string, // Source module (e.g., "transfer")
sourceChannel: string, // Source channel ID
destPort: string,
destChannel: string,
data: bytes, // Application-specific data
timeoutHeight: Height,
timeoutTimestamp: uint64
}

Application Layer: ICS-20

**ICS-20** (Token Transfer) is the most widely used IBC application, enabling fungible token transfers across chains.

Token Lifecycle

1.Source Chain: Tokens locked in escrow module
2.Destination Chain: Voucher tokens minted (IBC denom)
3.Return Transfer: Vouchers burned, original tokens unlocked

IBC Denom Format

Transferred tokens get a new denomination encoding their path:
ibc/27394FB092D2ECCD56123C74F36E4C1F926001CEADA9CA97EA622B25F41E5EB2
// Hash of transfer/channel-141/uatom