Skip to content

Instantly share code, notes, and snippets.

@rauljordan
Last active July 9, 2024 09:37
Show Gist options
  • Save rauljordan/50302db7bb175c713d004cec8be601ea to your computer and use it in GitHub Desktop.
Save rauljordan/50302db7bb175c713d004cec8be601ea to your computer and use it in GitHub Desktop.
Multinode setup mainnet for Prysm

Hi all, to try out a multinode setup with interop config:

bazel run //tools/genesis-state-gen --define=ssz=mainnet -- \
  --num-validators=64 \
  --output-ssz=/tmp/genesis.ssz \
  --mainnet-config

First node:

bazel run //beacon-chain --define ssz=mainnet -- \
  --http-web3provider \
  --web3provider \
  --no-custom-config \
  --bootstrap-node= \
  --custom-genesis-delay=12 \
  --datadir /tmp/chaindata \
  --force-clear-db \
  --interop-genesis-state /tmp/genesis.ssz \
  --interop-eth1data-votes \
  --min-sync-peers=0 \
  --enable-discv5 \
  --enable-dynamic-committee-subnets

then navigate to http://localhost:8080/p2p and copy the node's ENR and add it to your env vars:

export NODE_ENR=enr:-LK4QNNTee6XKFrTDjE1ZpXK0-1_E5h4a0t-Bn0IWhd9RAawNqYlGu2sI0kquI4-dmC7_9IOhYFso_zvX8JqAeRjCMMBh2F0dG5ldHOIAAAAAAAAAACEZXRoMpCbXd4fAAAAAP__________gmlkgnY0gmlwhMCoANWJc2VjcDI1NmsxoQLlfMfDNg-bFfIlF1Goq6QEwsOg4pBRS-1GwEvEnlSUeoN0Y3CCMsiDdWRwgi7g,/ip4/192.168.0.213/tcp/13000/p2p/16Uiu2HAmAsVhW9uvZ6vVDyc4DxfaBgELrReZY5BuFof9jedm5NBb

Then start the second node with

bazel run //beacon-chain --define ssz=mainnet -- \
  --http-web3provider \
  --web3provider \
  --no-custom-config \
  --bootstrap-node= \
  --custom-genesis-delay=12 \
  --datadir /tmp/chaindata2 \
  --force-clear-db \
  --interop-genesis-state /tmp/genesis.ssz \
  --interop-eth1data-votes \
  --min-sync-peers=0 \
  --enable-discv5 \
  --enable-dynamic-committee-subnets \
  --bootstrap-node=${NODE_ENR} \
  --p2p-udp-port=14232 \
  --p2p-tcp-port=14231 \
  --monitoring-port 8081 \
  --rpc-port 4001

Now start your first validator client:

bazel run //validator --define=ssz=mainnet -- \
  --no-custom-config \
  --keymanager=interop \
  --keymanageropts='{"keys":32,"offset":0}' \
  --disable-protect-attester \
  --disable-protect-proposer \
  --datadir /tmp/val1

Then your second validator client:

bazel run //validator --define=ssz=mainnet -- \
  --no-custom-config \
  --keymanager=interop \
  --keymanageropts='{"keys":32,"offset":32}' \
  --disable-protect-attester \
  --disable-protect-proposer \
  --beacon-rpc-provider localhost:4001 \
  --datadir /tmp/val2
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment