setup multiple EVMOS chains and connect them via an IBC (using Hermes as relayer) to transfer tokens & coins cross chains, as well as block explorers for them (using Big Dipper 2.0 for Cosmos based chains)
Here you can find sample scripts and notes of how toI wrote hundred lines of comments which explains every steps in each script file and each readme file, hope that helps you guys in exploring Evmos & Cosmos Ecosystem
Not only EVMOS, you can use this script to build for other chains like cosmos,... Look at this to know how to do it
Pre-requisites
- Go 1.20.2+ to build chains
- jq
- yq + tomlq (build on top of jq)
- Rust 1.60+ to build Hermes - IBC relayer
- docker & docker compose
- Node JS & Yarn to build & run Big Dipper 2.0 for Cosmos based chains
- PostgreSQL client (psql) for postgres 12.5 to setup Big Dipper
- Hasura cli for bdjuno
You can find commands to install the above tools here
I created all of the following samples on an Ubuntu 22.04 LTS machine with 4 CPU 16 GB RAM. It can run
- 2 EVMOS chains
- 1 Hermes as IBC relayer to connect those chains
- 2 bdjuno & hasura as block explorer's backend & graphql service
- 2 Big Dipper 2.0 as block explorer's frontend
without any performance issue (CPU ~20-80% per core, ram ~50% via htop)
List of samples:
- Script to build EVMOS chains and run with docker compose
- Script to build & setup Hermes as an IBC relayer
- Script to setup Big Dipper (backend bdjuno with hasura as graphql service & frontend Big Dipper 2.0 for Cosmos based chains)
Software versions:
Customization
- You can change their version by updating file env.sh
- This sample is using keyring
test
, you may need to change tofile
for secure your test env if needed in env.sh - You can create
override-env.sh
file and override values of env.sh - The sample.cosmos-and-evmos.override-env.sh file contains example which tell you how to override variables of env.sh and make the chain 1 use Cosmos (gaia) source, rename it to
override-env.sh
to make it effectives - The sample.expose-big-dipper-ui.override-env.sh file contains example which tell you how to override variables of env.sh and make the block explorer UI (Big Dipper 2.0) accessible from outside world, rename it to
override-env.sh
to make it effectives
Default ports used in these samples
Sample name | Port No. for chain 1 | Port No. for chain 2 | Desc |
---|---|---|---|
Blockchain in docker | 26657 | 36657 | RPC |
Blockchain in docker | 8545 | 18545 | Json RPC |
Blockchain in docker | 8546 | 18546 | Websocket Json RPC |
Blockchain in docker | 1317 | 11317 | REST API |
Blockchain in docker | 9090 | 19090 | gRPC |
Blockchain in docker | 26656 | 36656 | P2P |
Big Dipper as Block Explorer | 3800 | 3802 | Big Dipper front end |
Big Dipper as Block Explorer | 8080 | 8082 | Hasura's graphql service |
Big Dipper as Block Explorer | 3000 | 3002 | bdjuno hasura action base |
Default service name & container name used in these samples
Sample name | Name for chain 1 | Name for chain 2 | Desc |
---|---|---|---|
Blockchain in docker | vtevmos10 | vtevmos20 | Node 0 (validator 1) of EVMOS chain run via docker-compose |
Blockchain in docker | vtevmos11 | vtevmos21 | Node 1 (validator 2) of EVMOS chain run via docker-compose |
Blockchain in docker | vtevmos12 | vtevmos22 | Node 2 (validator 3) of EVMOS chain run via docker-compose |
Hermes as IBC relayer | (hermes-svc as a shared service for both chains) | (hermes-svc as a shared service) | Hermes connects both chains (Debian* daemon service) |
Big Dipper as Block Explorer | bdjuno-svc1 | bdjuno-svc2 | bdjuno app (Debian* daemon service) |
Big Dipper as Block Explorer | bdjdb1 | bdjdb2 | bdjuno & hasura database (docker) |
Big Dipper as Block Explorer | bdjhasura1 | bdjhasura2 | Hasura graphql service (docker) |
Big Dipper as Block Explorer | bd2-svc1 | bd2-svc2 | Big Dipper front end (Debian* daemon service) |
(Not recommended) Tips:
There is script named all-in-one.sh, if you are using an OS which supports systemd
and some required tools, you can create everything just by running this script (EVMOS x2 + Big Dipper x2 + Hermes)