-
-
owned this note
-
Published
Linked with GitHub
# How to run a node on Ropsten
## Who is this guide for?
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:
- EthDocker: [Here](https://www.reddit.com/r/ethstaker/comments/uzl500/get_ready_for_ropsten_testnet_with_ethdocker/)
- Coming soon!
## What's new in Ropsten?
The client behaviour in Ropsten is almost identical to [Kiln](https://blog.ethereum.org/2022/03/14/kiln-merge-testnet/). We mainly see some minor changes to the API.
To recap the [changes in Kiln](https://hackmd.io/@n0ble/kiln-spec): The introduction of a separate Execution Endpoint API port as well as authentication for that port. The beacon node and execution nodes use JWT authentication to communicate with each other. To achieve this, we can either store the authentication token as a file or pass it as a CLI parameter. We will rely on the file method for this guide. If you're curious, you can find the specs [here](https://github.com/ethereum/execution-apis/blob/2d8fe82fcc4e63f82501eb41819cb1a222ad6007/src/engine/authentication.md).
## Which version/branch do I use?
Consensus layer
| client name | git branch | docker image |
| ----------- | ---------- | ------------ |
| Lighthouse |unstable| sigp/lighthouse:latest-unstable| |
| Teku | master | consensys/teku:develop |
| Lodestar | master | chainsafe/lodestar:next |
| Nimbus | unstable | statusim/nimbus-eth2:multiarch-v22.5.1 |
| Prysm | develop | gcr.io/prysmaticlabs/prysm/beacon-chain:latest,gcr.io/prysmaticlabs/prysm/validator:latest |
Execution layer
| client name | git branch | docker image |
| ----------- | ---------- | ------------ |
| Geth | master | ethereum/client-go:latest |
| Nethermind | master | nethermind/nethermind:latest|
| Erigon | alpha | thorax/erigon:v2022.05.07 |
| Besu | main | hyperledger/besu:22.4.2-SNAPSHOT |
## Preparation
- Download the configs from https://github.com/eth-clients/merge-testnets/tree/main/ropsten-beacon-chain
```
cd /tmp
git clone https://github.com/eth-clients/merge-testnets.git
cd /tmp/merge-testnets/ropsten-beacon-chain
```
- Generate the JWT secret with `openssl rand -hex 32 | tr -d "\n" > "/tmp/jwtsecret"`. This file needs to be passed to both the Execution Client and the Consensus Client.
## Run an Execution Layer Client
### Geth
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 --ropsten \
--datadir "geth-datadir" \
--http --http.api="eth,web3,net" --http.vhosts="*" --http.corsdomain "*" \
--ws --ws.api="eth,web3,net" \
--override.terminaltotaldifficulty 100000000000000000000000 \
--authrpc.jwtsecret=/tmp/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.
### Nethermind
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 ropsten --JsonRpc.Host=0.0.0.0 --JsonRpc.JwtSecretFile=/tmp/jwtsecret
```
### Erigon
```
git clone -b alpha https://github.com/ledgerwatch/erigon
cd erigon
make erigon rpcdaemon
./build/bin/erigon --chain=ropsten --datadir ropsten-devnet --authrpc.jwtsecret=/tmp/jwtsecret --http --http.api=engine,net,eth
```
After starting the client, you will be able to interact with the client using the following ports:
* localhost:8545: Web3 json rpc
* localhost:8550: Engine json rpc
* localhost:8551: Engine json rpc with json rpc authentication
### Besu
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.2 besu snapshot artifact](https://hyperledger.jfrog.io/ui/native/besu-binaries/besu/22.4.2-SNAPSHOT/), or use the docker image `hyperledger/besu:22.4.1`.
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 ropsten:
```
build/install/besu/bin/besu \
--network=ropsten \
--rpc-http-enabled=true \
--rpc-http-host="0.0.0.0" \
--rpc-http-cors-origins="*" \
--rpc-ws-enabled=true \
--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=<path_to_your_JWT_secret_file>
```
## Run a Consensus Layer Client
### Lighthouse
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 ropsten \
--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="/tmp/jwtsecret" \
--suggested-fee-recipient=<enter-eth-address-here> \
```
### Lodestar
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=ropsten --eth1.enabled=true --execution.urls="http://127.0.0.1:8551" --network.connectToDiscv5Bootnodes --network.discv5.enabled=true --jwt-secret="/tmp/jwtsecret" --network.discv5.bootEnrs="enr:-Iq4QMCTfIMXnow27baRUb35Q8iiFHSIDBJh6hQM5Axohhf4b6Kr_cOCu0htQ5WvVqKvFgY28893DHAg8gnBAXsAVqmGAX53x8JggmlkgnY0gmlwhLKAlv6Jc2VjcDI1NmsxoQK6S-Cii_KmfFdUJL2TANL3ksaKUnNXvTCv1tLwXs0QgIN1ZHCCIyk"
```
### Teku
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](https://artifacts.consensys.net/public/teku/raw/names/teku.tar.gz/versions/develop/teku-develop.tar.gz) or the `consensys/teku:develop` docker image.
Start the client
```
./teku/build/install/teku/bin/teku \
--data-path "datadir-teku" \
--network ropsten \
--ee-endpoint http://localhost:8551 \
--ee-jwt-secret-file "/tmp/jwtsecret" \
--log-destination console \
--validators-proposer-default-fee-recipient=<Enter-eth-address-here> \
```
### Prysm
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 -- \
--genesis-state=/tmp/merge-testnets/ropsten-beacon-chain/genesis.ssz \
--chain-config-file=/tmp/merge-testnets/ropsten-beacon-chain/config.yaml \
--datadir $db_path \
--suggested-fee-recipient=<Enter-eth-address-here> \
--http-web3provider=http://localhost:8551 \
--bootstrap-node=enr:-Iq4QMCTfIMXnow27baRUb35Q8iiFHSIDBJh6hQM5Axohhf4b6Kr_cOCu0htQ5WvVqKvFgY28893DHAg8gnBAXsAVqmGAX53x8JggmlkgnY0gmlwhLKAlv6Jc2VjcDI1NmsxoQK6S-Cii_KmfFdUJL2TANL3ksaKUnNXvTCv1tLwXs0QgIN1ZHCCIyk
--jwt-secret=/tmp/jwtsecret
```
### Nimbus
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=ropsten \
--web3-url=http://127.0.0.1:8551 \
--rest \
--metrics \
--jwt-secret="/tmp/jwtsecret"
```