Update test vectors to v1.1.0 (#2642)

This commit is contained in:
Michael Sproul 2021-09-28 14:20:06 +10:00 committed by Paul Hauner
parent 18eee2dc82
commit fd828199f5
No known key found for this signature in database
GPG Key ID: 5E2CFF9B75FA63DF
6 changed files with 37 additions and 14 deletions

View File

@ -2,9 +2,10 @@ use super::per_block_processing::{
errors::BlockProcessingError, process_operations::process_deposit, errors::BlockProcessingError, process_operations::process_deposit,
}; };
use crate::common::DepositDataTree; use crate::common::DepositDataTree;
use crate::upgrade::upgrade_to_altair; use crate::upgrade::{upgrade_to_altair, upgrade_to_merge};
use safe_arith::{ArithError, SafeArith}; use safe_arith::{ArithError, SafeArith};
use tree_hash::TreeHash; use tree_hash::TreeHash;
use types::consts::merge_testing::{GENESIS_BASE_FEE_PER_GAS, GENESIS_GAS_LIMIT};
use types::DEPOSIT_TREE_DEPTH; use types::DEPOSIT_TREE_DEPTH;
use types::*; use types::*;
@ -46,13 +47,36 @@ pub fn initialize_beacon_state_from_eth1<T: EthSpec>(
// use of `BeaconBlock::empty` in `BeaconState::new` is sufficient to correctly initialise // use of `BeaconBlock::empty` in `BeaconState::new` is sufficient to correctly initialise
// the `latest_block_header` as per: // the `latest_block_header` as per:
// https://github.com/ethereum/eth2.0-specs/pull/2323 // https://github.com/ethereum/eth2.0-specs/pull/2323
if spec.fork_name_at_epoch(state.current_epoch()) == ForkName::Altair { if spec
.altair_fork_epoch
.map_or(false, |fork_epoch| fork_epoch == T::genesis_epoch())
{
upgrade_to_altair(&mut state, spec)?; upgrade_to_altair(&mut state, spec)?;
state.fork_mut().previous_version = spec.altair_fork_version; state.fork_mut().previous_version = spec.altair_fork_version;
} }
// TODO: handle upgrade_to_merge() here // Similarly, perform an upgrade to the merge if configured from genesis.
if spec
.merge_fork_epoch
.map_or(false, |fork_epoch| fork_epoch == T::genesis_epoch())
{
upgrade_to_merge(&mut state, spec)?;
// Remove intermediate Altair fork from `state.fork`.
state.fork_mut().previous_version = spec.genesis_fork_version;
// Override latest execution payload header.
// See https://github.com/ethereum/consensus-specs/blob/v1.1.0/specs/merge/beacon-chain.md#testing
*state.latest_execution_payload_header_mut()? = ExecutionPayloadHeader {
block_hash: eth1_block_hash,
timestamp: eth1_timestamp,
random: eth1_block_hash,
gas_limit: GENESIS_GAS_LIMIT,
base_fee_per_gas: GENESIS_BASE_FEE_PER_GAS,
..ExecutionPayloadHeader::default()
};
}
// Now that we have our validators, initialize the caches (including the committees) // Now that we have our validators, initialize the caches (including the committees)
state.build_all_caches(spec)?; state.build_all_caches(spec)?;

View File

@ -480,7 +480,9 @@ impl ChainSpec {
altair_fork_epoch: Some(Epoch::new(74240)), altair_fork_epoch: Some(Epoch::new(74240)),
merge_fork_version: [0x02, 0x00, 0x00, 0x00], merge_fork_version: [0x02, 0x00, 0x00, 0x00],
merge_fork_epoch: None, merge_fork_epoch: None,
terminal_total_difficulty: Uint256::MAX, terminal_total_difficulty: Uint256::MAX
.checked_sub(Uint256::from(2u64.pow(10)))
.expect("calculation does not overflow"),
/* /*
* Network specific * Network specific
@ -521,6 +523,9 @@ impl ChainSpec {
epochs_per_sync_committee_period: Epoch::new(8), epochs_per_sync_committee_period: Epoch::new(8),
altair_fork_version: [0x01, 0x00, 0x00, 0x01], altair_fork_version: [0x01, 0x00, 0x00, 0x01],
altair_fork_epoch: None, altair_fork_epoch: None,
// Merge
merge_fork_version: [0x02, 0x00, 0x00, 0x01],
merge_fork_epoch: None,
// Other // Other
network_id: 2, // lighthouse testnet network id network_id: 2, // lighthouse testnet network id
deposit_chain_id: 5, deposit_chain_id: 5,

View File

@ -34,7 +34,7 @@ impl ForkName {
spec spec
} }
ForkName::Merge => { ForkName::Merge => {
spec.altair_fork_epoch = None; spec.altair_fork_epoch = Some(Epoch::new(0));
spec.merge_fork_epoch = Some(Epoch::new(0)); spec.merge_fork_epoch = Some(Epoch::new(0));
spec spec
} }

View File

@ -20,10 +20,11 @@ tests_dir_filename = sys.argv[2]
# following regular expressions, we will assume they are to be ignored (i.e., we are purposefully # following regular expressions, we will assume they are to be ignored (i.e., we are purposefully
# *not* running the spec tests). # *not* running the spec tests).
excluded_paths = [ excluded_paths = [
# Eth1Block # Eth1Block and PowBlock
# #
# Intentionally omitted, as per https://github.com/sigp/lighthouse/issues/1835 # Intentionally omitted, as per https://github.com/sigp/lighthouse/issues/1835
"tests/.*/.*/ssz_static/Eth1Block/", "tests/.*/.*/ssz_static/Eth1Block/",
"tests/.*/.*/ssz_static/PowBlock/",
# LightClientStore # LightClientStore
"tests/.*/.*/ssz_static/LightClientStore", "tests/.*/.*/ssz_static/LightClientStore",
# LightClientUpdate # LightClientUpdate

View File

@ -56,9 +56,7 @@ impl<E: EthSpec> LoadCase for GenesisInitialization<E> {
impl<E: EthSpec> Case for GenesisInitialization<E> { impl<E: EthSpec> Case for GenesisInitialization<E> {
fn is_enabled_for_fork(fork_name: ForkName) -> bool { fn is_enabled_for_fork(fork_name: ForkName) -> bool {
// Altair genesis and later requires real crypto. // Altair genesis and later requires real crypto.
// FIXME(merge): enable merge tests once available fork_name == ForkName::Base || cfg!(not(feature = "fake_crypto"))
fork_name == ForkName::Base
|| cfg!(not(feature = "fake_crypto")) && fork_name != ForkName::Merge
} }
fn result(&self, _case_index: usize, fork_name: ForkName) -> Result<(), Error> { fn result(&self, _case_index: usize, fork_name: ForkName) -> Result<(), Error> {

View File

@ -498,11 +498,6 @@ pub struct GenesisValidityHandler<E>(PhantomData<E>);
impl<E: EthSpec + TypeName> Handler for GenesisValidityHandler<E> { impl<E: EthSpec + TypeName> Handler for GenesisValidityHandler<E> {
type Case = cases::GenesisValidity<E>; type Case = cases::GenesisValidity<E>;
// FIXME(merge): enable merge test once available
fn is_enabled_for_fork(&self, fork_name: ForkName) -> bool {
fork_name != ForkName::Merge
}
fn config_name() -> &'static str { fn config_name() -> &'static str {
E::name() E::name()
} }