- Movement (https://github.com/movementlabsxyz/movement)
- Aptos (https://aptos.dev/en/network/nodes/full-node)
- dYdX (https://docs.dydx.exchange/infrastructure_providers-validators/set_up_full_node)
- TON (https://docs.ton.org/participate/run-nodes/archive-node)
- Solana:
By default, all nodes are designed to store data in the /data
volume, which is mounted to the host machine (default
path is $HOME/<name_of_blockchain>
, for example for Bitcoin blockchain it will be $HOME/bitcoin/
). This is done to
make it easy to backup and restore the data. This can be changed by creating a copy of .env.sample
and renaming it
to .env
, by changing the root path for the particular blockchain (for example BITCOIN_ROOT_DIR
env will manage
the path to the root directory where Bitcoin data will be stored).
This repo contains docker images for nodes that we run on our machines. We built our images for a few reasons:
- We used the same approach for the project's structure, we store all persistent data in
/data
volume. - We added some utilities to work with RPC API inside the docker container, to make it easy to debug the state of the node.
- All images are designed to be full nodes (archive nodes) first, and tuned for maximum performance for such purpose.
- Most of our images are available for Linux AMD64 and ARM64 platforms, these images can be run on macOS with
Docker Desktop
(https://www.docker.com/products/docker-desktop/) orOrbStack
(https://orbstack.dev). We suggest using OrbStack as it is much faster and using native virtualization.
We also provide a Docker Compose file to simplify the process of running a node.
For some blockchains (like Ethereum) we use different clients to compare the performance and storage usage. Below is an instruction on how to run nodes separated by different blockchains.
We also provide some helper scripts, which by default pull the latest image from the Docker Hub, and start it (if it was not started before) or stop the previous running node to restart it with the latest pulled image. After running the node in a daemon mode, it will stream the logs from the container to the stdout console to see the results.
For Bitcoin, only one client is available, which is bitcoin-core
:
./restart-bitcoin-core.sh
For Ethereum, there are two available configurations for how to run a full node.
To run Ethereum with a geth
execution client (written in Go) and a Lighthouse
consensus client (written in Rust) need to execute the following commands:
./restart-ethereum-geth.sh
./restart-ethereum-lighthouse.sh
BSC is using a forked version of Ethereum's geth
client to run it execute this command:
./restart-bsc-geth.sh
There is only one client available for Tron and it's written in Java. It uses the old Java 8 and it doesn't work on ARM64 architecture (even though we provide that image), probably one day there be a solution for that, please follow this PR for ongoing discussion: tronprotocol/java-tron#5845.
./restart-tron-java.sh
First of all, you need to run the BuildKit docker container, it's necessary to build multi-arch images. Latest version of Docker
already integrated it as command buildx
. Run the following command to create a new builder and set it as default:
docker buildx create --name "buildx" --driver docker-container --use
docker buildx use buildx
Inside the specific project folder, just run the build.sh
command to build the image, for example for Bitcoin Core:
./docker-bitcoin-core/build.sh
Ethereum:
- https://ethereum.org/en/developers/docs/nodes-and-clients/run-a-node
- Besu/Teku clients: https://besu.hyperledger.org/public-networks/tutorials/besu-teku-mainnet
BSC:
Tron:
Polygon:
- https://docs.polygon.technology/pos/how-to/full-node/full-node-binaries
- https://docs.polygon.technology/pos/how-to/full-node/full-node-docker
Avalanche:
Cardano:
Dogecoin:
Scroll:
Optimism:
Ronin:
- https://docs.roninchain.com/basics/nodes
- https://docs.roninchain.com/validators/setup/mainnet/run-archive
Base:
Celo:
Tezos:
Ink:
Sonic:
Linea:
World Chain: