From 87fffca358914e48259b5cd33b6738acb8fceb84 Mon Sep 17 00:00:00 2001 From: Roy Crihfield Date: Thu, 11 Apr 2024 03:21:36 +0000 Subject: [PATCH] fixturenet-plugeth Deneb/Cancun upgrade (#789) Updates fixturenet-plugeth stack for the Deneb fork based on Geth v1.13.x: - updates genesis generator tool, and simplifies the config: the default from `ethereum-genesis-generator` can be used for a from-genesis Merged chain. Reviewed-on: https://git.vdb.to/cerc-io/stack-orchestrator/pulls/789 Reviewed-by: jonathanface Reviewed-by: Thomas E Lackey --- .../docker-compose-fixturenet-plugeth.yml | 1 + .../config/fixturenet-eth/fixturenet-eth.env | 5 +++- .../cerc-fixturenet-eth-genesis/Dockerfile | 17 +++++------ .../genesis/el/build_el.sh | 28 ++----------------- .../genesis/el/el-config.yaml | 24 ++++------------ .../cerc-fixturenet-eth-geth/run-el.sh | 11 ++++++-- .../cerc-fixturenet-eth-lighthouse/Dockerfile | 10 ++----- .../genesis/cl/beacon_node.sh | 1 - .../genesis/cl/bootnode.sh | 2 -- .../genesis/cl/build_cl.sh | 20 +++++-------- .../genesis/cl/validator_client.sh | 2 -- .../genesis/cl/vars.env | 7 ++++- .../cerc-lighthouse/Dockerfile | 9 +++--- .../container-build/cerc-lighthouse/build.sh | 2 +- 14 files changed, 50 insertions(+), 89 deletions(-) diff --git a/stack_orchestrator/data/compose/docker-compose-fixturenet-plugeth.yml b/stack_orchestrator/data/compose/docker-compose-fixturenet-plugeth.yml index 9cfe551d..8606bae5 100644 --- a/stack_orchestrator/data/compose/docker-compose-fixturenet-plugeth.yml +++ b/stack_orchestrator/data/compose/docker-compose-fixturenet-plugeth.yml @@ -6,6 +6,7 @@ services: - ../config/fixturenet-eth/fixturenet-eth.env environment: RUN_BOOTNODE: "true" + CERC_SCRIPT_DEBUG: ${CERC_SCRIPT_DEBUG} image: cerc/fixturenet-plugeth-plugeth:local volumes: - fixturenet_plugeth_bootnode_geth_data:/root/ethdata diff --git a/stack_orchestrator/data/config/fixturenet-eth/fixturenet-eth.env b/stack_orchestrator/data/config/fixturenet-eth/fixturenet-eth.env index 2bf489ae..695c8fac 100644 --- a/stack_orchestrator/data/config/fixturenet-eth/fixturenet-eth.env +++ b/stack_orchestrator/data/config/fixturenet-eth/fixturenet-eth.env @@ -22,4 +22,7 @@ CERC_STATEDIFF_DB_LOG_STATEMENTS="${CERC_STATEDIFF_DB_LOG_STATEMENTS:-false}" CERC_STATEDIFF_WORKERS=2 CERC_GETH_VMODULE="statediff/*=5,rpc/*=5" -CERC_GETH_VERBOSITY=${CERC_GETH_VERBOSITY:-3} \ No newline at end of file +CERC_GETH_VERBOSITY=${CERC_GETH_VERBOSITY:-3} + +# Used by Lighthouse +SECONDS_PER_ETH1_BLOCK=${SECONDS_PER_ETH1_BLOCK:-3} diff --git a/stack_orchestrator/data/container-build/cerc-fixturenet-eth-genesis/Dockerfile b/stack_orchestrator/data/container-build/cerc-fixturenet-eth-genesis/Dockerfile index 4fa8d0fd..870e8c94 100644 --- a/stack_orchestrator/data/container-build/cerc-fixturenet-eth-genesis/Dockerfile +++ b/stack_orchestrator/data/container-build/cerc-fixturenet-eth-genesis/Dockerfile @@ -1,26 +1,23 @@ -FROM skylenet/ethereum-genesis-generator@sha256:210353ce7c898686bc5092f16c61220a76d357f51eff9c451e9ad1b9ad03d4d3 AS ethgen +FROM ethpandaops/ethereum-genesis-generator:3.0.0 AS ethgen FROM golang:1.20-alpine as builder -RUN apk add --no-cache python3 py3-pip - -COPY genesis /opt/genesis +RUN apk add --no-cache python3 py3-pip make bash envsubst jq # Install ethereum-genesis-generator tools -COPY --from=ethgen /usr/local/bin/eth2-testnet-genesis /usr/local/bin/ -COPY --from=ethgen /usr/local/bin/eth2-val-tools /usr/local/bin/ COPY --from=ethgen /apps /apps RUN cd /apps/el-gen && pip3 install --break-system-packages -r requirements.txt -# web3==5.24.0 used by el-gen is broken on python 3.11 -RUN pip3 install --break-system-packages --upgrade "web3==6.5.0" +RUN pip3 install --break-system-packages --upgrade "web3==v6.15.1" RUN pip3 install --break-system-packages --upgrade "typing-extensions" +# Install tool to generate initial block +RUN go install github.com/cerc-io/eth-dump-genblock@b29516740fc01cf1d1d623acbfd0e9a2b6440a96 + # Build genesis config -RUN apk add --no-cache make bash envsubst jq +COPY genesis /opt/genesis RUN cd /opt/genesis && make genesis-el # Snag the genesis block info. -RUN go install github.com/cerc-io/eth-dump-genblock@latest RUN eth-dump-genblock /opt/genesis/build/el/geth.json > /opt/genesis/build/el/genesis_block.json FROM alpine:latest diff --git a/stack_orchestrator/data/container-build/cerc-fixturenet-eth-genesis/genesis/el/build_el.sh b/stack_orchestrator/data/container-build/cerc-fixturenet-eth-genesis/genesis/el/build_el.sh index 9ff77fab..d7a0ae13 100755 --- a/stack_orchestrator/data/container-build/cerc-fixturenet-eth-genesis/genesis/el/build_el.sh +++ b/stack_orchestrator/data/container-build/cerc-fixturenet-eth-genesis/genesis/el/build_el.sh @@ -9,32 +9,8 @@ mkdir -p ../build/el tmp_dir=$(mktemp -d -t ci-XXXXXXXXXX) envsubst < el-config.yaml > $tmp_dir/genesis-config.yaml -ttd=`cat $tmp_dir/genesis-config.yaml | grep terminal_total_difficulty | awk '{ print $2 }'` -homestead_block=`cat $tmp_dir/genesis-config.yaml | grep homestead_block | awk '{ print $2 }'` -eip150_block=`cat $tmp_dir/genesis-config.yaml | grep eip150_block | awk '{ print $2 }'` -eip155_block=`cat $tmp_dir/genesis-config.yaml | grep eip155_block | awk '{ print $2 }'` -eip158_block=`cat $tmp_dir/genesis-config.yaml | grep eip158_block | awk '{ print $2 }'` -byzantium_block=`cat $tmp_dir/genesis-config.yaml | grep byzantium_block | awk '{ print $2 }'` -constantinople_block=`cat $tmp_dir/genesis-config.yaml | grep constantinople_block | awk '{ print $2 }'` -petersburg_block=`cat $tmp_dir/genesis-config.yaml | grep petersburg_block | awk '{ print $2 }'` -istanbul_block=`cat $tmp_dir/genesis-config.yaml | grep istanbul_block | awk '{ print $2 }'` -berlin_block=`cat $tmp_dir/genesis-config.yaml | grep berlin_block | awk '{ print $2 }'` -london_block=`cat $tmp_dir/genesis-config.yaml | grep london_block | awk '{ print $2 }'` -merge_fork_block=`cat $tmp_dir/genesis-config.yaml | grep merge_fork_block | awk '{ print $2 }'` - python3 /apps/el-gen/genesis_geth.py $tmp_dir/genesis-config.yaml | \ - jq ".config.terminalTotalDifficulty=$ttd" | \ - jq ".config.homesteadBlock=$homestead_block" | \ - jq ".config.eip150Block=$eip150_block" | \ - jq ".config.eip155Block=$eip155_block" | \ - jq ".config.eip158Block=$eip158_block" | \ - jq ".config.byzantiumBlock=$byzantium_block" | \ - jq ".config.constantinopleBlock=$constantinople_block" | \ - jq ".config.petersburgBlock=$petersburg_block" | \ - jq ".config.istanbulBlock=$istanbul_block" | \ - jq ".config.berlinBlock=$berlin_block" | \ - jq ".config.londonBlock=$london_block" | \ - jq ".config.mergeForkBlock=$merge_fork_block" | \ - jq ".config.mergeNetsplitBlock=$merge_fork_block" \ + jq 'del(.config.pragueTime)' \ > ../build/el/geth.json + python3 ../accounts/mnemonic_to_csv.py $tmp_dir/genesis-config.yaml > ../build/el/accounts.csv diff --git a/stack_orchestrator/data/container-build/cerc-fixturenet-eth-genesis/genesis/el/el-config.yaml b/stack_orchestrator/data/container-build/cerc-fixturenet-eth-genesis/genesis/el/el-config.yaml index 8bcb0fac..a3bfb110 100644 --- a/stack_orchestrator/data/container-build/cerc-fixturenet-eth-genesis/genesis/el/el-config.yaml +++ b/stack_orchestrator/data/container-build/cerc-fixturenet-eth-genesis/genesis/el/el-config.yaml @@ -10,22 +10,8 @@ el_premine_addrs: {} chain_id: 1212 deposit_contract_address: "0x1212121212121212121212121212121212121212" genesis_timestamp: 0 -terminal_total_difficulty: 1000 -homestead_block: 1 -eip150_block: 1 -eip155_block: 1 -eip158_block: 1 -byzantium_block: 1 -constantinople_block: 1 -petersburg_block: 1 -istanbul_block: 1 -berlin_block: 1 -london_block: 1 -merge_fork_block: 1 - -clique: - enabled: false - signers: - - 36d56343bc308d4ffaac2f793d121aba905fa6cc - - 5e762d4a3847cadaf40a4b0c39574b0ff6698c78 - - 15d7acc1019fdf8ab4f0f7bd31ec1487ecb5a2bd +genesis_delay: 0 +deneb_fork_epoch: 0 +# note: only needed as workaround https://github.com/ethpandaops/ethereum-genesis-generator/pull/105 +electra_fork_epoch: 0 +slot_duration_in_seconds: 3 diff --git a/stack_orchestrator/data/container-build/cerc-fixturenet-eth-geth/run-el.sh b/stack_orchestrator/data/container-build/cerc-fixturenet-eth-geth/run-el.sh index d7cc3a83..f84befd7 100755 --- a/stack_orchestrator/data/container-build/cerc-fixturenet-eth-geth/run-el.sh +++ b/stack_orchestrator/data/container-build/cerc-fixturenet-eth-geth/run-el.sh @@ -6,7 +6,7 @@ fi ETHERBASE=`cat /opt/testnet/build/el/accounts.csv | head -1 | cut -d',' -f2` NETWORK_ID=`cat /opt/testnet/el/el-config.yaml | grep 'chain_id' | awk '{ print $2 }'` -NETRESTRICT=`ip addr | grep inet | grep -v '127.0' | awk '{print $2}'` +NETRESTRICT=`ip addr | grep -w inet | grep -v '127.0' | awk '{print $2}'` CERC_ETH_DATADIR="${CERC_ETH_DATADIR:-$HOME/ethdata}" CERC_PLUGINS_DIR="${CERC_PLUGINS_DIR:-/usr/local/lib/plugeth}" @@ -102,6 +102,13 @@ else fi fi + OTHER_OPTS="" + # miner options were removed in v1.12 + GETH_VERSION=$(geth --version | grep -io '[0-9][0-9a-z.-]*') + if echo -e "$GETH_VERSION\n1.12" | sort -Vc; then + OTHER_OPTS="--miner.threads=1" + fi + $START_CMD \ --datadir="${CERC_ETH_DATADIR}" \ --bootnodes="${ENODE}" \ @@ -126,12 +133,12 @@ else --cache.preimages \ --syncmode=full \ --mine \ - --miner.threads=1 \ --metrics \ --metrics.addr="0.0.0.0" \ --verbosity=${CERC_GETH_VERBOSITY:-3} \ --log.vmodule="${CERC_GETH_VMODULE:-statediff/*=5}" \ --miner.etherbase="${ETHERBASE}" \ + ${OTHER_OPTS} \ ${STATEDIFF_OPTS} \ & diff --git a/stack_orchestrator/data/container-build/cerc-fixturenet-eth-lighthouse/Dockerfile b/stack_orchestrator/data/container-build/cerc-fixturenet-eth-lighthouse/Dockerfile index eb791c68..21712bcd 100644 --- a/stack_orchestrator/data/container-build/cerc-fixturenet-eth-lighthouse/Dockerfile +++ b/stack_orchestrator/data/container-build/cerc-fixturenet-eth-lighthouse/Dockerfile @@ -1,5 +1,4 @@ FROM cerc/lighthouse-cli:local AS lcli -FROM skylenet/ethereum-genesis-generator@sha256:210353ce7c898686bc5092f16c61220a76d357f51eff9c451e9ad1b9ad03d4d3 AS ethgen FROM cerc/fixturenet-eth-genesis:local AS fnetgen FROM cerc/lighthouse:local @@ -12,16 +11,13 @@ RUN apt-get update && apt-get -y upgrade && apt-get install -y --no-install-reco && apt-get clean \ && rm -rf /var/lib/apt/lists/* -COPY genesis /opt/testnet -COPY run-cl.sh /opt/testnet/run.sh - COPY --from=lcli /usr/local/bin/lcli /usr/local/bin/lcli -COPY --from=ethgen /usr/local/bin/eth2-testnet-genesis /usr/local/bin/eth2-testnet-genesis -COPY --from=ethgen /usr/local/bin/eth2-val-tools /usr/local/bin/eth2-val-tools -COPY --from=ethgen /apps /apps COPY --from=fnetgen /opt/genesis/el /opt/testnet/el COPY --from=fnetgen /opt/genesis/build/el /opt/testnet/build/el +COPY genesis /opt/testnet +COPY run-cl.sh /opt/testnet/run.sh + RUN cd /opt/testnet && make genesis-cl # Work around some bugs in lcli where the default path is always used. diff --git a/stack_orchestrator/data/container-build/cerc-fixturenet-eth-lighthouse/genesis/cl/beacon_node.sh b/stack_orchestrator/data/container-build/cerc-fixturenet-eth-lighthouse/genesis/cl/beacon_node.sh index 1f906155..7e92f49b 100755 --- a/stack_orchestrator/data/container-build/cerc-fixturenet-eth-lighthouse/genesis/cl/beacon_node.sh +++ b/stack_orchestrator/data/container-build/cerc-fixturenet-eth-lighthouse/genesis/cl/beacon_node.sh @@ -10,7 +10,6 @@ set -Eeuo pipefail source ./vars.env SUBSCRIBE_ALL_SUBNETS= -DEBUG_LEVEL=${DEBUG_LEVEL:-debug} # Get positional arguments data_dir=$DATADIR/node_${NODE_NUMBER} diff --git a/stack_orchestrator/data/container-build/cerc-fixturenet-eth-lighthouse/genesis/cl/bootnode.sh b/stack_orchestrator/data/container-build/cerc-fixturenet-eth-lighthouse/genesis/cl/bootnode.sh index bda3b788..15aee6e1 100755 --- a/stack_orchestrator/data/container-build/cerc-fixturenet-eth-lighthouse/genesis/cl/bootnode.sh +++ b/stack_orchestrator/data/container-build/cerc-fixturenet-eth-lighthouse/genesis/cl/bootnode.sh @@ -9,8 +9,6 @@ set -Eeuo pipefail source ./vars.env -DEBUG_LEVEL=${1:-info} - echo "Starting bootnode" # Clean up existing ENR dir to avoid node connectivity issues on a restart diff --git a/stack_orchestrator/data/container-build/cerc-fixturenet-eth-lighthouse/genesis/cl/build_cl.sh b/stack_orchestrator/data/container-build/cerc-fixturenet-eth-lighthouse/genesis/cl/build_cl.sh index 50b3e4e6..5157b388 100755 --- a/stack_orchestrator/data/container-build/cerc-fixturenet-eth-lighthouse/genesis/cl/build_cl.sh +++ b/stack_orchestrator/data/container-build/cerc-fixturenet-eth-lighthouse/genesis/cl/build_cl.sh @@ -1,5 +1,6 @@ #!/usr/bin/env bash +# See https://github.com/sigp/lighthouse/scripts/local_testnet/setup.sh # # Deploys the deposit contract and makes deposits for $VALIDATOR_COUNT insecure deterministic validators. # Produces a testnet specification and a genesis state where the genesis time @@ -24,23 +25,26 @@ echo "(Note: errors of the form 'WARN: Scrypt parameters are too weak...' below lcli \ new-testnet \ --spec $SPEC_PRESET \ - --deposit-contract-address $ETH1_DEPOSIT_CONTRACT_ADDRESS \ --testnet-dir $TESTNET_DIR \ + --deposit-contract-address $ETH1_DEPOSIT_CONTRACT_ADDRESS \ --min-genesis-active-validator-count $GENESIS_VALIDATOR_COUNT \ --validator-count $VALIDATOR_COUNT \ --min-genesis-time $GENESIS_TIME \ --genesis-delay $GENESIS_DELAY \ --genesis-fork-version $GENESIS_FORK_VERSION \ --altair-fork-epoch $ALTAIR_FORK_EPOCH \ - --bellatrix-fork-epoch $MERGE_FORK_EPOCH \ + --bellatrix-fork-epoch $BELLATRIX_FORK_EPOCH \ + --capella-fork-epoch $CAPELLA_FORK_EPOCH \ + --deneb-fork-epoch $DENEB_FORK_EPOCH \ --eth1-id $ETH1_CHAIN_ID \ --eth1-block-hash $ETH1_BLOCK_HASH \ --eth1-follow-distance 1 \ --seconds-per-slot $SECONDS_PER_SLOT \ --seconds-per-eth1-block $SECONDS_PER_ETH1_BLOCK \ + --interop-genesis-state \ --force -echo Specification generated at $TESTNET_DIR. +echo Specification and genesis.ssz generated at $TESTNET_DIR. echo "Generating $VALIDATOR_COUNT validators concurrently... (this may take a while)" lcli \ @@ -50,13 +54,3 @@ lcli \ --node-count $BN_COUNT echo Validators generated with keystore passwords at $DATADIR. -echo "Building genesis state... (this might take a while)" - -lcli \ - interop-genesis \ - --spec $SPEC_PRESET \ - --genesis-time $GENESIS_TIME \ - --testnet-dir $TESTNET_DIR \ - $GENESIS_VALIDATOR_COUNT - -echo Created genesis state in $TESTNET_DIR diff --git a/stack_orchestrator/data/container-build/cerc-fixturenet-eth-lighthouse/genesis/cl/validator_client.sh b/stack_orchestrator/data/container-build/cerc-fixturenet-eth-lighthouse/genesis/cl/validator_client.sh index 30168f80..2c65e74b 100755 --- a/stack_orchestrator/data/container-build/cerc-fixturenet-eth-lighthouse/genesis/cl/validator_client.sh +++ b/stack_orchestrator/data/container-build/cerc-fixturenet-eth-lighthouse/genesis/cl/validator_client.sh @@ -8,8 +8,6 @@ set -Eeuo pipefail source ./vars.env -DEBUG_LEVEL=info - BUILDER_PROPOSALS= # Get options diff --git a/stack_orchestrator/data/container-build/cerc-fixturenet-eth-lighthouse/genesis/cl/vars.env b/stack_orchestrator/data/container-build/cerc-fixturenet-eth-lighthouse/genesis/cl/vars.env index 081f8f78..83780b20 100644 --- a/stack_orchestrator/data/container-build/cerc-fixturenet-eth-lighthouse/genesis/cl/vars.env +++ b/stack_orchestrator/data/container-build/cerc-fixturenet-eth-lighthouse/genesis/cl/vars.env @@ -25,7 +25,9 @@ BOOTNODE_PORT=${BOOTNODE_PORT:-4242} # Hard fork configuration ALTAIR_FORK_EPOCH=${ALTAIR_FORK_EPOCH:-0} -MERGE_FORK_EPOCH=${MERGE_FORK_EPOCH:-0} +BELLATRIX_FORK_EPOCH=${BELLATRIX_FORK_EPOCH:-0} +CAPELLA_FORK_EPOCH=${CAPELLA_FORK_EPOCH:-0} +DENEB_FORK_EPOCH=${DENEB_FORK_EPOCH:-0} # Spec version (mainnet or minimal) SPEC_PRESET=${SPEC_PRESET:-mainnet} @@ -51,3 +53,6 @@ ETH1_TTD=${ETH1_TTD:-`cat $ETH1_GENESIS_JSON | jq -r '.config.terminalTotalDiffi ETH1_DEPOSIT_CONTRACT_ADDRESS=${ETH1_DEPOSIT_CONTRACT_ADDRESS:-`cat $ETH1_CONFIG_YAML | grep 'deposit_contract_address' | awk '{ print $2 }' | sed 's/"//g'`} ETH1_DEPOSIT_CONTRACT_BLOCK=${ETH1_DEPOSIT_CONTRACT_BLOCK:-0x0} SUGGESTED_FEE_RECIPIENT=`cat ../build/el/accounts.csv | head -1 | cut -d',' -f2` + +# --debug-level +DEBUG_LEVEL=${LIGHTHOUSE_DEBUG_LEVEL:-debug} diff --git a/stack_orchestrator/data/container-build/cerc-lighthouse/Dockerfile b/stack_orchestrator/data/container-build/cerc-lighthouse/Dockerfile index a5559f68..de321500 100644 --- a/stack_orchestrator/data/container-build/cerc-lighthouse/Dockerfile +++ b/stack_orchestrator/data/container-build/cerc-lighthouse/Dockerfile @@ -1,9 +1,10 @@ -ARG TAG_SUFFIX="-modern" -FROM sigp/lighthouse:v4.3.0${TAG_SUFFIX} +FROM sigp/lighthouse:v5.1.2 -RUN apt-get update; apt-get install bash netcat curl less jq wget -y; +RUN apt-get update && apt-get -y upgrade \ + && apt-get -y install bash netcat curl less jq wget \ + && apt-get clean && rm -rf /var/lib/apt/lists/* -WORKDIR /root/ +WORKDIR /root ADD start-lighthouse.sh . ENTRYPOINT [ "./start-lighthouse.sh" ] diff --git a/stack_orchestrator/data/container-build/cerc-lighthouse/build.sh b/stack_orchestrator/data/container-build/cerc-lighthouse/build.sh index cdc95612..2e9cfe3c 100755 --- a/stack_orchestrator/data/container-build/cerc-lighthouse/build.sh +++ b/stack_orchestrator/data/container-build/cerc-lighthouse/build.sh @@ -6,4 +6,4 @@ source ${CERC_CONTAINER_BASE_DIR}/build-base.sh # See: https://stackoverflow.com/a/246128/1701505 SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) -docker build -t cerc/lighthouse:local ${build_command_args} --build-arg TAG_SUFFIX="" ${SCRIPT_DIR} +docker build -t cerc/lighthouse:local ${build_command_args} ${SCRIPT_DIR}