Skip to main content
Version: v0.17.0

Run a DV on mainnet


Charon is in an alpha state, and you should proceed only if you accept the risk, the terms of use, and have tested running a Distributed Validator on a testnet first.

Distributed Validators created for goerli cannot be used on mainnet and vice versa, please take caution when creating, backing up, and activating mainnet validators.

This section is intended for users who wish to run their Distributed Validator on Ethereum mainnet.


  • Ensure you have docker installed.
  • Ensure you have git installed.
  • Make sure docker is running before executing the commands below.


  1. Clone the charon-distributed-validator-node repo and cd into the directory.
# Clone this repo
git clone

# Change directory
cd charon-distributed-validator-node
  1. If you have already cloned the repo, make sure that it is up-to-date.

  2. Copy the .env.sample file to .env

cp -n .env.sample .env
  1. In your .env file, uncomment and set values for NETWORK & LIGHTHOUSE_CHECKPOINT_SYNC_URL
# Overrides network for all the relevant services.
# Checkpoint sync url used by lighthouse to fast sync.

Note that you can choose any checkpoint sync url from

Your DV stack is now mainnet ready 🎉

Remote mainnet beacon node


Using a remote beacon node will impact the performance of your Distributed Validator and should be used sparingly.

If you already have a mainnet beacon node running somewhere and you want to use that instead of running EL (geth) & CL (lighthouse) as part of the repo, you can disable these images. To do so, follow these steps:

  1. Copy the docker-compose.override.yml.sample file
cp -n docker-compose.override.yml.sample docker-compose.override.yml
  1. Uncomment the profiles: [disable] section for both geth and lighthouse. The override file should now look like this
# Disable geth
profiles: [disable]
# Bind geth internal ports to host ports
#- 8545:8545 # JSON-RPC
#- 8551:8551 # AUTH-RPC
#- 6060:6060 # Metrics

# Disable lighthouse
profiles: [disable]
# Bind lighthouse internal ports to host ports
#- 5052:5052 # HTTP
#- 5054:5054 # Metrics
  1. Then, uncomment and set the CHARON_BEACON_NODE_ENDPOINTS variable in the .env file to your mainnet beacon node's URL
# Connect to one or more external beacon nodes. Use a comma separated list excluding spaces.

Exit a mainnet distributed validator

If you want to exit your mainnet validator, you need to uncomment and set the EXIT_EPOCH variable in the .env file

# Cluster wide consistent exit epoch. Set to latest for fork version, see `curl $BEACON_NODE/eth/v1/config/fork_schedule`
# Currently, the latest fork is capella (epoch: 194048)

Note that EXIT_EPOCH should be 194048 after the shapella fork.