From e391b32858b59e4650feb20aa907ab10598f0a74 Mon Sep 17 00:00:00 2001 From: Pawan Dhananjay Date: Sun, 12 Dec 2021 09:04:21 +0000 Subject: [PATCH] Merge devnet 3 (#2859) ## Issue Addressed N/A ## Proposed Changes Changes required for the `merge-devnet-3`. Added some more non substantive renames on top of @realbigsean 's commit. Note: this doesn't include the proposer boosting changes in kintsugi v3. This devnet isn't running with the proposer boosting fork choice changes so if we are looking to merge https://github.com/sigp/lighthouse/pull/2822 into `unstable`, then I think we should just maintain this branch for the devnet temporarily. Co-authored-by: realbigsean Co-authored-by: Paul Hauner --- beacon_node/beacon_chain/src/beacon_chain.rs | 10 ++--- .../beacon_chain/src/block_verification.rs | 4 +- .../beacon_chain/src/execution_payload.rs | 10 ++--- beacon_node/client/src/builder.rs | 2 +- beacon_node/client/src/config.rs | 4 +- beacon_node/execution_layer/src/engine_api.rs | 4 +- .../execution_layer/src/engine_api/http.rs | 34 ++++++++--------- .../src/engine_api/json_structures.rs | 38 +++++++++---------- beacon_node/execution_layer/src/engines.rs | 8 ++-- beacon_node/execution_layer/src/lib.rs | 25 +++++------- .../test_utils/execution_block_generator.rs | 8 ++-- .../src/test_utils/handle_rpc.rs | 4 +- .../src/test_utils/mock_execution_layer.rs | 2 +- beacon_node/src/config.rs | 6 +-- .../src/per_block_processing.rs | 21 ++++++---- consensus/types/src/execution_payload.rs | 2 +- .../types/src/execution_payload_header.rs | 2 +- testing/ef_tests/Makefile | 2 +- testing/ef_tests/check_all_files_accessed.py | 13 +++++++ testing/ef_tests/tests/tests.rs | 7 ++++ 20 files changed, 112 insertions(+), 94 deletions(-) diff --git a/beacon_node/beacon_chain/src/beacon_chain.rs b/beacon_node/beacon_chain/src/beacon_chain.rs index bfe7ca143..ca11c8a7b 100644 --- a/beacon_node/beacon_chain/src/beacon_chain.rs +++ b/beacon_node/beacon_chain/src/beacon_chain.rs @@ -66,7 +66,7 @@ use ssz::Encode; use state_processing::{ common::get_indexed_attestation, per_block_processing, - per_block_processing::{errors::AttestationValidationError, is_merge_complete}, + per_block_processing::{errors::AttestationValidationError, is_merge_transition_complete}, per_slot_processing, state_advance::{complete_state_advance, partial_state_advance}, BlockSignatureStrategy, SigVerifiedOp, @@ -195,7 +195,7 @@ pub struct HeadInfo { pub genesis_time: u64, pub genesis_validators_root: Hash256, pub proposer_shuffling_decision_root: Hash256, - pub is_merge_complete: bool, + pub is_merge_transition_complete: bool, pub execution_payload_block_hash: Option, } @@ -1023,7 +1023,7 @@ impl BeaconChain { genesis_time: head.beacon_state.genesis_time(), genesis_validators_root: head.beacon_state.genesis_validators_root(), proposer_shuffling_decision_root, - is_merge_complete: is_merge_complete(&head.beacon_state), + is_merge_transition_complete: is_merge_transition_complete(&head.beacon_state), execution_payload_block_hash: head .beacon_block .message() @@ -3153,7 +3153,7 @@ impl BeaconChain { .body() .execution_payload() .map(|ep| ep.block_hash); - let is_merge_complete = is_merge_complete(&new_head.beacon_state); + let is_merge_transition_complete = is_merge_transition_complete(&new_head.beacon_state); drop(lag_timer); @@ -3387,7 +3387,7 @@ impl BeaconChain { // If this is a post-merge block, update the execution layer. if let Some(new_head_execution_block_hash) = new_head_execution_block_hash_opt { - if is_merge_complete { + if is_merge_transition_complete { let execution_layer = self .execution_layer .clone() diff --git a/beacon_node/beacon_chain/src/block_verification.rs b/beacon_node/beacon_chain/src/block_verification.rs index 1cb3625b0..83eb14bf7 100644 --- a/beacon_node/beacon_chain/src/block_verification.rs +++ b/beacon_node/beacon_chain/src/block_verification.rs @@ -60,7 +60,7 @@ use safe_arith::ArithError; use slog::{debug, error, Logger}; use slot_clock::SlotClock; use ssz::Encode; -use state_processing::per_block_processing::is_merge_block; +use state_processing::per_block_processing::is_merge_transition_block; use state_processing::{ block_signature_verifier::{BlockSignatureVerifier, Error as BlockSignatureVerifierError}, per_block_processing, per_slot_processing, @@ -1114,7 +1114,7 @@ impl<'a, T: BeaconChainTypes> FullyVerifiedBlock<'a, T> { // early. // - Doing the check here means we can keep our fork-choice implementation "pure". I.e., no // calls to remote servers. - if is_merge_block(&state, block.message().body()) { + if is_merge_transition_block(&state, block.message().body()) { validate_merge_block(chain, block.message())? } diff --git a/beacon_node/beacon_chain/src/execution_payload.rs b/beacon_node/beacon_chain/src/execution_payload.rs index cdf1d7b6a..5896dbf3d 100644 --- a/beacon_node/beacon_chain/src/execution_payload.rs +++ b/beacon_node/beacon_chain/src/execution_payload.rs @@ -17,7 +17,7 @@ use proto_array::{Block as ProtoBlock, ExecutionStatus}; use slog::debug; use slot_clock::SlotClock; use state_processing::per_block_processing::{ - compute_timestamp_at_slot, is_execution_enabled, is_merge_complete, + compute_timestamp_at_slot, is_execution_enabled, is_merge_transition_complete, partially_verify_execution_payload, }; use types::*; @@ -150,7 +150,7 @@ pub fn validate_execution_payload_for_gossip( // This logic should match `is_execution_enabled`. We use only the execution block hash of // the parent here in order to avoid loading the parent state during gossip verification. - let is_merge_complete = match parent_block.execution_status { + let is_merge_transition_complete = match parent_block.execution_status { // Optimistically declare that an "unknown" status block has completed the merge. ExecutionStatus::Valid(_) | ExecutionStatus::Unknown(_) => true, // It's impossible for an irrelevant block to have completed the merge. It is pre-merge @@ -165,7 +165,7 @@ pub fn validate_execution_payload_for_gossip( } }; - if is_merge_complete || execution_payload != &<_>::default() { + if is_merge_transition_complete || execution_payload != &<_>::default() { let expected_timestamp = chain .slot_clock .start_of(block.slot()) @@ -247,7 +247,7 @@ pub async fn prepare_execution_payload( .as_ref() .ok_or(BlockProductionError::ExecutionLayerMissing)?; - let parent_hash = if !is_merge_complete(state) { + let parent_hash = if !is_merge_transition_complete(state) { let is_terminal_block_hash_set = spec.terminal_block_hash != Hash256::zero(); let is_activation_epoch_reached = state.current_epoch() >= spec.terminal_block_hash_activation_epoch; @@ -292,7 +292,7 @@ pub async fn prepare_execution_payload( .map(|ep| ep.block_hash) }; - // Note: the fee_recipient is stored in the `execution_layer`, it will add this parameter. + // Note: the suggested_fee_recipient is stored in the `execution_layer`, it will add this parameter. let execution_payload = execution_layer .get_payload( parent_hash, diff --git a/beacon_node/client/src/builder.rs b/beacon_node/client/src/builder.rs index 0d61e0922..bcf0ee198 100644 --- a/beacon_node/client/src/builder.rs +++ b/beacon_node/client/src/builder.rs @@ -152,7 +152,7 @@ where let context = runtime_context.service_context("exec".into()); let execution_layer = ExecutionLayer::from_urls( execution_endpoints, - config.fee_recipient, + config.suggested_fee_recipient, context.executor.clone(), context.log().clone(), ) diff --git a/beacon_node/client/src/config.rs b/beacon_node/client/src/config.rs index 8a15e4598..f4519e05c 100644 --- a/beacon_node/client/src/config.rs +++ b/beacon_node/client/src/config.rs @@ -75,7 +75,7 @@ pub struct Config { pub chain: beacon_chain::ChainConfig, pub eth1: eth1::Config, pub execution_endpoints: Option>, - pub fee_recipient: Option
, + pub suggested_fee_recipient: Option
, pub http_api: http_api::Config, pub http_metrics: http_metrics::Config, pub monitoring_api: Option, @@ -97,7 +97,7 @@ impl Default for Config { sync_eth1_chain: false, eth1: <_>::default(), execution_endpoints: None, - fee_recipient: None, + suggested_fee_recipient: None, disabled_forks: Vec::new(), graffiti: Graffiti::default(), http_api: <_>::default(), diff --git a/beacon_node/execution_layer/src/engine_api.rs b/beacon_node/execution_layer/src/engine_api.rs index 0ec9888f0..f9654a497 100644 --- a/beacon_node/execution_layer/src/engine_api.rs +++ b/beacon_node/execution_layer/src/engine_api.rs @@ -83,7 +83,7 @@ pub enum ExecutePayloadResponseStatus { pub struct ExecutePayloadResponse { pub status: ExecutePayloadResponseStatus, pub latest_valid_hash: Option, - pub message: Option, + pub validation_error: Option, } #[derive(Clone, Copy, Debug, PartialEq, Serialize)] @@ -107,7 +107,7 @@ pub struct ExecutionBlock { pub struct PayloadAttributes { pub timestamp: u64, pub random: Hash256, - pub fee_recipient: Address, + pub suggested_fee_recipient: Address, } #[derive(Clone, Copy, Debug, PartialEq)] diff --git a/beacon_node/execution_layer/src/engine_api/http.rs b/beacon_node/execution_layer/src/engine_api/http.rs index c4e7a71ae..96a50ee2e 100644 --- a/beacon_node/execution_layer/src/engine_api/http.rs +++ b/beacon_node/execution_layer/src/engine_api/http.rs @@ -289,9 +289,9 @@ mod test { > { let mut json = json!({ "parentHash": HASH_00, - "coinbase": ADDRESS_01, + "feeRecipient": ADDRESS_01, "stateRoot": HASH_01, - "receiptRoot": HASH_00, + "receiptsRoot": HASH_00, "logsBloom": LOGS_BLOOM_01, "random": HASH_01, "blockNumber": "0x0", @@ -445,7 +445,7 @@ mod test { Some(PayloadAttributes { timestamp: 5, random: Hash256::zero(), - fee_recipient: Address::repeat_byte(0), + suggested_fee_recipient: Address::repeat_byte(0), }), ) .await; @@ -462,7 +462,7 @@ mod test { { "timestamp":"0x5", "random": HASH_00, - "feeRecipient": ADDRESS_00 + "suggestedFeeRecipient": ADDRESS_00 }] }), ) @@ -494,7 +494,7 @@ mod test { let _ = client .execute_payload_v1::(ExecutionPayload { parent_hash: Hash256::repeat_byte(0), - coinbase: Address::repeat_byte(1), + fee_recipient: Address::repeat_byte(1), state_root: Hash256::repeat_byte(1), receipt_root: Hash256::repeat_byte(0), logs_bloom: vec![1; 256].into(), @@ -516,9 +516,9 @@ mod test { "method": ENGINE_EXECUTE_PAYLOAD_V1, "params": [{ "parentHash": HASH_00, - "coinbase": ADDRESS_01, + "feeRecipient": ADDRESS_01, "stateRoot": HASH_01, - "receiptRoot": HASH_00, + "receiptsRoot": HASH_00, "logsBloom": LOGS_BLOOM_01, "random": HASH_01, "blockNumber": "0x0", @@ -600,7 +600,7 @@ mod test { Some(PayloadAttributes { timestamp: 5, random: Hash256::zero(), - fee_recipient: Address::from_str("0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b").unwrap(), + suggested_fee_recipient: Address::from_str("0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b").unwrap(), }) ) .await; @@ -617,7 +617,7 @@ mod test { { "timestamp":"0x5", "random": HASH_00, - "feeRecipient":"0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" + "suggestedFeeRecipient":"0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b" }] }) ) @@ -643,7 +643,7 @@ mod test { Some(PayloadAttributes { timestamp: 5, random: Hash256::zero(), - fee_recipient: Address::from_str("0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b").unwrap(), + suggested_fee_recipient: Address::from_str("0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b").unwrap(), }) ) .await @@ -678,9 +678,9 @@ mod test { "id":STATIC_ID, "result":{ "parentHash":"0x3b8fb240d288781d4aac94d3fd16809ee413bc99294a085798a589dae51ddd4a", - "coinbase":"0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "feeRecipient":"0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "stateRoot":"0xca3149fa9e37db08d1cd49c9061db1002ef1cd58db2210f2115c8c989b2bdf45", - "receiptRoot":"0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptsRoot":"0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "logsBloom": LOGS_BLOOM_00, "random": HASH_00, "blockNumber":"0x1", @@ -701,7 +701,7 @@ mod test { let expected = ExecutionPayload { parent_hash: Hash256::from_str("0x3b8fb240d288781d4aac94d3fd16809ee413bc99294a085798a589dae51ddd4a").unwrap(), - coinbase: Address::from_str("0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b").unwrap(), + fee_recipient: Address::from_str("0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b").unwrap(), state_root: Hash256::from_str("0xca3149fa9e37db08d1cd49c9061db1002ef1cd58db2210f2115c8c989b2bdf45").unwrap(), receipt_root: Hash256::from_str("0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421").unwrap(), logs_bloom: vec![0; 256].into(), @@ -726,7 +726,7 @@ mod test { let _ = client .execute_payload_v1::(ExecutionPayload { parent_hash: Hash256::from_str("0x3b8fb240d288781d4aac94d3fd16809ee413bc99294a085798a589dae51ddd4a").unwrap(), - coinbase: Address::from_str("0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b").unwrap(), + fee_recipient: Address::from_str("0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b").unwrap(), state_root: Hash256::from_str("0xca3149fa9e37db08d1cd49c9061db1002ef1cd58db2210f2115c8c989b2bdf45").unwrap(), receipt_root: Hash256::from_str("0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421").unwrap(), logs_bloom: vec![0; 256].into(), @@ -748,9 +748,9 @@ mod test { "method": ENGINE_EXECUTE_PAYLOAD_V1, "params": [{ "parentHash":"0x3b8fb240d288781d4aac94d3fd16809ee413bc99294a085798a589dae51ddd4a", - "coinbase":"0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "feeRecipient":"0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b", "stateRoot":"0xca3149fa9e37db08d1cd49c9061db1002ef1cd58db2210f2115c8c989b2bdf45", - "receiptRoot":"0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptsRoot":"0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "logsBloom": LOGS_BLOOM_00, "random": HASH_00, "blockNumber":"0x1", @@ -785,7 +785,7 @@ mod test { ExecutePayloadResponse { status: ExecutePayloadResponseStatus::Valid, latest_valid_hash: Some(Hash256::from_str("0x3559e851470f6e7bbed1db474980683e8c315bfce99b2a6ef47c057c04de7858").unwrap()), - message: None + validation_error: None } ); }, diff --git a/beacon_node/execution_layer/src/engine_api/json_structures.rs b/beacon_node/execution_layer/src/engine_api/json_structures.rs index c1335bb5b..ae6d730fa 100644 --- a/beacon_node/execution_layer/src/engine_api/json_structures.rs +++ b/beacon_node/execution_layer/src/engine_api/json_structures.rs @@ -59,9 +59,9 @@ pub struct JsonPayloadIdResponse { #[serde(bound = "T: EthSpec", rename_all = "camelCase")] pub struct JsonExecutionPayloadV1 { pub parent_hash: Hash256, - pub coinbase: Address, + pub fee_recipient: Address, pub state_root: Hash256, - pub receipt_root: Hash256, + pub receipts_root: Hash256, #[serde(with = "serde_logs_bloom")] pub logs_bloom: FixedVector, pub random: Hash256, @@ -87,7 +87,7 @@ impl From> for JsonExecutionPayloadV1 { // Use this verbose deconstruction pattern to ensure no field is left unused. let ExecutionPayload { parent_hash, - coinbase, + fee_recipient, state_root, receipt_root, logs_bloom, @@ -104,9 +104,9 @@ impl From> for JsonExecutionPayloadV1 { Self { parent_hash, - coinbase, + fee_recipient, state_root, - receipt_root, + receipts_root: receipt_root, logs_bloom, random, block_number, @@ -126,9 +126,9 @@ impl From> for ExecutionPayload { // Use this verbose deconstruction pattern to ensure no field is left unused. let JsonExecutionPayloadV1 { parent_hash, - coinbase, + fee_recipient, state_root, - receipt_root, + receipts_root, logs_bloom, random, block_number, @@ -143,9 +143,9 @@ impl From> for ExecutionPayload { Self { parent_hash, - coinbase, + fee_recipient, state_root, - receipt_root, + receipt_root: receipts_root, logs_bloom, random, block_number, @@ -166,7 +166,7 @@ pub struct JsonPayloadAttributesV1 { #[serde(with = "eth2_serde_utils::u64_hex_be")] pub timestamp: u64, pub random: Hash256, - pub fee_recipient: Address, + pub suggested_fee_recipient: Address, } impl From for JsonPayloadAttributesV1 { @@ -175,13 +175,13 @@ impl From for JsonPayloadAttributesV1 { let PayloadAttributes { timestamp, random, - fee_recipient, + suggested_fee_recipient, } = p; Self { timestamp, random, - fee_recipient, + suggested_fee_recipient, } } } @@ -192,13 +192,13 @@ impl From for PayloadAttributes { let JsonPayloadAttributesV1 { timestamp, random, - fee_recipient, + suggested_fee_recipient, } = j; Self { timestamp, random, - fee_recipient, + suggested_fee_recipient, } } } @@ -258,7 +258,7 @@ pub enum JsonExecutePayloadV1ResponseStatus { pub struct JsonExecutePayloadV1Response { pub status: JsonExecutePayloadV1ResponseStatus, pub latest_valid_hash: Option, - pub message: Option, + pub validation_error: Option, } impl From for JsonExecutePayloadV1ResponseStatus { @@ -286,13 +286,13 @@ impl From for JsonExecutePayloadV1Response { let ExecutePayloadResponse { status, latest_valid_hash, - message, + validation_error, } = e; Self { status: status.into(), latest_valid_hash, - message, + validation_error, } } } @@ -303,13 +303,13 @@ impl From for ExecutePayloadResponse { let JsonExecutePayloadV1Response { status, latest_valid_hash, - message, + validation_error, } = j; Self { status: status.into(), latest_valid_hash, - message, + validation_error, } } } diff --git a/beacon_node/execution_layer/src/engines.rs b/beacon_node/execution_layer/src/engines.rs index 2ec748e30..5db00d37f 100644 --- a/beacon_node/execution_layer/src/engines.rs +++ b/beacon_node/execution_layer/src/engines.rs @@ -49,7 +49,7 @@ struct PayloadIdCacheKey { pub head_block_hash: Hash256, pub timestamp: u64, pub random: Hash256, - pub fee_recipient: Address, + pub suggested_fee_recipient: Address, } /// An execution engine. @@ -76,7 +76,7 @@ impl Engine { head_block_hash: Hash256, timestamp: u64, random: Hash256, - fee_recipient: Address, + suggested_fee_recipient: Address, ) -> Option { self.payload_id_cache .lock() @@ -85,7 +85,7 @@ impl Engine { head_block_hash, timestamp, random, - fee_recipient, + suggested_fee_recipient, }) .cloned() } @@ -392,7 +392,7 @@ impl PayloadIdCacheKey { head_block_hash: state.head_block_hash, timestamp: attributes.timestamp, random: attributes.random, - fee_recipient: attributes.fee_recipient, + suggested_fee_recipient: attributes.suggested_fee_recipient, } } } diff --git a/beacon_node/execution_layer/src/lib.rs b/beacon_node/execution_layer/src/lib.rs index ec5d7e826..5c069f0b0 100644 --- a/beacon_node/execution_layer/src/lib.rs +++ b/beacon_node/execution_layer/src/lib.rs @@ -48,7 +48,7 @@ impl From for Error { struct Inner { engines: Engines, - fee_recipient: Option
, + suggested_fee_recipient: Option
, execution_blocks: Mutex>, executor: TaskExecutor, log: Logger, @@ -72,7 +72,7 @@ impl ExecutionLayer { /// Instantiate `Self` with `urls.len()` engines, all using the JSON-RPC via HTTP. pub fn from_urls( urls: Vec, - fee_recipient: Option
, + suggested_fee_recipient: Option
, executor: TaskExecutor, log: Logger, ) -> Result { @@ -95,7 +95,7 @@ impl ExecutionLayer { latest_forkchoice_state: <_>::default(), log: log.clone(), }, - fee_recipient, + suggested_fee_recipient, execution_blocks: Mutex::new(LruCache::new(EXECUTION_BLOCKS_LRU_CACHE_SIZE)), executor, log, @@ -116,9 +116,9 @@ impl ExecutionLayer { &self.inner.executor } - fn fee_recipient(&self) -> Result { + fn suggested_fee_recipient(&self) -> Result { self.inner - .fee_recipient + .suggested_fee_recipient .ok_or(Error::FeeRecipientUnspecified) } @@ -255,11 +255,11 @@ impl ExecutionLayer { random: Hash256, finalized_block_hash: Hash256, ) -> Result, Error> { - let fee_recipient = self.fee_recipient()?; + let suggested_fee_recipient = self.suggested_fee_recipient()?; debug!( self.log(), "Issuing engine_getPayload"; - "fee_recipient" => ?fee_recipient, + "suggested_fee_recipient" => ?suggested_fee_recipient, "random" => ?random, "timestamp" => timestamp, "parent_hash" => ?parent_hash, @@ -267,7 +267,7 @@ impl ExecutionLayer { self.engines() .first_success(|engine| async move { let payload_id = if let Some(id) = engine - .get_payload_id(parent_hash, timestamp, random, fee_recipient) + .get_payload_id(parent_hash, timestamp, random, suggested_fee_recipient) .await { // The payload id has been cached for this engine. @@ -287,7 +287,7 @@ impl ExecutionLayer { let payload_attributes = PayloadAttributes { timestamp, random, - fee_recipient, + suggested_fee_recipient, }; engine @@ -521,13 +521,6 @@ impl ExecutionLayer { self.execution_blocks().await.put(block.block_hash, block); - // TODO(merge): This implementation adheres to the following PR in the `dev` branch: - // - // https://github.com/ethereum/consensus-specs/pull/2719 - // - // Therefore this implementation is not strictly v1.1.5, it is more lenient to some - // edge-cases during EL genesis. We should revisit this prior to the merge to ensure that - // this implementation becomes canonical. loop { let block_reached_ttd = block.total_difficulty >= spec.terminal_total_difficulty; if block_reached_ttd { diff --git a/beacon_node/execution_layer/src/test_utils/execution_block_generator.rs b/beacon_node/execution_layer/src/test_utils/execution_block_generator.rs index 40e04138d..552bea0ea 100644 --- a/beacon_node/execution_layer/src/test_utils/execution_block_generator.rs +++ b/beacon_node/execution_layer/src/test_utils/execution_block_generator.rs @@ -242,7 +242,7 @@ impl ExecutionBlockGenerator { return ExecutePayloadResponse { status: ExecutePayloadResponseStatus::Syncing, latest_valid_hash: None, - message: None, + validation_error: None, }; }; @@ -250,7 +250,7 @@ impl ExecutionBlockGenerator { return ExecutePayloadResponse { status: ExecutePayloadResponseStatus::Invalid, latest_valid_hash: Some(parent.block_hash()), - message: Some("invalid block number".to_string()), + validation_error: Some("invalid block number".to_string()), }; } @@ -260,7 +260,7 @@ impl ExecutionBlockGenerator { ExecutePayloadResponse { status: ExecutePayloadResponseStatus::Valid, latest_valid_hash: Some(valid_hash), - message: None, + validation_error: None, } } @@ -324,7 +324,7 @@ impl ExecutionBlockGenerator { let mut execution_payload = ExecutionPayload { parent_hash: forkchoice_state.head_block_hash, - coinbase: attributes.fee_recipient, + fee_recipient: attributes.suggested_fee_recipient, receipt_root: Hash256::repeat_byte(42), state_root: Hash256::repeat_byte(43), logs_bloom: vec![0; 256].into(), diff --git a/beacon_node/execution_layer/src/test_utils/handle_rpc.rs b/beacon_node/execution_layer/src/test_utils/handle_rpc.rs index f03f5adf9..131bc8ba0 100644 --- a/beacon_node/execution_layer/src/test_utils/handle_rpc.rs +++ b/beacon_node/execution_layer/src/test_utils/handle_rpc.rs @@ -62,12 +62,12 @@ pub async fn handle_rpc( ExecutePayloadResponseStatus::Valid => ExecutePayloadResponse { status, latest_valid_hash: Some(request.block_hash), - message: None, + validation_error: None, }, ExecutePayloadResponseStatus::Syncing => ExecutePayloadResponse { status, latest_valid_hash: None, - message: None, + validation_error: None, }, _ => unimplemented!("invalid static executePayloadResponse"), } diff --git a/beacon_node/execution_layer/src/test_utils/mock_execution_layer.rs b/beacon_node/execution_layer/src/test_utils/mock_execution_layer.rs index dba78eb68..59345bc01 100644 --- a/beacon_node/execution_layer/src/test_utils/mock_execution_layer.rs +++ b/beacon_node/execution_layer/src/test_utils/mock_execution_layer.rs @@ -121,7 +121,7 @@ impl MockExecutionLayer { Some(PayloadAttributes { timestamp, random, - fee_recipient: Address::repeat_byte(42), + suggested_fee_recipient: Address::repeat_byte(42), }), ) .await diff --git a/beacon_node/src/config.rs b/beacon_node/src/config.rs index ac2ba9d47..e9e3e2cd5 100644 --- a/beacon_node/src/config.rs +++ b/beacon_node/src/config.rs @@ -18,7 +18,7 @@ use types::{Address, Checkpoint, Epoch, EthSpec, Hash256, PublicKeyBytes, GRAFFI // TODO(merge): remove this default value. It's just there to make life easy during // early testnets. -const DEFAULT_FEE_RECIPIENT: [u8; 20] = +const DEFAULT_SUGGESTED_FEE_RECIPIENT: [u8; 20] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1]; /// Gets the fully-initialized global client. @@ -253,11 +253,11 @@ pub fn get_config( client_config.execution_endpoints = Some(client_config.eth1.endpoints.clone()); } - client_config.fee_recipient = Some( + client_config.suggested_fee_recipient = Some( clap_utils::parse_optional(cli_args, "fee-recipient")? // TODO(merge): remove this default value. It's just there to make life easy during // early testnets. - .unwrap_or_else(|| Address::from(DEFAULT_FEE_RECIPIENT)), + .unwrap_or_else(|| Address::from(DEFAULT_SUGGESTED_FEE_RECIPIENT)), ); if let Some(freezer_dir) = cli_args.value_of("freezer-dir") { diff --git a/consensus/state_processing/src/per_block_processing.rs b/consensus/state_processing/src/per_block_processing.rs index 9975d6733..0dbb71699 100644 --- a/consensus/state_processing/src/per_block_processing.rs +++ b/consensus/state_processing/src/per_block_processing.rs @@ -310,7 +310,7 @@ pub fn partially_verify_execution_payload( payload: &ExecutionPayload, spec: &ChainSpec, ) -> Result<(), BlockProcessingError> { - if is_merge_complete(state) { + if is_merge_transition_complete(state) { block_verify!( payload.parent_hash == state.latest_execution_payload_header()?.block_hash, BlockProcessingError::ExecutionHashChainIncontiguous { @@ -355,7 +355,7 @@ pub fn process_execution_payload( *state.latest_execution_payload_header_mut()? = ExecutionPayloadHeader { parent_hash: payload.parent_hash, - coinbase: payload.coinbase, + fee_recipient: payload.fee_recipient, state_root: payload.state_root, receipt_root: payload.receipt_root, logs_bloom: payload.logs_bloom.clone(), @@ -377,17 +377,22 @@ pub fn process_execution_payload( /// the merge has happened or if we're on the transition block. Thus we don't want to propagate /// errors from the `BeaconState` being an earlier variant than `BeaconStateMerge` as we'd have to /// repeaetedly write code to treat these errors as false. -/// https://github.com/ethereum/consensus-specs/blob/dev/specs/merge/beacon-chain.md#is_merge_complete -pub fn is_merge_complete(state: &BeaconState) -> bool { +/// https://github.com/ethereum/consensus-specs/blob/dev/specs/merge/beacon-chain.md#is_merge_transition_complete +pub fn is_merge_transition_complete(state: &BeaconState) -> bool { state .latest_execution_payload_header() .map(|header| *header != >::default()) .unwrap_or(false) } -/// https://github.com/ethereum/consensus-specs/blob/dev/specs/merge/beacon-chain.md#is_merge_block -pub fn is_merge_block(state: &BeaconState, body: BeaconBlockBodyRef) -> bool { +/// https://github.com/ethereum/consensus-specs/blob/dev/specs/merge/beacon-chain.md#is_merge_transition_block +pub fn is_merge_transition_block( + state: &BeaconState, + body: BeaconBlockBodyRef, +) -> bool { body.execution_payload() - .map(|payload| !is_merge_complete(state) && *payload != >::default()) + .map(|payload| { + !is_merge_transition_complete(state) && *payload != >::default() + }) .unwrap_or(false) } /// https://github.com/ethereum/consensus-specs/blob/dev/specs/merge/beacon-chain.md#is_execution_enabled @@ -395,7 +400,7 @@ pub fn is_execution_enabled( state: &BeaconState, body: BeaconBlockBodyRef, ) -> bool { - is_merge_block(state, body) || is_merge_complete(state) + is_merge_transition_block(state, body) || is_merge_transition_complete(state) } /// https://github.com/ethereum/consensus-specs/blob/dev/specs/merge/beacon-chain.md#compute_timestamp_at_slot diff --git a/consensus/types/src/execution_payload.rs b/consensus/types/src/execution_payload.rs index 0080b092c..1b29fb34f 100644 --- a/consensus/types/src/execution_payload.rs +++ b/consensus/types/src/execution_payload.rs @@ -14,7 +14,7 @@ pub type Transaction = VariableList; #[serde(bound = "T: EthSpec")] pub struct ExecutionPayload { pub parent_hash: Hash256, - pub coinbase: Address, + pub fee_recipient: Address, pub state_root: Hash256, pub receipt_root: Hash256, #[serde(with = "ssz_types::serde_utils::hex_fixed_vec")] diff --git a/consensus/types/src/execution_payload_header.rs b/consensus/types/src/execution_payload_header.rs index ba0c08145..6cb76a646 100644 --- a/consensus/types/src/execution_payload_header.rs +++ b/consensus/types/src/execution_payload_header.rs @@ -10,7 +10,7 @@ use tree_hash_derive::TreeHash; )] pub struct ExecutionPayloadHeader { pub parent_hash: Hash256, - pub coinbase: Address, + pub fee_recipient: Address, pub state_root: Hash256, pub receipt_root: Hash256, #[serde(with = "ssz_types::serde_utils::hex_fixed_vec")] diff --git a/testing/ef_tests/Makefile b/testing/ef_tests/Makefile index dfb9f27a8..8c2a0f10e 100644 --- a/testing/ef_tests/Makefile +++ b/testing/ef_tests/Makefile @@ -1,4 +1,4 @@ -TESTS_TAG := v1.1.5 +TESTS_TAG := v1.1.6 TESTS = general minimal mainnet TARBALLS = $(patsubst %,%-$(TESTS_TAG).tar.gz,$(TESTS)) diff --git a/testing/ef_tests/check_all_files_accessed.py b/testing/ef_tests/check_all_files_accessed.py index 027959296..b1dfbdb4f 100755 --- a/testing/ef_tests/check_all_files_accessed.py +++ b/testing/ef_tests/check_all_files_accessed.py @@ -39,6 +39,19 @@ excluded_paths = [ "tests/minimal/altair/merkle/single_proof", "tests/mainnet/merge/merkle/single_proof", "tests/minimal/merge/merkle/single_proof", + # Temporarily disabled due to addition of proposer boosting. + # + # These tests will be reintroduced in: + # https://github.com/sigp/lighthouse/pull/2822 + "tests/minimal/phase0/fork_choice", + "tests/minimal/altair/fork_choice", + "tests/minimal/merge/fork_choice", + "tests/mainnet/phase0/fork_choice", + "tests/mainnet/altair/fork_choice", + "tests/mainnet/merge/fork_choice", + # Tests yet to be implemented. + "tests/mainnet/merge/transition", + "tests/minimal/merge/transition", ] def normalize_path(path): diff --git a/testing/ef_tests/tests/tests.rs b/testing/ef_tests/tests/tests.rs index 2201bc5ee..a74f0a0ba 100644 --- a/testing/ef_tests/tests/tests.rs +++ b/testing/ef_tests/tests/tests.rs @@ -411,6 +411,12 @@ fn finality() { FinalityHandler::::default().run(); } +/* + * Temporarily disabled due to addition of proposer boosting. + * + * These tests will be reintroduced in: + * https://github.com/sigp/lighthouse/pull/2822 + * #[test] fn fork_choice_get_head() { ForkChoiceGetHeadHandler::::default().run(); @@ -428,6 +434,7 @@ fn fork_choice_on_merge_block() { ForkChoiceOnMergeBlockHandler::::default().run(); ForkChoiceOnMergeBlockHandler::::default().run(); } +*/ #[test] fn genesis_initialization() {