Skip to main content
This page gets the IBC demo running end-to-end with a single command. It starts a Cosmos sandbox chain and a Besu EVM node, deploys the IBC contracts, creates attestation light clients on both chains, wires the IFT bridge, configures and starts the attestors, and runs the relayer and Proof API. For a step-by-step breakdown of what each phase does, see the walkthrough.

Prerequisites

Run the demo

Clone the repository and navigate to the demo directory:
Run the full setup:
This starts the Cosmos and Besu chains, deploys the IBC contracts, creates attestation light clients on both chains, wires the IFT bridge, configures and starts the attestors, relayer, and Proof API. Once setup is complete, it runs the full demo suite:
  • Cosmos to EVM transfer: burns IFT tokens on the Cosmos chain and mints the equivalent ERC20 balance on Besu.
  • EVM to Cosmos transfer: burns the ERC20 on Besu and mints IFT tokens back on the Cosmos chain.
  • Packet tracking: polls the relayer API by transaction hash and prints the transfer state as it progresses.
  • Timeout path: sends a packet with a short timeout, pauses the relayer to let it expire, then resumes so the relayer can submit a MsgTimeout. The source chain refunds the sender.
  • Observability: samples live Prometheus metrics from the relayer and prints recent log output from the relayer and attestors.
The full setup takes a few minutes. Progress is printed to the terminal and logged to logs/.

What runs

Once complete, these containers are running:

All Commands

The command you ran earlier shows the full end-to-end flow of the demo. However, you can also run individual commands that break up the flow so you can see how each step works.

Walkthrough

The next sections of this tutorial are a walkthrough that breaks up each step of the demo and shows you how chains are set up, what each service does, and what to look for at each stage. The walkthrough covers the following setup commands in order:
Before continuing through the walkthrough, make sure to run the following to stop all containers and start fresh: