From 78fd388931b3026b4ea9660eec501895d74db12c Mon Sep 17 00:00:00 2001 From: Michael Sproul Date: Mon, 27 Sep 2021 09:42:29 +1000 Subject: [PATCH] Update merge consensus to v1.1.0-beta.5 (#2630) --- Cargo.lock | 44 +++++++------------ .../src/per_block_processing.rs | 34 +++++++------- consensus/types/src/eth_spec.rs | 5 ++- consensus/types/src/execution_payload.rs | 3 ++ .../types/src/execution_payload_header.rs | 2 + 5 files changed, 43 insertions(+), 45 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 472cfb829f1..3e9a531410f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -895,6 +895,7 @@ dependencies = [ "environment", "error-chain", "eth1", + "eth2", "eth2_config", "eth2_libp2p", "eth2_ssz", @@ -909,6 +910,7 @@ dependencies = [ "parking_lot", "prometheus", "reqwest", + "sensitive_url", "serde", "serde_derive", "serde_yaml", @@ -938,17 +940,6 @@ dependencies = [ "cc", ] -[[package]] -name = "colored" -version = "1.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4ffc801dacf156c5854b9df4f425a626539c3a6ef7893cc0c5084a23f0b6c59" -dependencies = [ - "atty", - "lazy_static", - "winapi", -] - [[package]] name = "compare_fields" version = "0.2.0" @@ -1749,6 +1740,7 @@ dependencies = [ "sensitive_url", "serde", "serde_json", + "store", "types", "zeroize", ] @@ -2943,6 +2935,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bee0328b1209d157ef001c94dd85b4f8f64139adb0eac2659f4b08382b2f474d" dependencies = [ "cfg-if 1.0.0", + "js-sys", + "wasm-bindgen", + "web-sys", ] [[package]] @@ -3067,8 +3062,10 @@ dependencies = [ "deposit_contract", "directory", "dirs", + "env_logger 0.9.0", "environment", "eth1_test_rig", + "eth2", "eth2_keystore", "eth2_libp2p", "eth2_network_config", @@ -3083,8 +3080,8 @@ dependencies = [ "regex", "sensitive_url", "serde", + "serde_json", "serde_yaml", - "simple_logger", "state_processing", "tokio", "tree_hash", @@ -5630,19 +5627,6 @@ dependencies = [ "rand_core 0.6.3", ] -[[package]] -name = "simple_logger" -version = "1.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7de33c687404ec3045d4a0d437580455257c0436f858d702f244e7d652f9f07" -dependencies = [ - "atty", - "chrono", - "colored", - "log", - "winapi", -] - [[package]] name = "simulator" version = "0.2.0" @@ -6340,13 +6324,14 @@ dependencies = [ [[package]] name = "tiny-bip39" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9e44c4759bae7f1032e286a7ef990bd9ed23fe831b7eeba0beb97484c2e59b8" +checksum = "524daa5624d9d4ffb5a0625971d35205b882111daa6b6338a7a6c578a3c36928" dependencies = [ "anyhow", "hmac 0.8.1", "once_cell", + "parking_lot", "pbkdf2 0.4.0", "rand 0.7.3", "rustc-hash", @@ -6758,6 +6743,7 @@ dependencies = [ "serde_json", "serde_yaml", "slog", + "state_processing", "superstruct", "swap_or_not_shuffle", "tempfile", @@ -7462,9 +7448,9 @@ dependencies = [ [[package]] name = "zeroize" -version = "1.4.1" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "377db0846015f7ae377174787dd452e1c5f5a9050bc6f954911d01f116daa0cd" +checksum = "bf68b08513768deaa790264a7fac27a58cbf2705cfcdc9448362229217d7e970" dependencies = [ "zeroize_derive", ] diff --git a/consensus/state_processing/src/per_block_processing.rs b/consensus/state_processing/src/per_block_processing.rs index abb08d5a99f..7b0f2b64ec9 100644 --- a/consensus/state_processing/src/per_block_processing.rs +++ b/consensus/state_processing/src/per_block_processing.rs @@ -127,6 +127,17 @@ pub fn per_block_processing( state.build_committee_cache(RelativeEpoch::Previous, spec)?; state.build_committee_cache(RelativeEpoch::Current, spec)?; + // The call to the `process_execution_payload` must happen before the call to the + // `process_randao` as the former depends on the `randao_mix` computed with the reveal of the + // previous block. + if is_execution_enabled(state, block.body()) { + let payload = block + .body() + .execution_payload() + .ok_or(BlockProcessingError::IncorrectStateType)?; + process_execution_payload(state, payload, spec)?; + } + process_randao(state, block, verify_signatures, spec)?; process_eth1_data(state, block.body().eth1_data())?; process_operations(state, block.body(), proposer_index, verify_signatures, spec)?; @@ -141,14 +152,6 @@ pub fn per_block_processing( )?; } - if is_execution_enabled(state, block.body()) { - let payload = block - .body() - .execution_payload() - .ok_or(BlockProcessingError::IncorrectStateType)?; - process_execution_payload(state, payload, spec)?; - } - Ok(()) } @@ -344,13 +347,6 @@ pub fn process_execution_payload( found: payload.block_number, } ); - block_verify!( - payload.random == *state.get_randao_mix(state.current_epoch())?, - BlockProcessingError::ExecutionRandaoMismatch { - expected: *state.get_randao_mix(state.current_epoch())?, - found: payload.random, - } - ); block_verify!( is_valid_gas_limit(payload, state.latest_execution_payload_header()?)?, BlockProcessingError::ExecutionInvalidGasLimit { @@ -359,6 +355,13 @@ pub fn process_execution_payload( } ); } + block_verify!( + payload.random == *state.get_randao_mix(state.current_epoch())?, + BlockProcessingError::ExecutionRandaoMismatch { + expected: *state.get_randao_mix(state.current_epoch())?, + found: payload.random, + } + ); let timestamp = compute_timestamp_at_slot(state, spec)?; block_verify!( @@ -380,6 +383,7 @@ pub fn process_execution_payload( gas_limit: payload.gas_limit, gas_used: payload.gas_used, timestamp: payload.timestamp, + extra_data: payload.extra_data.clone(), base_fee_per_gas: payload.base_fee_per_gas, block_hash: payload.block_hash, transactions_root: payload.transactions.tree_hash_root(), diff --git a/consensus/types/src/eth_spec.rs b/consensus/types/src/eth_spec.rs index c45ecf8f7b6..f57aa48afbf 100644 --- a/consensus/types/src/eth_spec.rs +++ b/consensus/types/src/eth_spec.rs @@ -91,6 +91,7 @@ pub trait EthSpec: 'static + Default + Sync + Send + Clone + Debug + PartialEq + type BytesPerLogsBloom: Unsigned + Clone + Sync + Send + Debug + PartialEq; type GasLimitDenominator: Unsigned + Clone + Sync + Send + Debug + PartialEq; type MinGasLimit: Unsigned + Clone + Sync + Send + Debug + PartialEq; + type MaxExtraDataBytes: Unsigned + Clone + Sync + Send + Debug + PartialEq; /* * Derived values (set these CAREFULLY) */ @@ -262,6 +263,7 @@ impl EthSpec for MainnetEthSpec { type BytesPerLogsBloom = U256; type GasLimitDenominator = U1024; type MinGasLimit = U5000; + type MaxExtraDataBytes = U32; type SyncSubcommitteeSize = U128; // 512 committee size / 4 sync committee subnet count type MaxPendingAttestations = U4096; // 128 max attestations * 32 slots per epoch type SlotsPerEth1VotingPeriod = U2048; // 64 epochs * 32 slots per epoch @@ -308,7 +310,8 @@ impl EthSpec for MinimalEthSpec { MaxTransactionsPerPayload, BytesPerLogsBloom, GasLimitDenominator, - MinGasLimit + MinGasLimit, + MaxExtraDataBytes }); fn default_spec() -> ChainSpec { diff --git a/consensus/types/src/execution_payload.rs b/consensus/types/src/execution_payload.rs index 4311f2d5ff2..688d1239006 100644 --- a/consensus/types/src/execution_payload.rs +++ b/consensus/types/src/execution_payload.rs @@ -57,6 +57,8 @@ pub struct ExecutionPayload { pub gas_used: u64, #[serde(with = "eth2_serde_utils::quoted_u64")] pub timestamp: u64, + #[serde(with = "ssz_types::serde_utils::hex_var_list")] + pub extra_data: VariableList, pub base_fee_per_gas: Hash256, pub block_hash: Hash256, #[test_random(default)] @@ -77,6 +79,7 @@ impl ExecutionPayload { gas_limit: 0, gas_used: 0, timestamp: 0, + extra_data: VariableList::empty(), base_fee_per_gas: Hash256::zero(), block_hash: Hash256::zero(), transactions: VariableList::empty(), diff --git a/consensus/types/src/execution_payload_header.rs b/consensus/types/src/execution_payload_header.rs index 79129f4098e..e9876d89b94 100644 --- a/consensus/types/src/execution_payload_header.rs +++ b/consensus/types/src/execution_payload_header.rs @@ -24,6 +24,8 @@ pub struct ExecutionPayloadHeader { pub gas_used: u64, #[serde(with = "eth2_serde_utils::quoted_u64")] pub timestamp: u64, + #[serde(with = "ssz_types::serde_utils::hex_var_list")] + pub extra_data: VariableList, pub base_fee_per_gas: Hash256, pub block_hash: Hash256, pub transactions_root: Hash256,