⚠️ 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
-
Start a local development environment
docker compose up --detach
[!TIP]: Double check that all 5 containers are started. Currently: the bridge might fail because it depends on the validator being available. If this happens, wait until the validator is available then start the bridge and beacond node again.
-
Copy the
.env
file into./solidity-ibc-eureka
cp .env.example .solidity-ibc-eureka/.env
-
Deploy the Tendermint light client smart contract on the EVM roll-up. Note: this may not be necessary.
cd solidity-ibc-eureka && just deploy-sp1-ics07
-
Deploy smart contracts on the EVM roll-up.
make deploy-contracts
[!TIP]: While deploying contracts, if you hit an error like:
[Revert] vm.envString: environment variable "E2E_FAUCET_ADDRESS" not found
then comment out the lines that use that environment variable from./solidity-ibc-eureka/E2ETestDeploy.s.sol
.
# 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