Warning
This repository is a work in progress and under active development.
This repo exists to showcase transferring tokens to and from a Cosmos SDK chain (representing Celestia) and a ZK proveable EVM using the IBC-Eureka solidity contracts. The diagram below is meant to detail the components involved and, at a high level, how they interact with one another.
For more information refer to the architecture document. Note that the design is subject to change.
- Install Docker
- Install Rust
- Install Foundry
- Install Bun
- Install Just
- Install SP1 (for end-to-end tests)
-
Fork this repo and clone it
-
Set up the git submodule for
solidity-ibc-eureka
git submodule init git submodule update
-
Install contract dependencies and the SP1 Tendermint light client operator binary from solidity-ibc-eureka.
make install-dependencies
-
Start a local development environment
make start
-
Set up IBC clients and channels:
- Generate the
contracts/script/genesis.json
file which contains the initialization parameters for theSP1ICS07Tendermint
light client contract. - Initialize Groth16 light client on simapp.
- Create a channel on simapp.
- Deploy IBC contracts on the Reth node.
- Create a channel on the Reth node.
- Create a counterparty on the Reth node which points to the groth16 client ID on simapp.
- Create a counterparty on the simapp which points to the tendermint client ID on Reth.
make setup
- Generate the
# See the running containers
docker ps
# You can view the logs from a running container via Docker UI or:
docker logs beacond
docker logs celestia-network-bridge
docker logs celestia-network-validator
docker logs simapp-validator
docker logs reth
# State is persisted in the .tmp directory. Remove .tmp to start fresh:
rm -rf .tmp