This guide is meant as a starting point for users with some experience running nodes and validators. It is not meant to be a beginners guide, chances are copying and running commands from here will not work, some tweaking might be needed. We see this as a guide for people making better guides :)
The mentioned better guides, especially for beginners can be found here:
The EL chain Goerli and CL beaconchain Prater are going to be merged. The merged chain will be called Goerli, the name Prater is soft-deprecated (flags using the name will work, but not supported long term).
The client behaviour in Goerli is identical to Ropsten. If your staking setup works on Ropsten, it will work on Goerli as well.
We have a basic checklist that can be found here. The checklist provides a list of things to check once your nodes are seutp as well as a common list of pitfalls to avoid.
Yes we do, this FAQ might provide you with some context and what next steps you’d need to take.
Consensus layer
client name | git branch | docker image |
---|---|---|
Lighthouse | unstable | sigp/lighthouse:v2.4.0 |
Teku | master | consensys/teku:22.7.0 |
Lodestar | master | chainsafe/lodestar:v0.41.0 |
Nimbus | unstable | statusim/nimbus-eth2:multiarch-v22.7.0 |
Prysm | develop | gcr.io/prysmaticlabs/prysm/beacon-chain:v2.1.4-rc.0 |
Execution layer
client name | git branch | docker image |
---|---|---|
Geth | master | ethereum/client-go:v1.10.21 |
Nethermind | master | nethermind/nethermind:1.13.5 |
Erigon | alpha | thorax/erigon:v2022.07.04 |
Besu | main | hyperledger/besu:22.7.0-RC3 |
openssl rand -hex 32 | tr -d "\n" > "/opt/jwtsecret"
. This file needs to be passed to both the Execution Client and the Consensus Client.We need to download and install geth
Pre-requisites: git
, make
, go
, gcc
.
(use geth branch master
from github.com/ethereum/go-ethereum)
git clone -b master https://github.com/ethereum/go-ethereum.git
cd go-ethereum
make geth
cd ..
./go-ethereum/build/bin/geth
--goerli \
--datadir "geth-datadir" \
--http \
--http.api="eth,web3,net" \
--http.vhosts="*" --http.corsdomain "*" \
--authrpc.jwtsecret=/opt/jwtsecret \
--authrpc.vhosts="*" \
console
If you do not specify a JWT secret, then geth will automatically generate one for you. You will then have to specify this secret in the Consensus Layer client.
Note: In case the CL does not specify a virtual host when making the request, it will be rejected by geth unless --authrpc.vhosts="*"
has been set. Allowing wildcard virtual host matching on the authenticated port is not a security concern.
Clone and build the master
branch of Nethermind
git clone --recursive https://github.com/NethermindEth/nethermind.git
cd nethermind/src/Nethermind
dotnet build Nethermind.sln -c Release
In the nethermind/src/Nethermind/
folder
cd Nethermind.Runner
dotnet run -c Release -- --config goerli \
--JsonRpc.Host=0.0.0.0 \
--JsonRpc.JwtSecretFile=/opt/jwtsecret
git clone -b alpha https://github.com/ledgerwatch/erigon
cd erigon
make erigon rpcdaemon
./build/bin/erigon --chain=goerli \
--datadir goerli-testnet \
--authrpc.jwtsecret=/opt/jwtsecret \
--http --http.api=engine,net,eth
Support for ropsten is baked into the besu main
branch. If you want to use pre-built binaries, you can get the current 22.4.4 besu snapshot artifact, or use the docker image hyperledger/besu:22.4.4
.
Otherwise if you want to build from source, clone the repo and build besu:
git clone --recursive https://github.com/hyperledger/besu.git
cd besu
./gradlew installDist # installs in build/install/besu
# Alternatively, using Docker:
# ./gradlew distDocker # build and tags a docker image
To run besu as an execution client on goerli:
build/install/besu/bin/besu \
--network=goerli \
--rpc-http-enabled=true \
--rpc-http-host="0.0.0.0" \
--rpc-http-cors-origins="*" \
--sync-mode="X_SNAP" \
--data-storage-format="BONSAI"\
--Xmerge-support=true \
--rpc-ws-host="0.0.0.0" \
--host-allowlist="*" \
--engine-rpc-enabled=true \
--engine-host-allowlist="*" \
--engine-jwt-enabled=true \
--engine-jwt-secret=/opt/jwtsecret
There are two ways to sync a CL beacon node. They are:
As counter-intuitive as it may be, Genesis syncing the beacon chain is not the most secure approach. You can find more information on the topic here.
To perform a Genesis Sync, No additional flag/work is required. This is the default behaviour on all clients.
To perform Checkpoint Sync, Please follow our guide and add the Checkpoint Sync flags in addition to the flags defined below. The guide can be found here.
Minimum requirement: rustc 1.59.0
Clone and build from source (use branch unstable
)
git clone -b unstable https://github.com/sigp/lighthouse.git
cd lighthouse
make
cd ..
Start the client
lighthouse \
--spec mainnet \
--network goerli \
--debug-level info \
beacon_node \
--datadir ./testnet-lh1 \
--eth1 \
--http \
--http-allow-sync-stalled \
--metrics \
--merge \
--execution-endpoints http://127.0.0.1:8551 \
--enr-udp-port=9000 \
--enr-tcp-port=9000 \
--discovery-port=9000 \
--jwt-secrets="/opt/jwtsecret" \
--suggested-fee-recipient=<enter-eth-address-here> \
Clone and build the client
git clone https://github.com/chainsafe/lodestar.git
cd lodestar
yarn install --ignore-optional
yarn run build
cd ..
Start the client
cd lodestar
./lodestar beacon --rootDir="../lodestar-beacondata" \
--network=goerli \
--eth1.enabled=true \
--execution.urls="http://127.0.0.1:8551" \
--network.connectToDiscv5Bootnodes \
--network.discv5.enabled=true \
--chain.defaultFeeRecipient=<Enter-eth-address-here> \
--jwt-secret="/opt/jwtsecret"
Ensure Java 11 or above is installed (Ubuntu: sudo apt install default-jre
).
git clone https://github.com/ConsenSys/teku.git
cd teku
./gradlew installDist
cd ..
The teku executable is now available in ./teku/build/install/teku/bin/teku
. You can also use the pre-built distribution or the consensys/teku:develop
docker image.
Start the client
./teku/build/install/teku/bin/teku \
--data-path "datadir-teku" \
--network goerli \
--ee-endpoint http://localhost:8551 \
--ee-jwt-secret-file "/opt/jwtsecret" \
--log-destination console \
--validators-proposer-default-fee-recipient=<Enter-eth-address-here> \
Please ensure you have the latest version of the configs! (Specified in the preparation step)
git clone -b develop https://github.com/prysmaticlabs/prysm.git
cd prysm
bazel build //beacon-chain:beacon-chain
cd ..
Start the client
cd prysm
bazel run //beacon-chain -- \
--goerli \
--datadir $db_path \
--suggested-fee-recipient=<Enter-eth-address-here> \
--http-web3provider=http://localhost:8551 \
--jwt-secret=/opt/jwtsecret
Pre-requisites: git
, make
, gcc
.
Clone and build from source (use branch unstable
)
git clone --branch=unstable https://github.com/status-im/nimbus-eth2.git
cd nimbus-eth2
make update OVERRIDE=1
make nimbus_beacon_node
cd ..
Start the client
nimbus-eth2/build/nimbus_beacon_node \
--network=goerli \
--web3-url=http://127.0.0.1:8551 \
--rest \
--metrics \
--jwt-secret="/opt/jwtsecret" \
--suggested-fee-recipient=<Enter-eth-address-here>