IBC
Inter-Blockchain Communication protocol implementation with EVM callbacks
The x/ibc module from Ontomir evm implements Inter-Blockchain Communication (IBC) protocol support with specialized EVM callback functionality for cross-chain smart contract interactions.
Overview
The IBC module extends the standard IBC protocol with EVM-specific features:
IBC Callbacks: Execute EVM contracts automatically during IBC packet lifecycle
Cross-chain Contract Calls: Enable smart contracts to interact across chains
Packet Lifecycle Management: Handle acknowledgments and timeouts through EVM contracts
Components
IBC Callbacks
The EVM Callbacks module implements the EVM contractKeeper interface that interacts with ibc-go's callbacks middleware, specifically for ICS-20 transfer applications.
Key Features:
Destination Callbacks: Execute contracts on packet receipt (
onRecvPacket)Source Callbacks: Handle acknowledgments (
onAcknowledgePacket) and timeouts (onTimeoutPacket)Atomic Execution: Contract calls happen atomically with token transfers
IBC Transfer Integration
The module works closely with the ICS20 transfer application to enable:
Cross-chain token transfers to EVM contracts
Automatic contract execution with received funds
Custom calldata propagation across chains
Smart contracts can initiate IBC transfers using the [ICS20 Precompile](/docs/evm/next/documentation/smart-contracts/precompiles/ics20), which provides the `transfer` function with memo field support for callbacks. **Address Format Limitation**: Currently, IBC transfer receiver addresses must be in bech32 format (e.g., `Ontomir1...`). While sender addresses are automatically converted from hex to bech32, receiver addresses must be provided in bech32 format. Full hex address support for receivers is planned for a future release.
Callback Types
Destination Callbacks (onRecvPacket)
onRecvPacket)Executed on the destination chain when a packet is received, allowing contracts to:
Receive cross-chain tokens
Execute custom logic with the received funds
Perform operations like DEX swaps or liquidity provision
Source Callbacks (onAcknowledgePacket & onTimeoutPacket)
onAcknowledgePacket & onTimeoutPacket)Executed on the source chain when packet lifecycle completes, enabling contracts to:
Handle successful transfer acknowledgments
Recover funds from failed/timed out transfers
Implement retry logic for failed transfers
Implementation Details
Memo Format
EVM callbacks use the memo field in ICS-20 transfers with specific JSON structure:
Destination Callback:
{
"dest_callback": {
"address": "0x...",
"gas_limit": "1000000",
"calldata": "0x..."
}
}Source Callback:
{
"src_callback": {
"address": "0x...",
"gas_limit": "1000000"
}
}Security Considerations
Isolated Addresses: Destination callbacks use ephemeral addresses to prevent confusion with local accounts
Sender Validation: Source callbacks validate that only the packet sender can set callbacks
Gas Limits: Callback execution is bounded by specified gas limits
IBC Overview - IBC concepts and fundamentals
ICS20 Precompile - Cross-chain token transfers
Callbacks Interface - Smart contract callback interface
最后更新于
