This tutorial walks you through setting up a live IBC connection between a Cosmos chain and an EVM (Besu) chain. This demo uses IFT token transfers to transfer tokens directly between the two chains. By the end, you will have a fully wired IBC-connection: contracts deployed, attestors and relayer running, light clients created on both sides, and token transfers verified end-to-end. You can find the tutorial demo repo here: https://github.com/cosmos/ibc-e2e-docs-example The tutorial is built around a working demo that runs a Cosmos sandbox chain and a Besu EVM node locally. You can use this demo as an example implementation for integrating Cosmos to EVM IBC functionality into your own chains. For conceptual background on how the system works before diving in, see the architecture overview.Documentation Index
Fetch the complete documentation index at: https://docs.cosmos.network/llms.txt
Use this file to discover all available pages before exploring further.
Getting Started
This demo has a quickstart that runs everything in a single command (./setup.sh). After getting set up, you can run each step individually using the walkthrough sections.
What you will set up
After getting set up in the quickstart, the tutorial walkthrough covers these steps in order:- Starting the chains: The demo brings up a Cosmos sandbox chain and a Besu EVM node. For a real integration, your chains are already running and this step describes what state and endpoints the rest of the setup depends on.
- Deploy EVM contracts: The IBC stack on the EVM side is a set of Solidity contracts deployed to the chain. This includes the ICS-26 Router, ICS-27 GMP, and the IFT token contract.
- Create attestation light clients: Each chain needs a light client that can verify packets arriving from the other side. Both are initialized with the attestor’s signing address. This step also registers each client’s counterparty.
- Wire the IFT bridge: Registers the IFT token contract on each side so the bridge knows what to burn and mint when a packet arrives.
- Configure and start the attestors: Two attestor instances run in this demo, one watching each chain. They sign packet state on demand for the Proof API.
- Configure and start the Proof API and relayer: The Proof API aggregates attestor signatures into relay-ready proofs. The relayer uses those proofs to submit packet delivery and timeout transactions on both chains.
- Run the transfer: Run token transfers in both directions and verify the final balances. The demo also covers packet tracking, the timeout and refund path, and how to read relayer and attestor logs.