enable doppelganger tests for deneb (#5137)

* enable doppelganger tests for deneb

* comment out lcli install skip

* Add sanity check

* Merge remote-tracking branch 'origin/unstable' into deneb-doppelganger
This commit is contained in:
realbigsean 2024-02-15 07:25:02 -05:00 committed by GitHub
parent f17fb291b7
commit 1711b80779
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 61 additions and 29 deletions

View File

@ -309,7 +309,9 @@ jobs:
run: | run: |
make make
- name: Install lcli - name: Install lcli
if: env.SELF_HOSTED_RUNNERS == 'false' # TODO: uncomment after the version of lcli in https://github.com/sigp/lighthouse/pull/5137
# is installed on the runners
# if: env.SELF_HOSTED_RUNNERS == 'false'
run: make install-lcli run: make install-lcli
- name: Run the doppelganger protection failure test script - name: Run the doppelganger protection failure test script
run: | run: |

View File

@ -9,7 +9,9 @@ use ethereum_hashing::hash;
use ssz::Decode; use ssz::Decode;
use ssz::Encode; use ssz::Encode;
use state_processing::process_activations; use state_processing::process_activations;
use state_processing::upgrade::{upgrade_to_altair, upgrade_to_bellatrix}; use state_processing::upgrade::{
upgrade_to_altair, upgrade_to_bellatrix, upgrade_to_capella, upgrade_to_deneb,
};
use std::fs::File; use std::fs::File;
use std::io::Read; use std::io::Read;
use std::path::PathBuf; use std::path::PathBuf;
@ -19,8 +21,8 @@ use types::ExecutionBlockHash;
use types::{ use types::{
test_utils::generate_deterministic_keypairs, Address, BeaconState, ChainSpec, Config, Epoch, test_utils::generate_deterministic_keypairs, Address, BeaconState, ChainSpec, Config, Epoch,
Eth1Data, EthSpec, ExecutionPayloadHeader, ExecutionPayloadHeaderCapella, Eth1Data, EthSpec, ExecutionPayloadHeader, ExecutionPayloadHeaderCapella,
ExecutionPayloadHeaderDeneb, ExecutionPayloadHeaderMerge, ExecutionPayloadHeaderRefMut, ExecutionPayloadHeaderDeneb, ExecutionPayloadHeaderMerge, ForkName, Hash256, Keypair,
ForkName, Hash256, Keypair, PublicKey, Validator, PublicKey, Validator,
}; };
pub fn run<T: EthSpec>(testnet_dir_path: PathBuf, matches: &ArgMatches) -> Result<(), String> { pub fn run<T: EthSpec>(testnet_dir_path: PathBuf, matches: &ArgMatches) -> Result<(), String> {
@ -302,26 +304,47 @@ fn initialize_state_with_validators<T: EthSpec>(
state.fork_mut().previous_version = spec.bellatrix_fork_version; state.fork_mut().previous_version = spec.bellatrix_fork_version;
// Override latest execution payload header. // Override latest execution payload header.
// See https://github.com/ethereum/consensus-specs/blob/v1.1.0/specs/merge/beacon-chain.md#testing // See https://github.com/ethereum/consensus-specs/blob/v1.1.0/specs/bellatrix/beacon-chain.md#testing
if let ExecutionPayloadHeader::Merge(ref header) = execution_payload_header {
*state
.latest_execution_payload_header_merge_mut()
.or(Err("mismatched fork".to_string()))? = header.clone();
}
}
// Currently, we only support starting from a bellatrix state if spec
match state .capella_fork_epoch
.latest_execution_payload_header_mut() .map_or(false, |fork_epoch| fork_epoch == T::genesis_epoch())
.map_err(|e| format!("Failed to get execution payload header: {:?}", e))? {
{ upgrade_to_capella(&mut state, spec).unwrap();
ExecutionPayloadHeaderRefMut::Merge(header_mut) => {
if let ExecutionPayloadHeader::Merge(eph) = execution_payload_header { // Remove intermediate fork from `state.fork`.
*header_mut = eph; state.fork_mut().previous_version = spec.capella_fork_version;
} else {
return Err("Execution payload header must be a bellatrix header".to_string()); // Override latest execution payload header.
} // See https://github.com/ethereum/consensus-specs/blob/v1.1.0/specs/bellatrix/beacon-chain.md#testing
} if let ExecutionPayloadHeader::Capella(ref header) = execution_payload_header {
ExecutionPayloadHeaderRefMut::Capella(_) => { *state
return Err("Cannot start genesis from a capella state".to_string()) .latest_execution_payload_header_capella_mut()
} .or(Err("mismatched fork".to_string()))? = header.clone();
ExecutionPayloadHeaderRefMut::Deneb(_) => { }
return Err("Cannot start genesis from a deneb state".to_string()) }
}
if spec
.deneb_fork_epoch
.map_or(false, |fork_epoch| fork_epoch == T::genesis_epoch())
{
upgrade_to_deneb(&mut state, spec).unwrap();
// Remove intermediate fork from `state.fork`.
state.fork_mut().previous_version = spec.deneb_fork_version;
// Override latest execution payload header.
// See https://github.com/ethereum/consensus-specs/blob/v1.1.0/specs/bellatrix/beacon-chain.md#testing
if let ExecutionPayloadHeader::Deneb(ref header) = execution_payload_header {
*state
.latest_execution_payload_header_deneb_mut()
.or(Err("mismatched fork".to_string()))? = header.clone();
} }
} }
@ -331,5 +354,10 @@ fn initialize_state_with_validators<T: EthSpec>(
// Set genesis validators root for domain separation and chain versioning // Set genesis validators root for domain separation and chain versioning
*state.genesis_validators_root_mut() = state.update_validators_tree_hash_cache().unwrap(); *state.genesis_validators_root_mut() = state.update_validators_tree_hash_cache().unwrap();
// Sanity check for state fork matching config fork.
state
.fork_name(spec)
.map_err(|e| format!("state fork mismatch: {e:?}"))?;
Ok(state) Ok(state)
} }

View File

@ -50,4 +50,5 @@ exec $GETH_BINARY \
--bootnodes $EL_BOOTNODE_ENODE \ --bootnodes $EL_BOOTNODE_ENODE \
--port $network_port \ --port $network_port \
--http.port $http_port \ --http.port $http_port \
--authrpc.port $auth_port --authrpc.port $auth_port \
2>&1 | tee $data_dir/geth.log

View File

@ -13,7 +13,7 @@
"londonBlock": 0, "londonBlock": 0,
"mergeForkBlock": 0, "mergeForkBlock": 0,
"shanghaiTime": 0, "shanghaiTime": 0,
"shardingForkTime": 0, "cancunTime": 0,
"terminalTotalDifficulty": 0, "terminalTotalDifficulty": 0,
"terminalTotalDifficultyPassed": true "terminalTotalDifficultyPassed": true
}, },

View File

@ -16,7 +16,7 @@ DEPOSIT_CONTRACT_ADDRESS=4242424242424242424242424242424242424242
GENESIS_FORK_VERSION=0x42424242 GENESIS_FORK_VERSION=0x42424242
# Block hash generated from genesis.json in directory # Block hash generated from genesis.json in directory
ETH1_BLOCK_HASH=add7865f8346031c72287e2edc4a4952fd34fc0a8642403e8c1bce67f215c92b ETH1_BLOCK_HASH=7a5c656343c3a66dcf75415958b500e8873f9dab0cd588e6cf0785b52a06dd34
VALIDATOR_COUNT=80 VALIDATOR_COUNT=80
GENESIS_VALIDATOR_COUNT=80 GENESIS_VALIDATOR_COUNT=80
@ -41,8 +41,8 @@ CHAIN_ID=4242
# Hard fork configuration # Hard fork configuration
ALTAIR_FORK_EPOCH=0 ALTAIR_FORK_EPOCH=0
BELLATRIX_FORK_EPOCH=0 BELLATRIX_FORK_EPOCH=0
CAPELLA_FORK_EPOCH=1 CAPELLA_FORK_EPOCH=0
DENEB_FORK_EPOCH=18446744073709551615 DENEB_FORK_EPOCH=0
TTD=0 TTD=0
@ -63,3 +63,4 @@ BN_ARGS=""
# Enable doppelganger detection # Enable doppelganger detection
VC_ARGS=" --enable-doppelganger-protection " VC_ARGS=" --enable-doppelganger-protection "