Skip to content

Commit 181f5f9

Browse files
authored
use Deneb genesis for local testnet; add Electra forking support to local tesnet (#6634)
* use Deneb genesis for local testnet; add Electra forking support to local tesnet * deneb -> electra in ncli_testnet help
1 parent 9ba31fb commit 181f5f9

7 files changed

+60
-60
lines changed

Makefile

+2-4
Original file line numberDiff line numberDiff line change
@@ -237,8 +237,7 @@ local-testnet-minimal:
237237
--signer-nodes 1 \
238238
--remote-validators-count 512 \
239239
--signer-type $(SIGNER_TYPE) \
240-
--capella-fork-epoch 0 \
241-
--deneb-fork-epoch 2 \
240+
--deneb-fork-epoch 0 \
242241
--stop-at-epoch 6 \
243242
--disable-htop \
244243
--enable-payload-builder \
@@ -267,8 +266,7 @@ local-testnet-mainnet:
267266
./scripts/launch_local_testnet.sh \
268267
--data-dir $@ \
269268
--nodes 2 \
270-
--capella-fork-epoch 0 \
271-
--deneb-fork-epoch 2 \
269+
--deneb-fork-epoch 0 \
272270
--stop-at-epoch 6 \
273271
--disable-htop \
274272
--enable-logtrace \

beacon_chain/spec/forks.nim

+2-1
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,8 @@ type
8383
ForkyExecutionPayloadHeader* =
8484
bellatrix.ExecutionPayloadHeader |
8585
capella.ExecutionPayloadHeader |
86-
deneb.ExecutionPayloadHeader
86+
deneb.ExecutionPayloadHeader |
87+
electra.ExecutionPayloadHeader
8788

8889
ForkyBeaconBlockBody* =
8990
phase0.BeaconBlockBody |

ncli/ncli_testnet.nim

+27-1
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,11 @@ type
158158
desc: "The epoch of the Deneb hard-fork"
159159
name: "deneb-fork-epoch" .}: Epoch
160160

161+
electraForkEpoch* {.
162+
defaultValue: FAR_FUTURE_EPOCH
163+
desc: "The epoch of the Electra hard-fork"
164+
name: "electra-fork-epoch" .}: Epoch
165+
161166
outputGenesis* {.
162167
desc: "Output file where to write the initial state snapshot"
163168
name: "output-genesis" .}: OutFile
@@ -342,6 +347,25 @@ func `as`(blk: BlockObject, T: type deneb.ExecutionPayloadHeader): T =
342347
blob_gas_used: uint64 blk.blobGasUsed.getOrDefault(),
343348
excess_blob_gas: uint64 blk.excessBlobGas.getOrDefault())
344349

350+
func `as`(blk: BlockObject, T: type electra.ExecutionPayloadHeader): T =
351+
T(parent_hash: blk.parentHash as Eth2Digest,
352+
fee_recipient: blk.miner as ExecutionAddress,
353+
state_root: blk.stateRoot as Eth2Digest,
354+
receipts_root: blk.receiptsRoot as Eth2Digest,
355+
logs_bloom: BloomLogs(data: distinctBase(blk.logsBloom)),
356+
prev_randao: Eth2Digest(data: blk.difficulty.toByteArrayBE),
357+
block_number: uint64 blk.number,
358+
gas_limit: uint64 blk.gasLimit,
359+
gas_used: uint64 blk.gasUsed,
360+
timestamp: uint64 blk.timestamp,
361+
extra_data: List[byte, MAX_EXTRA_DATA_BYTES].init(blk.extraData.bytes),
362+
base_fee_per_gas: blk.baseFeePerGas.getOrDefault(),
363+
block_hash: blk.hash as Eth2Digest,
364+
transactions_root: blk.transactionsRoot as Eth2Digest,
365+
withdrawals_root: blk.withdrawalsRoot.getOrDefault() as Eth2Digest,
366+
blob_gas_used: uint64 blk.blobGasUsed.getOrDefault(),
367+
excess_blob_gas: uint64 blk.excessBlobGas.getOrDefault())
368+
345369
func createDepositContractSnapshot(
346370
deposits: seq[DepositData],
347371
blockHash: Eth2Digest,
@@ -464,7 +488,9 @@ proc doCreateTestnet*(config: CliConfig,
464488
initialState[].genesis_validators_root
465489

466490
let genesisValidatorsRoot =
467-
if config.denebForkEpoch == 0:
491+
if config.electraForkEpoch == 0:
492+
createAndSaveState(genesisBlock as electra.ExecutionPayloadHeader)
493+
elif config.denebForkEpoch == 0:
468494
createAndSaveState(genesisBlock as deneb.ExecutionPayloadHeader)
469495
elif config.capellaForkEpoch == 0:
470496
createAndSaveState(genesisBlock as capella.ExecutionPayloadHeader)

scripts/execution_genesis.json.template

+1
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
"londonBlock":0,
1515
"shanghaiTime":SHANGHAI_FORK_TIME,
1616
"cancunTime":CANCUN_FORK_TIME,
17+
"pragueTime":PRAGUE_FORK_TIME,
1718
"mergeForkBlock":0,
1819
"mergeNetsplitBlock":0,
1920
"terminalTotalDifficulty":0,

scripts/launch_local_testnet.sh

+22-23
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ CURL_BINARY="$(command -v curl)" || { echo "Curl not installed. Aborting."; exit
5252
JQ_BINARY="$(command -v jq)" || { echo "jq not installed. Aborting."; exit 1; }
5353

5454
OPTS="ht:n:d:g"
55-
LONGOPTS="help,preset:,nodes:,data-dir:,remote-validators-count:,threshold:,signer-nodes:,signer-type:,with-ganache,stop-at-epoch:,disable-htop,use-vc:,disable-vc,enable-payload-builder,enable-logtrace,log-level:,base-port:,base-rest-port:,base-metrics-port:,base-vc-metrics-port:,base-vc-keymanager-port:,base-remote-signer-port:,base-remote-signer-metrics-port:,base-el-net-port:,base-el-rpc-port:,base-el-ws-port:,base-el-auth-rpc-port:,el-port-offset:,reuse-existing-data-dir,reuse-binaries,timeout:,kill-old-processes,eth2-docker-image:,lighthouse-vc-nodes:,run-geth,dl-geth,dl-nimbus-eth1,dl-nimbus-eth2,light-clients:,run-nimbus-eth1,verbose,altair-fork-epoch:,bellatrix-fork-epoch:,capella-fork-epoch:,deneb-fork-epoch:"
55+
LONGOPTS="help,preset:,nodes:,data-dir:,remote-validators-count:,threshold:,signer-nodes:,signer-type:,with-ganache,stop-at-epoch:,disable-htop,use-vc:,disable-vc,enable-payload-builder,enable-logtrace,log-level:,base-port:,base-rest-port:,base-metrics-port:,base-vc-metrics-port:,base-vc-keymanager-port:,base-remote-signer-port:,base-remote-signer-metrics-port:,base-el-net-port:,base-el-rpc-port:,base-el-ws-port:,base-el-auth-rpc-port:,el-port-offset:,reuse-existing-data-dir,reuse-binaries,timeout:,kill-old-processes,eth2-docker-image:,lighthouse-vc-nodes:,run-geth,dl-geth,dl-nimbus-eth1,dl-nimbus-eth2,light-clients:,run-nimbus-eth1,verbose,deneb-fork-epoch:,electra-fork-epoch:"
5656

5757
# default values
5858
BINARIES=""
@@ -103,8 +103,8 @@ DL_GETH="0"
103103
: ${NIMBUS_ETH2_REVISION:=6c0d756d}
104104

105105
: ${BEACON_NODE_COMMAND:="./build/nimbus_beacon_node$EXE_EXTENSION"}
106-
: ${CAPELLA_FORK_EPOCH:=0}
107-
: ${DENEB_FORK_EPOCH:=50}
106+
: ${DENEB_FORK_EPOCH:=0}
107+
: ${ELECTRA_FORK_EPOCH:=5000}
108108

109109
#NIMBUS EL VARS
110110
RUN_NIMBUS_ETH1="0"
@@ -212,10 +212,6 @@ while true; do
212212
CONST_PRESET="$2"
213213
shift 2
214214
;;
215-
--capella-fork-epoch)
216-
CAPELLA_FORK_EPOCH="$2"
217-
shift 2
218-
;;
219215
--deneb-fork-epoch)
220216
DENEB_FORK_EPOCH="$2"
221217
shift 2
@@ -826,8 +822,9 @@ fi
826822
GENESIS_OFFSET=60 # See `Scheduling first slot action` > `startTime`
827823
NOW_UNIX_TIMESTAMP=$(date +%s)
828824
GENESIS_TIME=$((NOW_UNIX_TIMESTAMP + GENESIS_OFFSET))
829-
SHANGHAI_FORK_TIME=$((GENESIS_TIME + SECONDS_PER_SLOT * SLOTS_PER_EPOCH * CAPELLA_FORK_EPOCH))
825+
SHANGHAI_FORK_TIME=${GENESIS_TIME}
830826
CANCUN_FORK_TIME=$((GENESIS_TIME + SECONDS_PER_SLOT * SLOTS_PER_EPOCH * DENEB_FORK_EPOCH))
827+
PRAGUE_FORK_TIME=$((GENESIS_TIME + SECONDS_PER_SLOT * SLOTS_PER_EPOCH * ELECTRA_FORK_EPOCH))
831828

832829
EXECUTION_GENESIS_JSON="${DATA_DIR}/execution_genesis.json"
833830
EXECUTION_GENESIS_BLOCK_JSON="${DATA_DIR}/execution_genesis_block.json"
@@ -836,7 +833,7 @@ EXECUTION_GENESIS_BLOCK_JSON="${DATA_DIR}/execution_genesis_block.json"
836833
# currently hard-codes some merkle branches that won't match the random deposits generated
837834
# by this simulation. This doesn't happen to produce problems only by accident. If we enable
838835
# the `deposit_root` safety-checks in the deposit downloader, it will detect the discrepancy.
839-
sed "s/SHANGHAI_FORK_TIME/${SHANGHAI_FORK_TIME}/g; s/CANCUN_FORK_TIME/${CANCUN_FORK_TIME}/g" \
836+
sed "s/SHANGHAI_FORK_TIME/${SHANGHAI_FORK_TIME}/g; s/CANCUN_FORK_TIME/${CANCUN_FORK_TIME}/g; s/PRAGUE_FORK_TIME/${PRAGUE_FORK_TIME}/g" \
840837
"${SCRIPTS_DIR}/execution_genesis.json.template" > "$EXECUTION_GENESIS_JSON"
841838

842839
DEPOSIT_CONTRACT_ADDRESS="0x4242424242424242424242424242424242424242"
@@ -904,8 +901,9 @@ done
904901
--netkey-file=$CONTAINER_BOOTSTRAP_NETWORK_KEYFILE \
905902
--insecure-netkey-password=true \
906903
--genesis-time=$GENESIS_TIME \
907-
--capella-fork-epoch=$CAPELLA_FORK_EPOCH \
904+
--capella-fork-epoch=0 \
908905
--deneb-fork-epoch=$DENEB_FORK_EPOCH \
906+
--electra-fork-epoch=$ELECTRA_FORK_EPOCH \
909907
--execution-genesis-block="$EXECUTION_GENESIS_BLOCK_JSON"
910908

911909
DIRECTPEER_ENR=$(
@@ -919,8 +917,8 @@ DIRECTPEER_ENR=$(
919917
)
920918

921919
./scripts/make_prometheus_config.sh \
922-
--nodes ${NUM_NODES} \
923-
--base-metrics-port ${BASE_METRICS_PORT} \
920+
--nodes "${NUM_NODES}" \
921+
--base-metrics-port "${BASE_METRICS_PORT}" \
924922
--config-file "${DATA_DIR}/prometheus.yml" || true # TODO: this currently fails on macOS,
925923
# but it can be considered non-critical
926924

@@ -936,8 +934,9 @@ DEPOSIT_CONTRACT_ADDRESS: ${DEPOSIT_CONTRACT_ADDRESS}
936934
ETH1_FOLLOW_DISTANCE: 1
937935
ALTAIR_FORK_EPOCH: 0
938936
BELLATRIX_FORK_EPOCH: 0
939-
CAPELLA_FORK_EPOCH: ${CAPELLA_FORK_EPOCH}
937+
CAPELLA_FORK_EPOCH: 0
940938
DENEB_FORK_EPOCH: ${DENEB_FORK_EPOCH}
939+
ELECTRA_FORK_EPOCH: ${ELECTRA_FORK_EPOCH}
941940
TERMINAL_TOTAL_DIFFICULTY: 0
942941
EOF
943942

@@ -1046,7 +1045,7 @@ for NUM_NODE in $(seq 1 $NUM_NODES); do
10461045
fi
10471046
done
10481047

1049-
for NUM_LC in $(seq 1 $LC_NODES); do
1048+
for NUM_LC in $(seq 1 "${LC_NODES}"); do
10501049
LC_DATA_DIR="${DATA_DIR}/lc${NUM_LC}"
10511050
rm -rf "${LC_DATA_DIR}"
10521051
scripts/makedir.sh "${LC_DATA_DIR}" 2>&1
@@ -1085,7 +1084,7 @@ fi
10851084
# give each node time to load keys
10861085
sleep 10
10871086

1088-
for NUM_NODE in $(seq 1 $NUM_NODES); do
1087+
for NUM_NODE in $(seq 1 "${NUM_NODES}"); do
10891088
NODE_DATA_DIR="${DATA_DIR}/node${NUM_NODE}"
10901089
CONTAINER_NODE_DATA_DIR="${CONTAINER_DATA_DIR}/node${NUM_NODE}"
10911090
VALIDATOR_DATA_DIR="${DATA_DIR}/validator${NUM_NODE}"
@@ -1137,7 +1136,7 @@ for NUM_NODE in $(seq 1 $NUM_NODES); do
11371136
--max-peers=$(( NUM_NODES + LC_NODES - 1 )) \
11381137
--data-dir="${CONTAINER_NODE_DATA_DIR}" \
11391138
${BOOTSTRAP_ARG} \
1140-
--jwt-secret=${JWT_FILE} \
1139+
--jwt-secret="${JWT_FILE}" \
11411140
"${WEB3_ARG[@]}" \
11421141
--payload-builder=${USE_PAYLOAD_BUILDER} \
11431142
--payload-builder-url="http://${PAYLOAD_BUILDER_HOST}:${PAYLOAD_BUILDER_PORT}" \
@@ -1241,7 +1240,7 @@ if [ "$LC_NODES" -ge "1" ]; then
12411240
LC_TRUSTED_BLOCK_ROOT="$(
12421241
"${CURL_BINARY}" -s "http://localhost:${BASE_REST_PORT}/eth/v1/beacon/headers/finalized" | \
12431242
"${JQ_BINARY}" -r '.data.root')"
1244-
for NUM_LC in $(seq 1 $LC_NODES); do
1243+
for NUM_LC in $(seq 1 "${LC_NODES}"); do
12451244
LC_DATA_DIR="${DATA_DIR}/lc${NUM_LC}"
12461245

12471246
WEB3_ARG=()
@@ -1297,18 +1296,18 @@ if [[ "$USE_HTOP" == "1" ]]; then
12971296
else
12981297
FAILED=0
12991298
for PID in $(echo "$PIDS_TO_WAIT" | tr ',' ' '); do
1300-
wait "$PID" || FAILED="$(( FAILED += 1 ))"
1301-
echo $PID has completed
1299+
wait "${PID}" || FAILED="$(( FAILED += 1 ))"
1300+
echo "${PID}" has completed
13021301
done
13031302
if [[ "$FAILED" != "0" ]]; then
13041303
echo "${FAILED} child processes had non-zero exit codes (or exited early)."
13051304
dump_logs
13061305
dump_logtrace
13071306
if [[ "${TIMEOUT_DURATION}" != "0" ]]; then
13081307
if uname | grep -qiE "mingw|msys"; then
1309-
taskkill //F //PID ${WATCHER_PID}
1308+
taskkill //F //PID "${WATCHER_PID}"
13101309
else
1311-
pkill -HUP -P ${WATCHER_PID}
1310+
pkill -HUP -P "${WATCHER_PID}"
13121311
fi
13131312
fi
13141313
exit 1
@@ -1319,9 +1318,9 @@ dump_logtrace
13191318

13201319
if [[ "${TIMEOUT_DURATION}" != "0" ]]; then
13211320
if uname | grep -qiE "mingw|msys"; then
1322-
taskkill //F //PID ${WATCHER_PID}
1321+
taskkill //F //PID "${WATCHER_PID}"
13231322
else
1324-
pkill -HUP -P ${WATCHER_PID}
1323+
pkill -HUP -P "${WATCHER_PID}"
13251324
fi
13261325
fi
13271326

scripts/mainnet-non-overriden-config.yaml

+3-17
Original file line numberDiff line numberDiff line change
@@ -57,17 +57,9 @@ CAPELLA_FORK_VERSION: 0x03000000
5757
# Deneb
5858
DENEB_FORK_VERSION: 0x04000000
5959
# (overriden in launch_local_testnet.sh) DENEB_FORK_EPOCH: 18446744073709551615
60-
61-
# EIP6110
62-
EIP6110_FORK_VERSION: 0x05000000 # temporary stub
63-
EIP6110_FORK_EPOCH: 18446744073709551615
64-
# EIP7002
65-
EIP7002_FORK_VERSION: 0x05000000 # temporary stub
66-
EIP7002_FORK_EPOCH: 18446744073709551615
67-
# WHISK
68-
WHISK_FORK_VERSION: 0x06000000 # temporary stub
69-
WHISK_FORK_EPOCH: 18446744073709551615
70-
60+
# Electra
61+
ELECTRA_FORK_VERSION: 0x05000000
62+
# (overriden in launch_local_testnet.sh) ELECTRA_FORK_EPOCH: 18446744073709551615
7163

7264
# Time parameters
7365
# ---------------------------------------------------------------
@@ -156,9 +148,3 @@ MAX_REQUEST_BLOB_SIDECARS: 768
156148
MIN_EPOCHS_FOR_BLOB_SIDECARS_REQUESTS: 4096
157149
# `6`
158150
BLOB_SIDECAR_SUBNET_COUNT: 6
159-
160-
# Whisk
161-
# `Epoch(2**8)`
162-
WHISK_EPOCHS_PER_SHUFFLING_PHASE: 256
163-
# `Epoch(2)`
164-
WHISK_PROPOSER_SELECTION_GAP: 2

scripts/minimal-non-overriden-config.yaml

+3-14
Original file line numberDiff line numberDiff line change
@@ -56,16 +56,9 @@ CAPELLA_FORK_VERSION: 0x03000001
5656
# Deneb
5757
DENEB_FORK_VERSION: 0x04000001
5858
# (overriden in launch_local_testnet.sh) DENEB_FORK_EPOCH: 18446744073709551615
59-
60-
# EIP6110
61-
EIP6110_FORK_VERSION: 0x05000001
62-
EIP6110_FORK_EPOCH: 18446744073709551615
63-
# EIP7002
64-
EIP7002_FORK_VERSION: 0x05000001
65-
EIP7002_FORK_EPOCH: 18446744073709551615
66-
# WHISK
67-
WHISK_FORK_VERSION: 0x06000001
68-
WHISK_FORK_EPOCH: 18446744073709551615
59+
# Electra
60+
ELECTRA_FORK_VERSION: 0x05000001
61+
# (overriden in launch_local_testnet.sh) ELECTRA_FORK_EPOCH: 18446744073709551615
6962

7063
# Time parameters
7164
# ---------------------------------------------------------------
@@ -155,7 +148,3 @@ MAX_REQUEST_BLOB_SIDECARS: 768
155148
MIN_EPOCHS_FOR_BLOB_SIDECARS_REQUESTS: 4096
156149
# `6`
157150
BLOB_SIDECAR_SUBNET_COUNT: 6
158-
159-
# Whisk
160-
WHISK_EPOCHS_PER_SHUFFLING_PHASE: 4
161-
WHISK_PROPOSER_SELECTION_GAP: 1

0 commit comments

Comments
 (0)