Overview

The ICS20 precompile exposes standardized IBC fungible token transfer logic to EVM contracts. Initiate cross-chain token transfers, query transfer status, and build composable cross-chain payment flows — all from Solidity. Precompile Address: 0x0000000000000000000000000000000000000802

Gas Costs

Method TypeGas Cost
Transactions2000 + (30 x bytes of input)
Queries1000 + (3 x bytes of input)

Transaction Methods

MethodSignatureReturns
transfertransfer(string sourcePort,string sourceChannel,string denom,uint256 amount,address sender,string receiver,Height timeoutHeight,uint64 timeoutTimestamp,string memo)(uint64 nextSequence)

Query Methods

MethodSignatureReturns
denomdenom(string hash)(Denom denom)
denomHashdenomHash(string trace)(string hash)
denomsdenoms(PageRequest pageRequest)(Denom[] denoms, PageResponse pageResponse)

Example

// Pseudocode: import IICS20 and construct Height timeoutHeight per the ABI reference.
IICS20 constant ics20 = IICS20(0x0000000000000000000000000000000000000802);

// Transfer tokens to another chain
ics20.transfer(
    "transfer",            // source port
    "channel-0",           // source channel
    "ctm",                 // denomination
    1000000,               // amount
    msg.sender,            // sender
    receiver,               // receiver on destination chain
    timeoutHeight,
    uint64(block.timestamp + 600),
    ""                     // memo
);

Trust Model

ICS20 transfers inherit IBC’s trust-minimized model:
  • No trusted intermediary required
  • Safety backed by light-client verification on both chains
  • Timeout mechanism ensures funds are never permanently locked
For exact params, events, and return values, see Precompile ABI Reference.