Note: We've updated this doc to have information for the kintsugi devnet as best we could, please let us know if you find any stale information.
Please find the information about the latest branch/image to use here: https://notes.ethereum.org/@ExXcnR0-SJGthjz1dwkA1A/HkJ8Aolct
docker
and docker-compose
is installed: docker-compose --version
and `docker –version
cd consensus-deployment-ansible/scripts/quick-run/merge-devnets
mkdir -p execution_data beacon_data
<testnet-name>.vars
(e.g: kintsugi.vars
) file file located in consensus-deployment-ansible/scripts/quick-run/merge-devnets
, this is just to ensure easy peeringcurl ifconfig.me
or visit https://whatismyipaddress.comkintsugi.vars
with your own IP address: https://i.imgur.com/xnNqN6h.pngdocker-compose --env-file kintsugi.vars -f docker-compose.geth.yml up -d
docker logs geth_init -f --tail=20
docker logs geth -f --tail=20
Fatal: Failed to write genesis block: database contains incompatible genesis (have 97bd4312dfa0f247e7199b59f243673d45934f3071be44174e007d56d29ada2b, new a28d8d73e087a01d09d8cb806f60863652f30b6b6dfa4e0157501ff07d422399)
Fatal: Failed to write genesis block: database contains incompatible genesis (have 97bd4312dfa0f247e7199b59f243673d45934f3071be44174e007d56d29ada2b, new a28d8d73e087a01d09d8cb806f60863652f30b6b6dfa4e0157501ff07d422399)
Solution :
beacon_data
and execution_data
consensus-deployment-ansible/scripts/quick-run/merge-devnets/
docker-compose --env-file kintsugi.vars -f docker-compose.lighthouse.yml up -d
docker logs lighthouse_beacon -f --tail=20
docker-compose -f <insert file name you used earlier here> down
docker stop geth
docker stop lighthouse_beacon
You can find a "Add to metamask" button on https://kintsugi.themerge.dev. As an alternative, you can also do it manually:
git clone https://github.com/eth-clients/merge-testnets.git
cd merge-testnets/kintsugi
Pre-requisites: git
, make
, go
, gcc
.
(use geth branch merge-kintsugi
from github.com/mariusvanderwijden/go-ethereum)
git clone -b merge-kintsugi https://github.com/MariusVanDerWijden/go-ethereum.git
cd go-ethereum
make geth
cd ..
Pre-requisites: dotnet 6.0
libsnappy-dev
libc6-dev
libc6
git clone -b themerge_kintsugi https://github.com/NethermindEth/nethermind --recursive
cd nethermind/src/Nethermind
dotnet build Nethermind.sln -c Release
Ensure Java 11 or above is installed (Ubuntu: sudo apt install default-jre
).
git clone -b kintsugi https://github.com/hyperledger/besu --recursive
cd besu
./gradlew installDist distTar
cd ..
The besu executable is now available in ./besu/build/install/besu/bin/besu
and a tar distribution is available in ./besu/build/distributions
. You can also build a docker image by using the distDocker
gradle target or use the pre-built docker image hyperledger/besu:kintsugi
.
(use branch unstable
)
git clone -b unstable https://github.com/sigp/lighthouse.git
cd lighthouse
make
cd ..
git clone https://github.com/chainsafe/lodestar.git
cd lodestar
yarn install --ignore-optional
yarn run build
cd ..
git clone -b kintsugi https://github.com/status-im/nimbus-eth2.git
cd nimbus-eth2/
make nimbus_beacon_node
cd ..
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.
Ensure you have Bazel-4.2.1 installed in your system. You can simply download the binary from github.
git clone -b kintsugi https://github.com/prysmaticlabs/prysm.git
cd prysm
bazel build //beacon-chain:beacon-chain
If you plan to run a validator
bazel build //validator:validator
In the kintsugi
folder
./go-ethereum/build/bin/geth init genesis.json --datadir "datadir-lh"
./go-ethereum/build/bin/geth --datadir "datadir-lh" --http --http.api="engine,eth,web3,net,debug" --http.corsdomain "*" --networkid=1337702 --syncmode=full --catalyst console
in a second window
(use lighthouse branch unstable
)
lighthouse \
--spec mainnet \
--testnet-dir ./ \
--debug-level info \
beacon_node \
--datadir ./testnet-lh1 \
--eth1 \
--http \
--http-allow-sync-stalled \
--metrics \
--merge \
--execution-endpoints http://127.0.0.1:8545 \
--enr-udp-port=9001 \
--enr-tcp-port=9001 \
--discovery-port=9001 \
--boot-nodes="enr:-Iq4QKuNB_wHmWon7hv5HntHiSsyE1a6cUTK1aT7xDSU_hNTLW3R4mowUboCsqYoh1kN9v3ZoSu_WuvW9Aw0tQ0Dxv6GAXxQ7Nv5gmlkgnY0gmlwhLKAlv6Jc2VjcDI1NmsxoQK6S-Cii_KmfFdUJL2TANL3ksaKUnNXvTCv1tLwXs0QgIN1ZHCCIyk"
In the kintsugi
folder:
mkdir datadir-prysm
./go-ethereum/build/bin/geth --catalyst init genesis.json --datadir datadir-prysm
./go-ethereum/build/bin/geth --catalyst --datadir datadir-prysm --networkid=1337702 --http --http.api engine,net,eth --ws --ws.api net,eth,engine --bootnodes enode://57745805245c441b71a9f3b3e7d78f75dd576d36b236b9f64cf9a9cccdcb574ec1f64d69c05add598ef26e3d7f646534b4c9976ca53551f71ad579a472635086@165.232.185.207:30303
In a different window in the kintsugi
folder
cd prysm
bazel run //beacon-chain -- --genesis-state $PWD/../genesis.ssz --datadir $PWD/../datadir-prysm --http-web3provider=http://localhost:8545 --min-sync-peers=1 --chain-config-file $PWD/../config.yaml --bootstrap-node "enr:-Iq4QKuNB_wHmWon7hv5HntHiSsyE1a6cUTK1aT7xDSU_hNTLW3R4mowUboCsqYoh1kN9v3ZoSu_WuvW9Aw0tQ0Dxv6GAXxQ7Nv5gmlkgnY0gmlwhLKAlv6Jc2VjcDI1NmsxoQK6S-Cii_KmfFdUJL2TANL3ksaKUnNXvTCv1tLwXs0QgIN1ZHCCIyk"
OR
bazel run //beacon-chain -- --genesis-state $PWD/../genesis.ssz --datadir $PWD/../datadir-prysm --http-web3provider=http://localhost:8545 --kintsugi-testnet
If you plan to run a validator, in yet another window in the kintsugi
folder
cd prysm
bazel run //validator -- --chain-config-file $PWD/../config.yaml
In the kintsugi
folder
./go-ethereum/build/bin/geth init genesis.json --datadir "datadir-teku"
./go-ethereum/build/bin/geth --datadir "datadir-teku" --http --http.api="engine,eth,web3,net,debug" --http.corsdomain "*" --networkid=1337702 --syncmode=full --catalyst console
in second window
./teku/build/install/teku/bin/teku \
--data-path "datadir-teku" \
--network kintsugi \
--Xee-endpoint http://localhost:8545 \
--log-destination console
In the kintsugi
folder
./go-ethereum/build/bin/geth init genesis.json --datadir "datadir-nimbus"
./go-ethereum/build/bin/geth --datadir "datadir-nimbus" --ws --ws.api="engine,eth,web3,net,debug" --http.corsdomain "*" --networkid=1337702 --syncmode=full --catalyst console
in second window
nimbus-eth2/build/nimbus_beacon_node --network=. --web3-url=ws://127.0.0.1:8546 --log-level=DEBUG --bootstrap-file=bootstrap_nodes.txt --terminal-total-difficulty-override=5000000000 --data-dir=nimbus-beacondata --bootstrap-node=enr:-Iq4QKuNB_wHmWon7hv5HntHiSsyE1a6cUTK1aT7xDSU_hNTLW3R4mowUboCsqYoh1kN9v3ZoSu_WuvW9Aw0tQ0Dxv6GAXxQ7Nv5gmlkgnY0gmlwhLKAlv6Jc2VjcDI1NmsxoQK6S-Cii_KmfFdUJL2TANL3ksaKUnNXvTCv1tLwXs0QgIN1ZHCCIyk
In the kintsugi
folder
./go-ethereum/build/bin/geth init genesis.json --datadir "datadir-lodestar"
./go-ethereum/build/bin/geth --datadir "datadir-lodestar" --http --http.api="engine,eth,web3,net,debug" --http.corsdomain "*" --networkid=1337702 --syncmode=full --catalyst console
In a second window
cd lodestar
./lodestar beacon --rootDir="../lodestar-beacondata" --paramsFile="../config.yaml" --genesisStateFile="../genesis.ssz" --network.discv5.bootEnrs="enr:-Iq4QKuNB_wHmWon7hv5HntHiSsyE1a6cUTK1aT7xDSU_hNTLW3R4mowUboCsqYoh1kN9v3ZoSu_WuvW9Aw0tQ0Dxv6GAXxQ7Nv5gmlkgnY0gmlwhLKAlv6Jc2VjcDI1NmsxoQK6S-Cii_KmfFdUJL2TANL3ksaKUnNXvTCv1tLwXs0QgIN1ZHCCIyk" --eth1.enabled=true --execution.urls="http://127.0.0.1:8545" --network.connectToDiscv5Bootnodes --network.discv5.enabled=true
In the src/Nethermind/Nethermind.Runner
folder of nethermind
dotnet run -c Release -- --config kintsugi
In a second window, in the kintsugi
folder
(use lighthouse branch kintsugi
)
lighthouse \
--spec mainnet \
--testnet-dir ./ \
--debug-level info \
beacon_node \
--datadir ./testnet-lh1 \
--eth1 \
--http \
--http-allow-sync-stalled \
--metrics \
--merge \
--execution-endpoints http://127.0.0.1:8550 \
--enr-udp-port=9001 \
--enr-tcp-port=9001 \
--discovery-port=9001 \
--boot-nodes="enr:-Iq4QKuNB_wHmWon7hv5HntHiSsyE1a6cUTK1aT7xDSU_hNTLW3R4mowUboCsqYoh1kN9v3ZoSu_WuvW9Aw0tQ0Dxv6GAXxQ7Nv5gmlkgnY0gmlwhLKAlv6Jc2VjcDI1NmsxoQK6S-Cii_KmfFdUJL2TANL3ksaKUnNXvTCv1tLwXs0QgIN1ZHCCIyk"
In the src/Nethermind/Nethermind.Runner
folder of nethermind
dotnet run -c Release -- --config kintsugi
In a second window, in the prysm
folder
bazel run //beacon-chain -- \
--interop-genesis-state merge-testnets/kintsugi/genesis.ssz \
--datadir $PWD/../datadir-prysm \
--http-web3provider=http://localhost:8550 \
--min-sync-peers=1 \
--chain-config-file merge-testnets/kintsugi/config.yaml \
--bootstrap-node "enr:-Ly4QGibo1DJfV1BkAf8AnN6matZIlxGrDjnyTpR0qojiGD8XxDysNCEk1NctXRv3e04sHBu-okKgJBZzYHwQDeWG2QBh2F0dG5ldHOIAAAAAAAAAACEZXRoMpDtvzqoQQAAcAQAAAAAAAAAgmlkgnY0gmlwhMBR0MqJc2VjcDI1NmsxoQI69Upbug4HrZ-WKvP3uqZfapzxM7WUG3_eB3F5zoP3B4hzeW5jbmV0cwCDdGNwgiMog3VkcIIjKA" \
--merge-testnet
--terminal-total-difficulty-override 5000000000
In the src/Nethermind/Nethermind.Runner
folder of nethermind
dotnet run -c Release -- --config kintsugi
In a second window
teku/build/install/teku/bin/teku \
--data-path "datadir-teku" \
--network kintsugi \
--Xee-endpoint http://localhost:8550
In the src/Nethermind/Nethermind.Runner
folder of nethermind
dotnet run -c Release -- --config kintsugi
In a second window, in the kintsugi
folder
nimbus-eth2/build/nimbus_beacon_node \
--network=. \
--web3-url=ws://127.0.0.1:8551 \
--log-level=DEBUG \
--terminal-total-difficulty-override=5000000000 \
--data-dir=nimbus-beacondata \
--bootstrap-node=enr:-Iq4QKuNB_wHmWon7hv5HntHiSsyE1a6cUTK1aT7xDSU_hNTLW3R4mowUboCsqYoh1kN9v3ZoSu_WuvW9Aw0tQ0Dxv6GAXxQ7Nv5gmlkgnY0gmlwhLKAlv6Jc2VjcDI1NmsxoQK6S-Cii_KmfFdUJL2TANL3ksaKUnNXvTCv1tLwXs0QgIN1ZHCCIyk
In the src/Nethermind/Nethermind.Runner
folder of nethermind
dotnet run -c Release -- --config kintsugi
In a second window, in the lodestar
folder
./lodestar beacon \
--rootDir="../lodestar-beacondata" \
--paramsFile="./config.yaml" \
--genesisStateFile="./genesis.ssz" \
--network.discv5.bootEnrs="enr:-Iq4QKuNB_wHmWon7hv5HntHiSsyE1a6cUTK1aT7xDSU_hNTLW3R4mowUboCsqYoh1kN9v3ZoSu_WuvW9Aw0tQ0Dxv6GAXxQ7Nv5gmlkgnY0gmlwhLKAlv6Jc2VjcDI1NmsxoQK6S-Cii_KmfFdUJL2TANL3ksaKUnNXvTCv1tLwXs0QgIN1ZHCCIyk" \
--eth1.enabled=true \
--execution.urls="http://127.0.0.1:8550" \
--network.connectToDiscv5Bootnodes \
--network.discv5.enabled=true \
--eth1.depositContractDeployBlock 0
Make sure to copy config.yml
and genesis.ssz
from merge-testnets/kintsugi
folder to lodestar
folder
In the kintsugi
folder
mkdir datadir-lh-besu && \
./besu/build/install/besu/bin/besu \
--data-path "datadir-lh-besu" \
--rpc-http-enabled \
--rpc-http-api=ADMIN,ETH,NET,DEBUG,TXPOOL,EXECUTION \
--p2p-enabled=true \
--Xmerge-support=true \
--network=kintsugi_v1
in a second window
(use lighthouse branch unstable
)
lighthouse \
--spec mainnet \
--testnet-dir ./ \
--debug-level info \
beacon_node \
--datadir ./testnet-lh1 \
--eth1 \
--http \
--http-allow-sync-stalled \
--metrics \
--merge \
--execution-endpoints http://127.0.0.1:8545 \
--enr-udp-port=9001 \
--enr-tcp-port=9001 \
--discovery-port=9001 \
--boot-nodes="enr:-Iq4QKuNB_wHmWon7hv5HntHiSsyE1a6cUTK1aT7xDSU_hNTLW3R4mowUboCsqYoh1kN9v3ZoSu_WuvW9Aw0tQ0Dxv6GAXxQ7Nv5gmlkgnY0gmlwhLKAlv6Jc2VjcDI1NmsxoQK6S-Cii_KmfFdUJL2TANL3ksaKUnNXvTCv1tLwXs0QgIN1ZHCCIyk"
In the kintsugi
folder:
mkdir datadir-prysm-besu && \
./besu/build/install/besu/bin/besu \
--data-path "datadir-prysm-besu" \
--rpc-http-enabled \
--rpc-http-api=ADMIN,ETH,NET,DEBUG,TXPOOL,EXECUTION \
--p2p-enabled=true \
--Xmerge-support=true \
--network=kintsugi_v1
In a different window in the kintsugi
folder
cd prysm
bazel run //beacon-chain -- --genesis-state $PWD/../genesis.ssz --datadir $PWD/../datadir-prysm --http-web3provider=http://localhost:8545 --min-sync-peers=1 --chain-config-file $PWD/../config.yaml --bootstrap-node "enr:-Iq4QKuNB_wHmWon7hv5HntHiSsyE1a6cUTK1aT7xDSU_hNTLW3R4mowUboCsqYoh1kN9v3ZoSu_WuvW9Aw0tQ0Dxv6GAXxQ7Nv5gmlkgnY0gmlwhLKAlv6Jc2VjcDI1NmsxoQK6S-Cii_KmfFdUJL2TANL3ksaKUnNXvTCv1tLwXs0QgIN1ZHCCIyk"
OR
bazel run //beacon-chain -- --genesis-state $PWD/../genesis.ssz --datadir $PWD/../datadir-prysm --http-web3provider=http://localhost:8545 --kintsugi-testnet
If you plan to run a validator, in yet another window in the kintsugi
folder
cd prysm
bazel run //validator -- --chain-config-file $PWD/../config.yaml
In the kintsugi
folder
mkdir datadir-teku-besu && \
./besu/build/install/besu/bin/besu \
--data-path "datadir-teku-besu" \
--rpc-http-enabled \
--rpc-http-api=ADMIN,ETH,NET,DEBUG,TXPOOL,EXECUTION \
--p2p-enabled=true \
--Xmerge-support=true \
--network=kintsugi_v1
in second window
./teku/build/install/teku/bin/teku \
--data-path "datadir-teku" \
--network kintsugi \
--Xee-endpoint http://localhost:8545 \
--log-destination console
In the kintsugi
folder
mkdir datadir-nimbus-besu && \
./besu/build/install/besu/bin/besu \
--data-path "datadir-nimbus-besu" \
--rpc-ws-enabled \
--rpc-ws-api=ADMIN,ETH,NET,DEBUG,TXPOOL,EXECUTION \
--p2p-enabled=true \
--Xmerge-support=true \
--network=kintsugi_v1
in second window
nimbus-eth2/build/nimbus_beacon_node --network=. --web3-url=ws://127.0.0.1:8546 --log-level=DEBUG --bootstrap-file=bootstrap_nodes.txt --terminal-total-difficulty-override=5000000000 --data-dir=nimbus-beacondata --bootstrap-node=enr:-Iq4QKuNB_wHmWon7hv5HntHiSsyE1a6cUTK1aT7xDSU_hNTLW3R4mowUboCsqYoh1kN9v3ZoSu_WuvW9Aw0tQ0Dxv6GAXxQ7Nv5gmlkgnY0gmlwhLKAlv6Jc2VjcDI1NmsxoQK6S-Cii_KmfFdUJL2TANL3ksaKUnNXvTCv1tLwXs0QgIN1ZHCCIyk
In the kintsugi
folder
mkdir datadir-lodestar-besu && \
./besu/build/install/besu/bin/besu \
--data-path "datadir-ldoestar-besu" \
--rpc-http-enabled \
--rpc-http-api=ADMIN,ETH,NET,DEBUG,TXPOOL,EXECUTION \
--p2p-enabled=true \
--Xmerge-support=true \
--network=kintsugi_v1
In a second window
cd lodestar
./lodestar beacon --rootDir="../lodestar-beacondata" --paramsFile="../config.yaml" --genesisStateFile="../genesis.ssz" --network.discv5.bootEnrs="enr:-Iq4QKuNB_wHmWon7hv5HntHiSsyE1a6cUTK1aT7xDSU_hNTLW3R4mowUboCsqYoh1kN9v3ZoSu_WuvW9Aw0tQ0Dxv6GAXxQ7Nv5gmlkgnY0gmlwhLKAlv6Jc2VjcDI1NmsxoQK6S-Cii_KmfFdUJL2TANL3ksaKUnNXvTCv1tLwXs0QgIN1ZHCCIyk" --eth1.enabled=true --execution.urls="http://127.0.0.1:8545" --network.connectToDiscv5Bootnodes --network.discv5.enabled=true
git clone -b themerge_kintsugi https://github.com/NethermindEth/nethermind --recursive
cd nethermind/src/Nethermind
dotnet build Nethermind.sln -c Release
In Cygwin https://www.cygwin.com/ console:
git clone https://github.com/chainsafe/lodestar.git
cd lodestar
yarn install --ignore-optional
yarn run build
cd ..
(use branch unstable
)
git clone -b unstable https://github.com/sigp/lighthouse.git
cd lighthouse
make
cd ..
In the src/Nethermind/Nethermind.Runner
folder of nethermind
dotnet run -c Release -- --config kintsugi
In Cygwin https://www.cygwin.com/ console, in the lodestar
folder
./lodestar beacon \
--rootDir="../lodestar-beacondata" \
--paramsFile="./config.yaml" \
--genesisStateFile="./genesis.ssz" \
--network.discv5.bootEnrs="enr:-Iq4QKuNB_wHmWon7hv5HntHiSsyE1a6cUTK1aT7xDSU_hNTLW3R4mowUboCsqYoh1kN9v3ZoSu_WuvW9Aw0tQ0Dxv6GAXxQ7Nv5gmlkgnY0gmlwhLKAlv6Jc2VjcDI1NmsxoQK6S-Cii_KmfFdUJL2TANL3ksaKUnNXvTCv1tLwXs0QgIN1ZHCCIyk" \
--eth1.enabled=true \
--execution.urls="http://127.0.0.1:8550" \
--network.connectToDiscv5Bootnodes \
--network.discv5.enabled=true \
--eth1.depositContractDeployBlock 0
Make sure to copy config.yml
and genesis.ssz
from merge-testnets/kintsugi
folder to lodestar
folder
In the src/Nethermind/Nethermind.Runner
folder of nethermind
dotnet run -c Release -- --config kintsugi
In Cygwin https://www.cygwin.com/ console, in the unstable
folder
(use lighthouse branch unstable
)
lighthouse \
--spec mainnet \
--testnet-dir ./
--debug-level info \
beacon_node \
--datadir ./testnet-lh1 \
--eth1 \
--http \
--http-allow-sync-stalled \
--metrics \
--merge \
--execution-endpoints http://127.0.0.1:8550 \
--enr-udp-port=9001 \
--enr-tcp-port=9001 \
--discovery-port=9001 \
--boot-nodes="enr:-Iq4QKuNB_wHmWon7hv5HntHiSsyE1a6cUTK1aT7xDSU_hNTLW3R4mowUboCsqYoh1kN9v3ZoSu_WuvW9Aw0tQ0Dxv6GAXxQ7Nv5gmlkgnY0gmlwhLKAlv6Jc2VjcDI1NmsxoQK6S-Cii_KmfFdUJL2TANL3ksaKUnNXvTCv1tLwXs0QgIN1ZHCCIyk" \
--eth1-endpoints http://127.0.0.1:8550
git clone https://github.com/eth-clients/merge-testnets.git
cd merge-testnets/kintsugi
First make sure to have the go
compiler installed:
brew install go
(use geth branch merge-kintsugi
from github.com/mariusvanderwijden/go-ethereum)
git clone -b merge-kintsugi https://github.com/MariusVanDerWijden/go-ethereum.git
cd go-ethereum
make geth
cd ..
Pre-requisites: dotnet 6.0
Install all prerequisites:
brew install rocksdb gmp snappy lz4 zstd
Build binary on themerge_kintsugi
branch:
git clone -b themerge_kintsugi https://github.com/NethermindEth/nethermind --recursive
cd nethermind/src/Nethermind
dotnet build Nethermind.sln -c Release
Install cmake
brew install cmake rust
Install rust compiler and configure it
brew install rustup
rustup-init
Then restart the current shell to have the shell's PATH updated.
(use branch unstable
)
git clone -b unstable https://github.com/sigp/lighthouse.git
cd lighthouse
make
cd ..
Ensure Java 11 or above is installed
brew install openjdk
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 distributions from https://github.com/ConsenSys/teku#binary-releases or the consensys/teku:develop
docker image.
In the kintsugi
folder
./go-ethereum/build/bin/geth init genesis.json --datadir "datadir-lh"
./go-ethereum/build/bin/geth --datadir "datadir-lh" --http --http.api="engine,eth,web3,net,debug" --http.corsdomain "*" --networkid=1337702 --syncmode=full --catalyst console
in second window (always from kintsugi
folder):
lighthouse \
--spec mainnet \
--testnet-dir ./ \
--debug-level info \
beacon_node \
--datadir ./testnet-lh1 \
--eth1 \
--http \
--http-allow-sync-stalled \
--metrics \
--merge \
--execution-endpoints http://127.0.0.1:8545 \
--enr-udp-port=9001 \
--enr-tcp-port=9001 \
--discovery-port=9001 \
--boot-nodes="enr:-Iq4QKuNB_wHmWon7hv5HntHiSsyE1a6cUTK1aT7xDSU_hNTLW3R4mowUboCsqYoh1kN9v3ZoSu_WuvW9Aw0tQ0Dxv6GAXxQ7Nv5gmlkgnY0gmlwhLKAlv6Jc2VjcDI1NmsxoQK6S-Cii_KmfFdUJL2TANL3ksaKUnNXvTCv1tLwXs0QgIN1ZHCCIyk"
In the kintsugi
folder
./go-ethereum/build/bin/geth init genesis.json --datadir "datadir-teku"
./go-ethereum/build/bin/geth --datadir "datadir-teku" --http --http.api="engine,eth,web3,net,debug" --http.corsdomain "*" --networkid=1337702 --syncmode=full --catalyst console
in second window
./teku/build/install/teku/bin/teku \
--data-path "datadir-teku" \
--network kintsugi \
--Xee-endpoint http://localhost:8545 \
--log-destination console
In the src/Nethermind/Nethermind.Runner
folder of nethermind
dotnet run -c Release -- --config kintsugi
In a second window, in the kintsugi
folder
(use lighthouse branch unstable
)
lighthouse \
--spec mainnet \
--testnet-dir ./ \
--debug-level info \
beacon_node \
--datadir ./testnet-lh1 \
--dummy-eth1 \
--http \
--http-allow-sync-stalled \
--metrics \
--merge \
--execution-endpoints http://127.0.0.1:8550 \
--eth1-endpoints http://127.0.0.1:8550 \
--enr-udp-port=9001 \
--enr-tcp-port=9001 \
--discovery-port=9001 \
--boot-nodes="enr:-Iq4QKuNB_wHmWon7hv5HntHiSsyE1a6cUTK1aT7xDSU_hNTLW3R4mowUboCsqYoh1kN9v3ZoSu_WuvW9Aw0tQ0Dxv6GAXxQ7Nv5gmlkgnY0gmlwhLKAlv6Jc2VjcDI1NmsxoQK6S-Cii_KmfFdUJL2TANL3ksaKUnNXvTCv1tLwXs0QgIN1ZHCCIyk"
In the src/Nethermind/Nethermind.Runner
folder of nethermind
dotnet run -c Release -- --config kintsugi
In a second window, in the prysm
folder
bazel run //beacon-chain -- \
--interop-genesis-state merge-testnets/kintsugi/genesis.ssz \
--datadir $PWD/../datadir-prysm \
--http-web3provider=http://localhost:8550 \
--min-sync-peers=1 \
--chain-config-file merge-testnets/kintsugi/config.yaml \
--bootstrap-node "enr:-Ly4QGibo1DJfV1BkAf8AnN6matZIlxGrDjnyTpR0qojiGD8XxDysNCEk1NctXRv3e04sHBu-okKgJBZzYHwQDeWG2QBh2F0dG5ldHOIAAAAAAAAAACEZXRoMpDtvzqoQQAAcAQAAAAAAAAAgmlkgnY0gmlwhMBR0MqJc2VjcDI1NmsxoQI69Upbug4HrZ-WKvP3uqZfapzxM7WUG3_eB3F5zoP3B4hzeW5jbmV0cwCDdGNwgiMog3VkcIIjKA" \
--merge-testnet \
--terminal-total-difficulty-override 5000000000
In the src/Nethermind/Nethermind.Runner
folder of nethermind
dotnet run -c Release -- --config kintsugi
In a second window
teku/build/install/teku/bin/teku \
--data-path "datadir-teku" \
--network kintsugi \
--Xee-endpoint http://localhost:8550
In the src/Nethermind/Nethermind.Runner
folder of nethermind
dotnet run -c Release -- --config kintsugi
In a second window, in the kintsugi
folder
nimbus-eth2/build/nimbus_beacon_node \
--network=. \
--web3-url=ws://127.0.0.1:8551 \
--log-level=DEBUG \
--terminal-total-difficulty-override=5000000000 \
--data-dir=nimbus-beacondata \
--bootstrap-node=enr:-Iq4QKuNB_wHmWon7hv5HntHiSsyE1a6cUTK1aT7xDSU_hNTLW3R4mowUboCsqYoh1kN9v3ZoSu_WuvW9Aw0tQ0Dxv6GAXxQ7Nv5gmlkgnY0gmlwhLKAlv6Jc2VjcDI1NmsxoQK6S-Cii_KmfFdUJL2TANL3ksaKUnNXvTCv1tLwXs0QgIN1ZHCCIyk
In the src/Nethermind/Nethermind.Runner
folder of nethermind
dotnet run -c Release -- --config kintsugi
In a second window, in the lodestar
folder
./lodestar beacon \
--rootDir="../lodestar-beacondata" -\
-paramsFile="./config.yaml" \
--genesisStateFile="./genesis.ssz" \
--network.discv5.bootEnrs="enr:-Iq4QKuNB_wHmWon7hv5HntHiSsyE1a6cUTK1aT7xDSU_hNTLW3R4mowUboCsqYoh1kN9v3ZoSu_WuvW9Aw0tQ0Dxv6GAXxQ7Nv5gmlkgnY0gmlwhLKAlv6Jc2VjcDI1NmsxoQK6S-Cii_KmfFdUJL2TANL3ksaKUnNXvTCv1tLwXs0QgIN1ZHCCIyk" \
--eth1.enabled=true \
--execution.urls="http://127.0.0.1:8550" \
--network.connectToDiscv5Bootnodes \
--network.discv5.enabled=true
Make sure to copy config.yml
and genesis.ssz
from merge-testnets/kintsugi
folder to lodestar
folder
Warning: Please do not try this with real ether, these instructions are purely meant for the merge devnets.
This guide assumes you are using metamask to interact with the faucet and store the funds, Advanced users can bypass this step. There are other methods to perform deposits, this guide merely describes one such method.
eth2-val-tools
: https://github.com/protolambda/eth2-val-toolsethereal
: https://github.com/wealdtech/ethereal (please build from source)jq
for pretty printing outputsecrets.env
. This file will contain our private key, so make sure you don't commit it anywhere.secrets.env
with the follwing variable names:# sets the deposit amount to use
DEPOSIT_AMOUNT=32000000000
# sets the genesis fork version of the testnet
FORK_VERSION="0x60000069"
# sets the mnemonic to derive the keys from
VALIDATORS_MNEMONIC=""
# sets the mnemonic for withdrawal credentials
WITHDRAWALS_MNEMONIC=""
# temporary location to store the deposit data
DEPOSIT_DATAS_FILE_LOCATION="/tmp/deposit_data.txt"
# sets the deposit contract address
DEPOSIT_CONTRACT_ADDRESS="0x4242424242424242424242424242424242424242"
# sets the eth1 address from which the transaction will be made
ETH1_FROM_ADDR=""
# sets the eth1 private key used to sign the transaction
ETH1_FROM_PRIV=""
# forces the deposit since the deposit contract will not be recognized by the tool
FORCE_DEPOSIT=true
# sets an RPC endpoint to submit the transaction to
ETH1_RPC=https://rpc.kintsugi.themerge.dev
eth2-val-tools mnemonic
The output should contain a list of 24 words. Copy those words into the secrets.env file under the variable VALIDATORS_MNEMONIC. Don't forget to wrap the 24 words inside ""!
Repeat the process for WITHDRAWALS_MNEMONIC.
secrets.env
again!devnet_deposits.sh
with the following content:#!/bin/bash
echo "USE AT YOUR OWN RISK"
read -p "Are you sure you've double checked the values and want to make this deposit? " -n 1 -r
echo
if [[ ! $REPLY =~ ^[Yy]$ ]]
then
[[ "$0" = "$BASH_SOURCE" ]] && exit 1 || return 1
fi
source secrets.env
if [[ -z "${ETH1_FROM_ADDR}" ]]; then
echo "need ETH1_FROM_ADDR environment var"
exit 1 || return 1
fi
if [[ -z "${ETH1_FROM_PRIV}" ]]; then
echo "need ETH1_FROM_PRIV environment var"
exit 1 || return 1
fi
eth2-val-tools deposit-data \
--source-min=0 \
--source-max=1 \
--amount=$DEPOSIT_AMOUNT \
--fork-version=$FORK_VERSION \
--withdrawals-mnemonic="$WITHDRAWALS_MNEMONIC" \
--validators-mnemonic="$VALIDATORS_MNEMONIC" > $DEPOSIT_DATAS_FILE_LOCATION
# Iterate through lines, each is a json of the deposit data and some metadata
while read x; do
account_name="$(echo "$x" | jq '.account')"
pubkey="$(echo "$x" | jq '.pubkey')"
echo "Sending deposit for validator $account_name $pubkey"
ethereal beacon deposit \
--allow-unknown-contract=$FORCE_DEPOSIT \
--address="$DEPOSIT_CONTRACT_ADDRESS" \
--connection=$ETH1_RPC \
--data="$x" \
--value="$DEPOSIT_ACTUAL_VALUE" \
--from="$ETH1_FROM_ADDR" \
--privatekey="$ETH1_FROM_PRIV"
echo "Sent deposit for validator $account_name $pubkey"
sleep 3
done < "$DEPOSIT_DATAS_FILE_LOCATION"
chmod +x ./devnet_deposits.sh
secrets.env
and then finally run the script with:./devnet_deposit.sh
64
epochs before the validator is included on the beaconchain.Now that the deposit has been made, please generate your validator keys using your validator mnemonic specified in secrets.env
and then start your validator to be a part of the network.