From 8f3f27972d0732fde309e88b72a74022f2fc5330 Mon Sep 17 00:00:00 2001 From: Mac L Date: Fri, 8 Aug 2025 00:21:47 +1000 Subject: [PATCH] Remove `ExecutionPayloadElectra` --- .../beacon_chain/src/beacon_block_streamer.rs | 9 +- .../beacon_chain/src/fulu_readiness.rs | 16 +- beacon_node/beacon_chain/src/test_utils.rs | 4 +- beacon_node/execution_layer/src/engine_api.rs | 125 +++----- .../execution_layer/src/engine_api/http.rs | 123 +++----- .../src/engine_api/json_structures.rs | 109 ++----- .../src/engine_api/new_payload_request.rs | 28 +- beacon_node/execution_layer/src/lib.rs | 13 +- .../test_utils/execution_block_generator.rs | 103 ++----- .../src/test_utils/handle_rpc.rs | 270 ++++++------------ .../src/test_utils/mock_builder.rs | 54 +--- .../execution_layer/src/test_utils/mod.rs | 2 - .../store/src/impls/execution_payload.rs | 23 +- beacon_node/store/src/partial_beacon_state.rs | 4 +- common/eth2/src/types.rs | 19 +- consensus/state_processing/src/genesis.rs | 4 +- .../src/per_block_processing.rs | 12 - .../state_processing/src/upgrade/electra.rs | 2 +- .../state_processing/src/upgrade/fulu.rs | 2 +- consensus/types/src/beacon_block.rs | 4 +- consensus/types/src/beacon_block_body.rs | 24 +- consensus/types/src/beacon_state.rs | 12 +- consensus/types/src/builder_bid.rs | 37 ++- consensus/types/src/execution_payload.rs | 34 +-- .../types/src/execution_payload_header.rs | 168 +---------- consensus/types/src/lib.rs | 11 +- consensus/types/src/light_client_header.rs | 19 +- consensus/types/src/payload.rs | 94 +----- consensus/types/src/signed_beacon_block.rs | 16 +- testing/ef_tests/src/type_name.rs | 4 - testing/ef_tests/tests/tests.rs | 14 - 31 files changed, 338 insertions(+), 1021 deletions(-) diff --git a/beacon_node/beacon_chain/src/beacon_block_streamer.rs b/beacon_node/beacon_chain/src/beacon_block_streamer.rs index e37a69040db..549513db7a2 100644 --- a/beacon_node/beacon_chain/src/beacon_block_streamer.rs +++ b/beacon_node/beacon_chain/src/beacon_block_streamer.rs @@ -15,8 +15,7 @@ use types::{ SignedBlindedBeaconBlock, Slot, }; use types::{ - ExecutionPayload, ExecutionPayloadBellatrix, ExecutionPayloadCapella, ExecutionPayloadElectra, - ExecutionPayloadFulu, ExecutionPayloadHeader, + ExecutionPayload, ExecutionPayloadBellatrix, ExecutionPayloadCapella, ExecutionPayloadHeader, }; #[derive(PartialEq)] @@ -98,9 +97,9 @@ fn reconstruct_default_header_block( let payload: ExecutionPayload = match fork { ForkName::Bellatrix => ExecutionPayloadBellatrix::default().into(), ForkName::Capella => ExecutionPayloadCapella::default().into(), - ForkName::Deneb => ExecutionPayloadDeneb::default().into(), - ForkName::Electra => ExecutionPayloadElectra::default().into(), - ForkName::Fulu => ExecutionPayloadFulu::default().into(), + ForkName::Deneb | ForkName::Electra | ForkName::Fulu => { + ExecutionPayloadDeneb::default().into() + } ForkName::Base | ForkName::Altair => { return Err(Error::PayloadReconstruction(format!( "Block with fork variant {} has execution payload", diff --git a/beacon_node/beacon_chain/src/fulu_readiness.rs b/beacon_node/beacon_chain/src/fulu_readiness.rs index 1107acad746..2371f4a7a9f 100644 --- a/beacon_node/beacon_chain/src/fulu_readiness.rs +++ b/beacon_node/beacon_chain/src/fulu_readiness.rs @@ -1,7 +1,7 @@ //! Provides tools for checking if a node is ready for the Fulu upgrade. use crate::{BeaconChain, BeaconChainTypes}; -use execution_layer::http::{ENGINE_GET_PAYLOAD_V5, ENGINE_NEW_PAYLOAD_V4}; +use execution_layer::http::ENGINE_NEW_PAYLOAD_V4; use serde::{Deserialize, Serialize}; use std::fmt; use std::time::Duration; @@ -18,8 +18,8 @@ pub const ENGINE_CAPABILITIES_REFRESH_INTERVAL: u64 = 300; pub enum FuluReadiness { /// The execution engine is fulu-enabled (as far as we can tell) Ready, - /// We are connected to an execution engine which doesn't support the V5 engine api methods - V5MethodsNotSupported { error: String }, + /// We are connected to an execution engine which doesn't support the V4 engine api methods + V4MethodsNotSupported { error: String }, /// The transition configuration with the EL failed, there might be a problem with /// connectivity, authentication or a difference in configuration. ExchangeCapabilitiesFailed { error: String }, @@ -44,7 +44,7 @@ impl fmt::Display for FuluReadiness { "The --execution-endpoint flag is not specified, this is a \ requirement post-merge" ), - FuluReadiness::V5MethodsNotSupported { error } => write!( + FuluReadiness::V4MethodsNotSupported { error } => write!( f, "Execution endpoint does not support Fulu methods: {}", error @@ -87,12 +87,6 @@ impl BeaconChain { Ok(capabilities) => { let mut missing_methods = String::from("Required Methods Unsupported:"); let mut all_good = true; - if !capabilities.get_payload_v5 { - missing_methods.push(' '); - missing_methods.push_str(ENGINE_GET_PAYLOAD_V5); - all_good = false; - } - // TODO(fulu) switch to v5 when the EL is ready if !capabilities.new_payload_v4 { missing_methods.push(' '); missing_methods.push_str(ENGINE_NEW_PAYLOAD_V4); @@ -102,7 +96,7 @@ impl BeaconChain { if all_good { FuluReadiness::Ready } else { - FuluReadiness::V5MethodsNotSupported { + FuluReadiness::V4MethodsNotSupported { error: missing_methods, } } diff --git a/beacon_node/beacon_chain/src/test_utils.rs b/beacon_node/beacon_chain/src/test_utils.rs index 62e20cba777..44a7ba67958 100644 --- a/beacon_node/beacon_chain/src/test_utils.rs +++ b/beacon_node/beacon_chain/src/test_utils.rs @@ -3224,7 +3224,7 @@ pub fn generate_rand_block_and_blobs( ref mut message, .. }) => { // Get either zero blobs or a random number of blobs between 1 and Max Blobs. - let payload: &mut FullPayloadElectra = &mut message.body.execution_payload; + let payload: &mut FullPayloadDeneb = &mut message.body.execution_payload; let num_blobs = match num_blobs { NumBlobs::Random => rng.gen_range(1..=max_blobs), NumBlobs::Number(n) => n, @@ -3243,7 +3243,7 @@ pub fn generate_rand_block_and_blobs( ref mut message, .. }) => { // Get either zero blobs or a random number of blobs between 1 and Max Blobs. - let payload: &mut FullPayloadFulu = &mut message.body.execution_payload; + let payload: &mut FullPayloadDeneb = &mut message.body.execution_payload; let num_blobs = match num_blobs { NumBlobs::Random => rng.gen_range(1..=max_blobs), NumBlobs::Number(n) => n, diff --git a/beacon_node/execution_layer/src/engine_api.rs b/beacon_node/execution_layer/src/engine_api.rs index 3c82e6251bf..fc5b874bcb5 100644 --- a/beacon_node/execution_layer/src/engine_api.rs +++ b/beacon_node/execution_layer/src/engine_api.rs @@ -4,8 +4,7 @@ use crate::http::{ ENGINE_GET_BLOBS_V1, ENGINE_GET_BLOBS_V2, ENGINE_GET_CLIENT_VERSION_V1, ENGINE_GET_PAYLOAD_BODIES_BY_HASH_V1, ENGINE_GET_PAYLOAD_BODIES_BY_RANGE_V1, ENGINE_GET_PAYLOAD_V1, ENGINE_GET_PAYLOAD_V2, ENGINE_GET_PAYLOAD_V3, ENGINE_GET_PAYLOAD_V4, - ENGINE_GET_PAYLOAD_V5, ENGINE_NEW_PAYLOAD_V1, ENGINE_NEW_PAYLOAD_V2, ENGINE_NEW_PAYLOAD_V3, - ENGINE_NEW_PAYLOAD_V4, ENGINE_NEW_PAYLOAD_V5, + ENGINE_NEW_PAYLOAD_V1, ENGINE_NEW_PAYLOAD_V2, ENGINE_NEW_PAYLOAD_V3, ENGINE_NEW_PAYLOAD_V4, }; use eth2::types::{ BlobsBundle, SsePayloadAttributes, SsePayloadAttributesV1, SsePayloadAttributesV2, @@ -24,8 +23,8 @@ pub use types::{ Uint256, VariableList, Withdrawal, Withdrawals, }; use types::{ - ExecutionPayloadBellatrix, ExecutionPayloadCapella, ExecutionPayloadDeneb, - ExecutionPayloadElectra, ExecutionPayloadFulu, ExecutionRequests, KzgProofs, + ExecutionPayloadBellatrix, ExecutionPayloadCapella, ExecutionPayloadDeneb, ExecutionRequests, + KzgProofs, }; use types::{Graffiti, GRAFFITI_BYTES_LEN}; @@ -36,7 +35,7 @@ mod new_payload_request; pub use new_payload_request::{ NewPayloadRequest, NewPayloadRequestBellatrix, NewPayloadRequestCapella, - NewPayloadRequestDeneb, NewPayloadRequestElectra, NewPayloadRequestFulu, + NewPayloadRequestDeneb, NewPayloadRequestElectra, }; pub const LATEST_TAG: &str = "latest"; @@ -269,10 +268,8 @@ pub struct ProposeBlindedBlockResponse { } #[superstruct( - variants(Bellatrix, Capella, Deneb, Electra, Fulu), + variants(Bellatrix, Capella, Deneb, Electra), variant_attributes(derive(Clone, Debug, PartialEq),), - map_into(ExecutionPayload), - map_ref_into(ExecutionPayloadRef), cast_error(ty = "Error", expr = "Error::IncorrectStateVariant"), partial_getter_error(ty = "Error", expr = "Error::IncorrectStateVariant") )] @@ -288,15 +285,13 @@ pub struct GetPayloadResponse { #[superstruct(only(Deneb), partial_getter(rename = "execution_payload_deneb"))] pub execution_payload: ExecutionPayloadDeneb, #[superstruct(only(Electra), partial_getter(rename = "execution_payload_electra"))] - pub execution_payload: ExecutionPayloadElectra, - #[superstruct(only(Fulu), partial_getter(rename = "execution_payload_fulu"))] - pub execution_payload: ExecutionPayloadFulu, + pub execution_payload: ExecutionPayloadDeneb, pub block_value: Uint256, - #[superstruct(only(Deneb, Electra, Fulu))] + #[superstruct(only(Deneb, Electra))] pub blobs_bundle: BlobsBundle, - #[superstruct(only(Deneb, Electra, Fulu), partial_getter(copy))] + #[superstruct(only(Deneb, Electra), partial_getter(copy))] pub should_override_builder: bool, - #[superstruct(only(Electra, Fulu))] + #[superstruct(only(Electra))] pub requests: ExecutionRequests, } @@ -316,17 +311,35 @@ impl GetPayloadResponse { impl<'a, E: EthSpec> From> for ExecutionPayloadRef<'a, E> { fn from(response: GetPayloadResponseRef<'a, E>) -> Self { - map_get_payload_response_ref_into_execution_payload_ref!(&'a _, response, |inner, cons| { - cons(&inner.execution_payload) - }) + match response { + GetPayloadResponseRef::Bellatrix(inner) => { + ExecutionPayloadRef::Bellatrix(&inner.execution_payload) + } + GetPayloadResponseRef::Capella(inner) => { + ExecutionPayloadRef::Capella(&inner.execution_payload) + } + GetPayloadResponseRef::Deneb(inner) => { + ExecutionPayloadRef::Deneb(&inner.execution_payload) + } + GetPayloadResponseRef::Electra(inner) => { + ExecutionPayloadRef::Deneb(&inner.execution_payload) + } + } } } impl From> for ExecutionPayload { fn from(response: GetPayloadResponse) -> Self { - map_get_payload_response_into_execution_payload!(response, |inner, cons| { - cons(inner.execution_payload) - }) + match response { + GetPayloadResponse::Bellatrix(inner) => { + ExecutionPayload::Bellatrix(inner.execution_payload) + } + GetPayloadResponse::Capella(inner) => { + ExecutionPayload::Capella(inner.execution_payload) + } + GetPayloadResponse::Deneb(inner) => ExecutionPayload::Deneb(inner.execution_payload), + GetPayloadResponse::Electra(inner) => ExecutionPayload::Deneb(inner.execution_payload), + } } } @@ -359,13 +372,7 @@ impl From> None, ), GetPayloadResponse::Electra(inner) => ( - ExecutionPayload::Electra(inner.execution_payload), - inner.block_value, - Some(inner.blobs_bundle), - Some(inner.requests), - ), - GetPayloadResponse::Fulu(inner) => ( - ExecutionPayload::Fulu(inner.execution_payload), + ExecutionPayload::Deneb(inner.execution_payload), inner.block_value, Some(inner.blobs_bundle), Some(inner.requests), @@ -475,62 +482,6 @@ impl ExecutionPayloadBodyV1 { )) } } - ExecutionPayloadHeader::Electra(header) => { - if let Some(withdrawals) = self.withdrawals { - Ok(ExecutionPayload::Electra(ExecutionPayloadElectra { - parent_hash: header.parent_hash, - fee_recipient: header.fee_recipient, - state_root: header.state_root, - receipts_root: header.receipts_root, - logs_bloom: header.logs_bloom, - prev_randao: header.prev_randao, - block_number: header.block_number, - gas_limit: header.gas_limit, - gas_used: header.gas_used, - timestamp: header.timestamp, - extra_data: header.extra_data, - base_fee_per_gas: header.base_fee_per_gas, - block_hash: header.block_hash, - transactions: self.transactions, - withdrawals, - blob_gas_used: header.blob_gas_used, - excess_blob_gas: header.excess_blob_gas, - })) - } else { - Err(format!( - "block {} is post capella but payload body doesn't have withdrawals", - header.block_hash - )) - } - } - ExecutionPayloadHeader::Fulu(header) => { - if let Some(withdrawals) = self.withdrawals { - Ok(ExecutionPayload::Fulu(ExecutionPayloadFulu { - parent_hash: header.parent_hash, - fee_recipient: header.fee_recipient, - state_root: header.state_root, - receipts_root: header.receipts_root, - logs_bloom: header.logs_bloom, - prev_randao: header.prev_randao, - block_number: header.block_number, - gas_limit: header.gas_limit, - gas_used: header.gas_used, - timestamp: header.timestamp, - extra_data: header.extra_data, - base_fee_per_gas: header.base_fee_per_gas, - block_hash: header.block_hash, - transactions: self.transactions, - withdrawals, - blob_gas_used: header.blob_gas_used, - excess_blob_gas: header.excess_blob_gas, - })) - } else { - Err(format!( - "block {} is post capella but payload body doesn't have withdrawals", - header.block_hash - )) - } - } } } } @@ -541,7 +492,6 @@ pub struct EngineCapabilities { pub new_payload_v2: bool, pub new_payload_v3: bool, pub new_payload_v4: bool, - pub new_payload_v5: bool, pub forkchoice_updated_v1: bool, pub forkchoice_updated_v2: bool, pub forkchoice_updated_v3: bool, @@ -551,7 +501,6 @@ pub struct EngineCapabilities { pub get_payload_v2: bool, pub get_payload_v3: bool, pub get_payload_v4: bool, - pub get_payload_v5: bool, pub get_client_version_v1: bool, pub get_blobs_v1: bool, pub get_blobs_v2: bool, @@ -572,9 +521,6 @@ impl EngineCapabilities { if self.new_payload_v4 { response.push(ENGINE_NEW_PAYLOAD_V4); } - if self.new_payload_v5 { - response.push(ENGINE_NEW_PAYLOAD_V5); - } if self.forkchoice_updated_v1 { response.push(ENGINE_FORKCHOICE_UPDATED_V1); } @@ -602,9 +548,6 @@ impl EngineCapabilities { if self.get_payload_v4 { response.push(ENGINE_GET_PAYLOAD_V4); } - if self.get_payload_v5 { - response.push(ENGINE_GET_PAYLOAD_V5); - } if self.get_client_version_v1 { response.push(ENGINE_GET_CLIENT_VERSION_V1); } diff --git a/beacon_node/execution_layer/src/engine_api/http.rs b/beacon_node/execution_layer/src/engine_api/http.rs index 300713fdca4..3526305edc2 100644 --- a/beacon_node/execution_layer/src/engine_api/http.rs +++ b/beacon_node/execution_layer/src/engine_api/http.rs @@ -768,9 +768,14 @@ impl HttpJsonRpc { pub async fn new_payload_v1( &self, - execution_payload: ExecutionPayload, + new_payload_request_bellatrix: NewPayloadRequestBellatrix<'_, E>, ) -> Result { - let params = json!([JsonExecutionPayload::from(execution_payload)]); + let params = json!([JsonExecutionPayload::V1( + new_payload_request_bellatrix + .execution_payload + .clone() + .into() + )]); let response: JsonPayloadStatusV1 = self .rpc_request( @@ -785,9 +790,11 @@ impl HttpJsonRpc { pub async fn new_payload_v2( &self, - execution_payload: ExecutionPayload, + new_payload_request_capella: NewPayloadRequestCapella<'_, E>, ) -> Result { - let params = json!([JsonExecutionPayload::from(execution_payload)]); + let params = json!([JsonExecutionPayload::V2( + new_payload_request_capella.execution_payload.clone().into() + )]); let response: JsonPayloadStatusV1 = self .rpc_request( @@ -845,31 +852,6 @@ impl HttpJsonRpc { Ok(response.into()) } - // TODO(fulu): switch to v5 endpoint when the EL is ready for Fulu - pub async fn new_payload_v4_fulu( - &self, - new_payload_request_fulu: NewPayloadRequestFulu<'_, E>, - ) -> Result { - let params = json!([ - JsonExecutionPayload::V5(new_payload_request_fulu.execution_payload.clone().into()), - new_payload_request_fulu.versioned_hashes, - new_payload_request_fulu.parent_beacon_block_root, - new_payload_request_fulu - .execution_requests - .get_execution_requests_list(), - ]); - - let response: JsonPayloadStatusV1 = self - .rpc_request( - ENGINE_NEW_PAYLOAD_V4, - params, - ENGINE_NEW_PAYLOAD_TIMEOUT * self.execution_timeout_multiplier, - ) - .await?; - - Ok(response.into()) - } - pub async fn get_payload_v1( &self, payload_id: PayloadId, @@ -967,7 +949,7 @@ impl HttpJsonRpc { let params = json!([JsonPayloadIdRequest::from(payload_id)]); match fork_name { - ForkName::Electra => { + ForkName::Electra | ForkName::Fulu => { let response: JsonGetPayloadResponseV4 = self .rpc_request( ENGINE_GET_PAYLOAD_V4, @@ -986,33 +968,6 @@ impl HttpJsonRpc { } } - pub async fn get_payload_v5( - &self, - fork_name: ForkName, - payload_id: PayloadId, - ) -> Result, Error> { - let params = json!([JsonPayloadIdRequest::from(payload_id)]); - - match fork_name { - ForkName::Fulu => { - let response: JsonGetPayloadResponseV5 = self - .rpc_request( - ENGINE_GET_PAYLOAD_V5, - params, - ENGINE_GET_PAYLOAD_TIMEOUT * self.execution_timeout_multiplier, - ) - .await?; - JsonGetPayloadResponse::V5(response) - .try_into() - .map_err(Error::BadResponse) - } - _ => Err(Error::UnsupportedForkVariant(format!( - "called get_payload_v5 with {}", - fork_name - ))), - } - } - pub async fn forkchoice_updated_v1( &self, forkchoice_state: ForkchoiceState, @@ -1136,7 +1091,6 @@ impl HttpJsonRpc { new_payload_v2: capabilities.contains(ENGINE_NEW_PAYLOAD_V2), new_payload_v3: capabilities.contains(ENGINE_NEW_PAYLOAD_V3), new_payload_v4: capabilities.contains(ENGINE_NEW_PAYLOAD_V4), - new_payload_v5: capabilities.contains(ENGINE_NEW_PAYLOAD_V5), forkchoice_updated_v1: capabilities.contains(ENGINE_FORKCHOICE_UPDATED_V1), forkchoice_updated_v2: capabilities.contains(ENGINE_FORKCHOICE_UPDATED_V2), forkchoice_updated_v3: capabilities.contains(ENGINE_FORKCHOICE_UPDATED_V3), @@ -1148,7 +1102,6 @@ impl HttpJsonRpc { get_payload_v2: capabilities.contains(ENGINE_GET_PAYLOAD_V2), get_payload_v3: capabilities.contains(ENGINE_GET_PAYLOAD_V3), get_payload_v4: capabilities.contains(ENGINE_GET_PAYLOAD_V4), - get_payload_v5: capabilities.contains(ENGINE_GET_PAYLOAD_V5), get_client_version_v1: capabilities.contains(ENGINE_GET_CLIENT_VERSION_V1), get_blobs_v1: capabilities.contains(ENGINE_GET_BLOBS_V1), get_blobs_v2: capabilities.contains(ENGINE_GET_BLOBS_V2), @@ -1258,15 +1211,18 @@ impl HttpJsonRpc { ) -> Result { let engine_capabilities = self.get_engine_capabilities(None).await?; match new_payload_request { - NewPayloadRequest::Bellatrix(_) | NewPayloadRequest::Capella(_) => { + NewPayloadRequest::Bellatrix(new_payload_request_bellatrix) => { + if engine_capabilities.new_payload_v1 { + self.new_payload_v1(new_payload_request_bellatrix).await + } else { + Err(Error::RequiredMethodUnsupported("engine_newPayloadV1")) + } + } + NewPayloadRequest::Capella(new_payload_request_capella) => { if engine_capabilities.new_payload_v2 { - self.new_payload_v2(new_payload_request.into_execution_payload()) - .await - } else if engine_capabilities.new_payload_v1 { - self.new_payload_v1(new_payload_request.into_execution_payload()) - .await + self.new_payload_v2(new_payload_request_capella).await } else { - Err(Error::RequiredMethodUnsupported("engine_newPayload")) + Err(Error::RequiredMethodUnsupported("engine_newPayloadV2")) } } NewPayloadRequest::Deneb(new_payload_request_deneb) => { @@ -1284,14 +1240,6 @@ impl HttpJsonRpc { Err(Error::RequiredMethodUnsupported("engine_newPayloadV4")) } } - NewPayloadRequest::Fulu(new_payload_request_fulu) => { - // TODO(fulu): switch to v5 endpoint when the EL is ready for Fulu - if engine_capabilities.new_payload_v4 { - self.new_payload_v4_fulu(new_payload_request_fulu).await - } else { - Err(Error::RequiredMethodUnsupported("engine_newPayloadV4")) - } - } } } @@ -1320,20 +1268,13 @@ impl HttpJsonRpc { Err(Error::RequiredMethodUnsupported("engine_getPayloadv3")) } } - ForkName::Electra => { + ForkName::Electra | ForkName::Fulu => { if engine_capabilities.get_payload_v4 { self.get_payload_v4(fork_name, payload_id).await } else { Err(Error::RequiredMethodUnsupported("engine_getPayloadv4")) } } - ForkName::Fulu => { - if engine_capabilities.get_payload_v5 { - self.get_payload_v5(fork_name, payload_id).await - } else { - Err(Error::RequiredMethodUnsupported("engine_getPayloadv5")) - } - } ForkName::Base | ForkName::Altair => Err(Error::UnsupportedForkVariant(format!( "called get_payload with {}", fork_name @@ -1760,8 +1701,8 @@ mod test { .assert_request_equals( |client| async move { let _ = client - .new_payload_v1::(ExecutionPayload::Bellatrix( - ExecutionPayloadBellatrix { + .new_payload_v1::(NewPayloadRequestBellatrix { + execution_payload: &ExecutionPayloadBellatrix { parent_hash: ExecutionBlockHash::repeat_byte(0), fee_recipient: Address::repeat_byte(1), state_root: Hash256::repeat_byte(1), @@ -1777,7 +1718,7 @@ mod test { block_hash: ExecutionBlockHash::repeat_byte(1), transactions: vec![].into(), }, - )) + }) .await; }, json!({ @@ -1807,8 +1748,8 @@ mod test { Tester::new(false) .assert_auth_failure(|client| async move { client - .new_payload_v1::(ExecutionPayload::Bellatrix( - ExecutionPayloadBellatrix { + .new_payload_v1::(NewPayloadRequestBellatrix { + execution_payload: &ExecutionPayloadBellatrix { parent_hash: ExecutionBlockHash::repeat_byte(0), fee_recipient: Address::repeat_byte(1), state_root: Hash256::repeat_byte(1), @@ -1824,7 +1765,7 @@ mod test { block_hash: ExecutionBlockHash::repeat_byte(1), transactions: vec![].into(), }, - )) + }) .await }) .await; @@ -2043,7 +1984,7 @@ mod test { // engine_newPayloadV1 REQUEST validation |client| async move { let _ = client - .new_payload_v1::(ExecutionPayload::Bellatrix(ExecutionPayloadBellatrix{ + .new_payload_v1::(NewPayloadRequestBellatrix {execution_payload: &ExecutionPayloadBellatrix{ parent_hash: ExecutionBlockHash::from_str("0x3b8fb240d288781d4aac94d3fd16809ee413bc99294a085798a589dae51ddd4a").unwrap(), fee_recipient: Address::from_str("0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b").unwrap(), state_root: Hash256::from_str("0xca3149fa9e37db08d1cd49c9061db1002ef1cd58db2210f2115c8c989b2bdf45").unwrap(), @@ -2058,7 +1999,7 @@ mod test { base_fee_per_gas: Uint256::from(7), block_hash: ExecutionBlockHash::from_str("0x3559e851470f6e7bbed1db474980683e8c315bfce99b2a6ef47c057c04de7858").unwrap(), transactions: vec![].into(), - })) + }}) .await; }, json!({ @@ -2097,7 +2038,7 @@ mod test { })], |client| async move { let response = client - .new_payload_v1::(ExecutionPayload::Bellatrix(ExecutionPayloadBellatrix::default())) + .new_payload_v1::(NewPayloadRequestBellatrix {execution_payload: &ExecutionPayloadBellatrix::default()}) .await .unwrap(); 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 30d30481eaf..efae7f6d309 100644 --- a/beacon_node/execution_layer/src/engine_api/json_structures.rs +++ b/beacon_node/execution_layer/src/engine_api/json_structures.rs @@ -65,7 +65,7 @@ pub struct JsonPayloadIdResponse { } #[superstruct( - variants(V1, V2, V3, V4, V5), + variants(V1, V2, V3, V4), variant_attributes( derive(Debug, PartialEq, Default, Serialize, Deserialize,), serde(bound = "E: EthSpec", rename_all = "camelCase"), @@ -100,12 +100,12 @@ pub struct JsonExecutionPayload { pub block_hash: ExecutionBlockHash, #[serde(with = "ssz_types::serde_utils::list_of_hex_var_list")] pub transactions: Transactions, - #[superstruct(only(V2, V3, V4, V5))] + #[superstruct(only(V2, V3, V4))] pub withdrawals: VariableList, - #[superstruct(only(V3, V4, V5))] + #[superstruct(only(V3, V4))] #[serde(with = "serde_utils::u64_hex_be")] pub blob_gas_used: u64, - #[superstruct(only(V3, V4, V5))] + #[superstruct(only(V3, V4))] #[serde(with = "serde_utils::u64_hex_be")] pub excess_blob_gas: u64, } @@ -130,8 +130,8 @@ impl From> for JsonExecutionPayloadV1 From> for JsonExecutionPayloadV2 { - fn from(payload: ExecutionPayloadCapella) -> Self { +impl From> for JsonExecutionPayloadV2 { + fn from(payload: ExecutionPayloadBellatrix) -> Self { JsonExecutionPayloadV2 { parent_hash: payload.parent_hash, fee_recipient: payload.fee_recipient, @@ -147,18 +147,13 @@ impl From> for JsonExecutionPayloadV2 base_fee_per_gas: payload.base_fee_per_gas, block_hash: payload.block_hash, transactions: payload.transactions, - withdrawals: payload - .withdrawals - .into_iter() - .map(Into::into) - .collect::>() - .into(), + withdrawals: VariableList::default(), } } } -impl From> for JsonExecutionPayloadV3 { - fn from(payload: ExecutionPayloadDeneb) -> Self { - JsonExecutionPayloadV3 { +impl From> for JsonExecutionPayloadV2 { + fn from(payload: ExecutionPayloadCapella) -> Self { + JsonExecutionPayloadV2 { parent_hash: payload.parent_hash, fee_recipient: payload.fee_recipient, state_root: payload.state_root, @@ -179,15 +174,12 @@ impl From> for JsonExecutionPayloadV3 { .map(Into::into) .collect::>() .into(), - blob_gas_used: payload.blob_gas_used, - excess_blob_gas: payload.excess_blob_gas, } } } - -impl From> for JsonExecutionPayloadV4 { - fn from(payload: ExecutionPayloadElectra) -> Self { - JsonExecutionPayloadV4 { +impl From> for JsonExecutionPayloadV3 { + fn from(payload: ExecutionPayloadDeneb) -> Self { + JsonExecutionPayloadV3 { parent_hash: payload.parent_hash, fee_recipient: payload.fee_recipient, state_root: payload.state_root, @@ -214,9 +206,9 @@ impl From> for JsonExecutionPayloadV4 } } -impl From> for JsonExecutionPayloadV5 { - fn from(payload: ExecutionPayloadFulu) -> Self { - JsonExecutionPayloadV5 { +impl From> for JsonExecutionPayloadV4 { + fn from(payload: ExecutionPayloadDeneb) -> Self { + JsonExecutionPayloadV4 { parent_hash: payload.parent_hash, fee_recipient: payload.fee_recipient, state_root: payload.state_root, @@ -243,18 +235,6 @@ impl From> for JsonExecutionPayloadV5 { } } -impl From> for JsonExecutionPayload { - fn from(execution_payload: ExecutionPayload) -> Self { - match execution_payload { - ExecutionPayload::Bellatrix(payload) => JsonExecutionPayload::V1(payload.into()), - ExecutionPayload::Capella(payload) => JsonExecutionPayload::V2(payload.into()), - ExecutionPayload::Deneb(payload) => JsonExecutionPayload::V3(payload.into()), - ExecutionPayload::Electra(payload) => JsonExecutionPayload::V4(payload.into()), - ExecutionPayload::Fulu(payload) => JsonExecutionPayload::V5(payload.into()), - } - } -} - impl From> for ExecutionPayloadBellatrix { fn from(payload: JsonExecutionPayloadV1) -> Self { ExecutionPayloadBellatrix { @@ -331,38 +311,9 @@ impl From> for ExecutionPayloadDeneb { } } -impl From> for ExecutionPayloadElectra { +impl From> for ExecutionPayloadDeneb { fn from(payload: JsonExecutionPayloadV4) -> Self { - ExecutionPayloadElectra { - parent_hash: payload.parent_hash, - fee_recipient: payload.fee_recipient, - state_root: payload.state_root, - receipts_root: payload.receipts_root, - logs_bloom: payload.logs_bloom, - prev_randao: payload.prev_randao, - block_number: payload.block_number, - gas_limit: payload.gas_limit, - gas_used: payload.gas_used, - timestamp: payload.timestamp, - extra_data: payload.extra_data, - base_fee_per_gas: payload.base_fee_per_gas, - block_hash: payload.block_hash, - transactions: payload.transactions, - withdrawals: payload - .withdrawals - .into_iter() - .map(Into::into) - .collect::>() - .into(), - blob_gas_used: payload.blob_gas_used, - excess_blob_gas: payload.excess_blob_gas, - } - } -} - -impl From> for ExecutionPayloadFulu { - fn from(payload: JsonExecutionPayloadV5) -> Self { - ExecutionPayloadFulu { + ExecutionPayloadDeneb { parent_hash: payload.parent_hash, fee_recipient: payload.fee_recipient, state_root: payload.state_root, @@ -395,8 +346,7 @@ impl From> for ExecutionPayload { JsonExecutionPayload::V1(payload) => ExecutionPayload::Bellatrix(payload.into()), JsonExecutionPayload::V2(payload) => ExecutionPayload::Capella(payload.into()), JsonExecutionPayload::V3(payload) => ExecutionPayload::Deneb(payload.into()), - JsonExecutionPayload::V4(payload) => ExecutionPayload::Electra(payload.into()), - JsonExecutionPayload::V5(payload) => ExecutionPayload::Fulu(payload.into()), + JsonExecutionPayload::V4(payload) => ExecutionPayload::Deneb(payload.into()), } } } @@ -482,7 +432,7 @@ impl TryFrom for ExecutionRequests { } #[superstruct( - variants(V1, V2, V3, V4, V5), + variants(V1, V2, V3, V4), variant_attributes( derive(Debug, PartialEq, Serialize, Deserialize), serde(bound = "E: EthSpec", rename_all = "camelCase") @@ -501,15 +451,13 @@ pub struct JsonGetPayloadResponse { pub execution_payload: JsonExecutionPayloadV3, #[superstruct(only(V4), partial_getter(rename = "execution_payload_v4"))] pub execution_payload: JsonExecutionPayloadV4, - #[superstruct(only(V5), partial_getter(rename = "execution_payload_v5"))] - pub execution_payload: JsonExecutionPayloadV5, #[serde(with = "serde_utils::u256_hex_be")] pub block_value: Uint256, - #[superstruct(only(V3, V4, V5))] + #[superstruct(only(V3, V4))] pub blobs_bundle: JsonBlobsBundleV1, - #[superstruct(only(V3, V4, V5))] + #[superstruct(only(V3, V4))] pub should_override_builder: bool, - #[superstruct(only(V4, V5))] + #[superstruct(only(V4))] pub execution_requests: JsonExecutionRequests, } @@ -548,17 +496,6 @@ impl TryFrom> for GetPayloadResponse { })?, })) } - JsonGetPayloadResponse::V5(response) => { - Ok(GetPayloadResponse::Fulu(GetPayloadResponseFulu { - execution_payload: response.execution_payload.into(), - block_value: response.block_value, - blobs_bundle: response.blobs_bundle.into(), - should_override_builder: response.should_override_builder, - requests: response.execution_requests.try_into().map_err(|e| { - format!("Failed to convert json to execution requests {:?}", e) - })?, - })) - } } } } diff --git a/beacon_node/execution_layer/src/engine_api/new_payload_request.rs b/beacon_node/execution_layer/src/engine_api/new_payload_request.rs index 23610c9ae45..ad679c5a3dd 100644 --- a/beacon_node/execution_layer/src/engine_api/new_payload_request.rs +++ b/beacon_node/execution_layer/src/engine_api/new_payload_request.rs @@ -8,12 +8,11 @@ use types::{ ExecutionPayloadRef, Hash256, VersionedHash, }; use types::{ - ExecutionPayloadBellatrix, ExecutionPayloadCapella, ExecutionPayloadDeneb, - ExecutionPayloadElectra, ExecutionPayloadFulu, ExecutionRequests, + ExecutionPayloadBellatrix, ExecutionPayloadCapella, ExecutionPayloadDeneb, ExecutionRequests, }; #[superstruct( - variants(Bellatrix, Capella, Deneb, Electra, Fulu), + variants(Bellatrix, Capella, Deneb, Electra), variant_attributes(derive(Clone, Debug, PartialEq),), map_into(ExecutionPayload), map_ref_into(ExecutionPayloadRef), @@ -38,14 +37,12 @@ pub struct NewPayloadRequest<'block, E: EthSpec> { #[superstruct(only(Deneb), partial_getter(rename = "execution_payload_deneb"))] pub execution_payload: &'block ExecutionPayloadDeneb, #[superstruct(only(Electra), partial_getter(rename = "execution_payload_electra"))] - pub execution_payload: &'block ExecutionPayloadElectra, - #[superstruct(only(Fulu), partial_getter(rename = "execution_payload_fulu"))] - pub execution_payload: &'block ExecutionPayloadFulu, - #[superstruct(only(Deneb, Electra, Fulu))] + pub execution_payload: &'block ExecutionPayloadDeneb, + #[superstruct(only(Deneb, Electra))] pub versioned_hashes: Vec, - #[superstruct(only(Deneb, Electra, Fulu))] + #[superstruct(only(Deneb, Electra))] pub parent_beacon_block_root: Hash256, - #[superstruct(only(Electra, Fulu))] + #[superstruct(only(Electra))] pub execution_requests: &'block ExecutionRequests, } @@ -56,7 +53,6 @@ impl<'block, E: EthSpec> NewPayloadRequest<'block, E> { Self::Capella(payload) => payload.execution_payload.parent_hash, Self::Deneb(payload) => payload.execution_payload.parent_hash, Self::Electra(payload) => payload.execution_payload.parent_hash, - Self::Fulu(payload) => payload.execution_payload.parent_hash, } } @@ -66,7 +62,6 @@ impl<'block, E: EthSpec> NewPayloadRequest<'block, E> { Self::Capella(payload) => payload.execution_payload.block_hash, Self::Deneb(payload) => payload.execution_payload.block_hash, Self::Electra(payload) => payload.execution_payload.block_hash, - Self::Fulu(payload) => payload.execution_payload.block_hash, } } @@ -76,7 +71,6 @@ impl<'block, E: EthSpec> NewPayloadRequest<'block, E> { Self::Capella(payload) => payload.execution_payload.block_number, Self::Deneb(payload) => payload.execution_payload.block_number, Self::Electra(payload) => payload.execution_payload.block_number, - Self::Fulu(payload) => payload.execution_payload.block_number, } } @@ -85,8 +79,7 @@ impl<'block, E: EthSpec> NewPayloadRequest<'block, E> { Self::Bellatrix(request) => ExecutionPayloadRef::Bellatrix(request.execution_payload), Self::Capella(request) => ExecutionPayloadRef::Capella(request.execution_payload), Self::Deneb(request) => ExecutionPayloadRef::Deneb(request.execution_payload), - Self::Electra(request) => ExecutionPayloadRef::Electra(request.execution_payload), - Self::Fulu(request) => ExecutionPayloadRef::Fulu(request.execution_payload), + Self::Electra(request) => ExecutionPayloadRef::Deneb(request.execution_payload), } } @@ -97,8 +90,7 @@ impl<'block, E: EthSpec> NewPayloadRequest<'block, E> { } Self::Capella(request) => ExecutionPayload::Capella(request.execution_payload.clone()), Self::Deneb(request) => ExecutionPayload::Deneb(request.execution_payload.clone()), - Self::Electra(request) => ExecutionPayload::Electra(request.execution_payload.clone()), - Self::Fulu(request) => ExecutionPayload::Fulu(request.execution_payload.clone()), + Self::Electra(request) => ExecutionPayload::Deneb(request.execution_payload.clone()), } } @@ -202,7 +194,7 @@ impl<'a, E: EthSpec> TryFrom> for NewPayloadRequest<'a, E> parent_beacon_block_root: block_ref.parent_root, execution_requests: &block_ref.body.execution_requests, })), - BeaconBlockRef::Fulu(block_ref) => Ok(Self::Fulu(NewPayloadRequestFulu { + BeaconBlockRef::Fulu(block_ref) => Ok(Self::Electra(NewPayloadRequestElectra { execution_payload: &block_ref.body.execution_payload.execution_payload, versioned_hashes: block_ref .body @@ -231,8 +223,6 @@ impl<'a, E: EthSpec> TryFrom> for NewPayloadRequest<' execution_payload: payload, })), ExecutionPayloadRef::Deneb(_) => Err(Self::Error::IncorrectStateVariant), - ExecutionPayloadRef::Electra(_) => Err(Self::Error::IncorrectStateVariant), - ExecutionPayloadRef::Fulu(_) => Err(Self::Error::IncorrectStateVariant), } } } diff --git a/beacon_node/execution_layer/src/lib.rs b/beacon_node/execution_layer/src/lib.rs index bfde2be17b0..f08f8bf5905 100644 --- a/beacon_node/execution_layer/src/lib.rs +++ b/beacon_node/execution_layer/src/lib.rs @@ -55,8 +55,7 @@ use types::{ }; use types::{ BeaconStateError, BlindedPayload, ChainSpec, Epoch, ExecPayload, ExecutionPayloadBellatrix, - ExecutionPayloadCapella, ExecutionPayloadElectra, ExecutionPayloadFulu, FullPayload, - ProposerPreparationData, PublicKeyBytes, Signature, Slot, + ExecutionPayloadCapella, FullPayload, ProposerPreparationData, PublicKeyBytes, Signature, Slot, }; mod block_hash; @@ -118,14 +117,14 @@ impl TryFrom> for ProvenancedPayload BlockProposalContents::PayloadAndBlobs { - payload: ExecutionPayloadHeader::Electra(builder_bid.header).into(), + payload: ExecutionPayloadHeader::Deneb(builder_bid.header).into(), block_value: builder_bid.value, kzg_commitments: builder_bid.blob_kzg_commitments, blobs_and_proofs: None, requests: Some(builder_bid.execution_requests), }, BuilderBid::Fulu(builder_bid) => BlockProposalContents::PayloadAndBlobs { - payload: ExecutionPayloadHeader::Fulu(builder_bid.header).into(), + payload: ExecutionPayloadHeader::Deneb(builder_bid.header).into(), block_value: builder_bid.value, kzg_commitments: builder_bid.blob_kzg_commitments, blobs_and_proofs: None, @@ -1818,9 +1817,9 @@ impl ExecutionLayer { let payload = match fork { ForkName::Bellatrix => ExecutionPayloadBellatrix::default().into(), ForkName::Capella => ExecutionPayloadCapella::default().into(), - ForkName::Deneb => ExecutionPayloadDeneb::default().into(), - ForkName::Electra => ExecutionPayloadElectra::default().into(), - ForkName::Fulu => ExecutionPayloadFulu::default().into(), + ForkName::Deneb | ForkName::Electra | ForkName::Fulu => { + ExecutionPayloadDeneb::default().into() + } ForkName::Base | ForkName::Altair => { return Err(Error::InvalidForkForPayload); } 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 aefb6d67503..f6e749b688a 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 @@ -19,9 +19,8 @@ use tree_hash::TreeHash; use tree_hash_derive::TreeHash; use types::{ Blob, ChainSpec, EthSpec, ExecutionBlockHash, ExecutionPayload, ExecutionPayloadBellatrix, - ExecutionPayloadCapella, ExecutionPayloadDeneb, ExecutionPayloadElectra, ExecutionPayloadFulu, - ExecutionPayloadHeader, FixedBytesExtended, ForkName, Hash256, KzgProofs, Transaction, - Transactions, Uint256, + ExecutionPayloadCapella, ExecutionPayloadDeneb, ExecutionPayloadHeader, FixedBytesExtended, + ForkName, Hash256, KzgProofs, Transaction, Transactions, Uint256, }; use super::DEFAULT_TERMINAL_BLOCK; @@ -589,6 +588,7 @@ impl ExecutionBlockGenerator { id: PayloadId, attributes: &PayloadAttributes, ) -> Result, String> { + let fork_name = self.get_fork_at_timestamp(attributes.timestamp()); let mut execution_payload = match attributes { PayloadAttributes::V1(pa) => ExecutionPayload::Bellatrix(ExecutionPayloadBellatrix { parent_hash: head_block_hash, @@ -606,7 +606,7 @@ impl ExecutionBlockGenerator { block_hash: ExecutionBlockHash::zero(), transactions: vec![].into(), }), - PayloadAttributes::V2(pa) => match self.get_fork_at_timestamp(pa.timestamp) { + PayloadAttributes::V2(pa) => match fork_name { ForkName::Bellatrix => ExecutionPayload::Bellatrix(ExecutionPayloadBellatrix { parent_hash: head_block_hash, fee_recipient: pa.suggested_fee_recipient, @@ -642,69 +642,32 @@ impl ExecutionBlockGenerator { }), _ => unreachable!(), }, - PayloadAttributes::V3(pa) => match self.get_fork_at_timestamp(pa.timestamp) { - ForkName::Deneb => ExecutionPayload::Deneb(ExecutionPayloadDeneb { - parent_hash: head_block_hash, - fee_recipient: pa.suggested_fee_recipient, - receipts_root: Hash256::repeat_byte(42), - state_root: Hash256::repeat_byte(43), - logs_bloom: vec![0; 256].into(), - prev_randao: pa.prev_randao, - block_number: parent.block_number() + 1, - gas_limit: DEFAULT_GAS_LIMIT, - gas_used: GAS_USED, - timestamp: pa.timestamp, - extra_data: mock_el_extra_data::(), - base_fee_per_gas: Uint256::from(1u64), - block_hash: ExecutionBlockHash::zero(), - transactions: vec![].into(), - withdrawals: pa.withdrawals.clone().into(), - blob_gas_used: 0, - excess_blob_gas: 0, - }), - ForkName::Electra => ExecutionPayload::Electra(ExecutionPayloadElectra { - parent_hash: head_block_hash, - fee_recipient: pa.suggested_fee_recipient, - receipts_root: Hash256::repeat_byte(42), - state_root: Hash256::repeat_byte(43), - logs_bloom: vec![0; 256].into(), - prev_randao: pa.prev_randao, - block_number: parent.block_number() + 1, - gas_limit: DEFAULT_GAS_LIMIT, - gas_used: GAS_USED, - timestamp: pa.timestamp, - extra_data: mock_el_extra_data::(), - base_fee_per_gas: Uint256::from(1u64), - block_hash: ExecutionBlockHash::zero(), - transactions: vec![].into(), - withdrawals: pa.withdrawals.clone().into(), - blob_gas_used: 0, - excess_blob_gas: 0, - }), - ForkName::Fulu => ExecutionPayload::Fulu(ExecutionPayloadFulu { - parent_hash: head_block_hash, - fee_recipient: pa.suggested_fee_recipient, - receipts_root: Hash256::repeat_byte(42), - state_root: Hash256::repeat_byte(43), - logs_bloom: vec![0; 256].into(), - prev_randao: pa.prev_randao, - block_number: parent.block_number() + 1, - gas_limit: DEFAULT_GAS_LIMIT, - gas_used: GAS_USED, - timestamp: pa.timestamp, - extra_data: "block gen was here".as_bytes().to_vec().into(), - base_fee_per_gas: Uint256::from(1u64), - block_hash: ExecutionBlockHash::zero(), - transactions: vec![].into(), - withdrawals: pa.withdrawals.clone().into(), - blob_gas_used: 0, - excess_blob_gas: 0, - }), + PayloadAttributes::V3(pa) => match fork_name { + ForkName::Deneb | ForkName::Electra | ForkName::Fulu => { + ExecutionPayload::Deneb(ExecutionPayloadDeneb { + parent_hash: head_block_hash, + fee_recipient: pa.suggested_fee_recipient, + receipts_root: Hash256::repeat_byte(42), + state_root: Hash256::repeat_byte(43), + logs_bloom: vec![0; 256].into(), + prev_randao: pa.prev_randao, + block_number: parent.block_number() + 1, + gas_limit: DEFAULT_GAS_LIMIT, + gas_used: GAS_USED, + timestamp: pa.timestamp, + extra_data: mock_el_extra_data::(), + base_fee_per_gas: Uint256::from(1u64), + block_hash: ExecutionBlockHash::zero(), + transactions: vec![].into(), + withdrawals: pa.withdrawals.clone().into(), + blob_gas_used: 0, + excess_blob_gas: 0, + }) + } _ => unreachable!(), }, }; - let fork_name = execution_payload.fork_name(); if fork_name.deneb_enabled() { // get random number between 0 and Max Blobs let mut rng = self.rng.lock(); @@ -864,24 +827,12 @@ pub fn generate_genesis_header( *header.transactions_root_mut() = empty_transactions_root; Some(header) } - ForkName::Deneb => { + ForkName::Deneb | ForkName::Electra | ForkName::Fulu => { let mut header = ExecutionPayloadHeader::Deneb(<_>::default()); *header.block_hash_mut() = genesis_block_hash.unwrap_or_default(); *header.transactions_root_mut() = empty_transactions_root; Some(header) } - ForkName::Electra => { - let mut header = ExecutionPayloadHeader::Electra(<_>::default()); - *header.block_hash_mut() = genesis_block_hash.unwrap_or_default(); - *header.transactions_root_mut() = empty_transactions_root; - Some(header) - } - ForkName::Fulu => { - let mut header = ExecutionPayloadHeader::Fulu(<_>::default()); - *header.block_hash_mut() = genesis_block_hash.unwrap_or_default(); - *header.transactions_root_mut() = empty_transactions_root; - Some(header) - } } } 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 70c21afed45..e3c6521e533 100644 --- a/beacon_node/execution_layer/src/test_utils/handle_rpc.rs +++ b/beacon_node/execution_layer/src/test_utils/handle_rpc.rs @@ -99,8 +99,7 @@ pub async fn handle_rpc( ENGINE_NEW_PAYLOAD_V1 | ENGINE_NEW_PAYLOAD_V2 | ENGINE_NEW_PAYLOAD_V3 - | ENGINE_NEW_PAYLOAD_V4 - | ENGINE_NEW_PAYLOAD_V5 => { + | ENGINE_NEW_PAYLOAD_V4 => { let request = match method { ENGINE_NEW_PAYLOAD_V1 => JsonExecutionPayload::V1( get_param::>(params, 0) @@ -122,9 +121,6 @@ pub async fn handle_rpc( ENGINE_NEW_PAYLOAD_V4 => get_param::>(params, 0) .map(|jep| JsonExecutionPayload::V4(jep)) .map_err(|s| (s, BAD_PARAMS_ERROR_CODE))?, - ENGINE_NEW_PAYLOAD_V5 => get_param::>(params, 0) - .map(|jep| JsonExecutionPayload::V5(jep)) - .map_err(|s| (s, BAD_PARAMS_ERROR_CODE))?, _ => unreachable!(), }; @@ -188,7 +184,7 @@ pub async fn handle_rpc( )); } } - ForkName::Electra => { + ForkName::Electra | ForkName::Fulu => { if method == ENGINE_NEW_PAYLOAD_V1 || method == ENGINE_NEW_PAYLOAD_V2 || method == ENGINE_NEW_PAYLOAD_V3 @@ -226,56 +222,6 @@ pub async fn handle_rpc( )); } } - ForkName::Fulu => { - if method == ENGINE_NEW_PAYLOAD_V1 - || method == ENGINE_NEW_PAYLOAD_V2 - || method == ENGINE_NEW_PAYLOAD_V3 - // TODO(fulu): Uncomment this once v5 method is ready for Fulu - // || method == ENGINE_NEW_PAYLOAD_V4 - { - return Err(( - format!("{} called after Fulu fork!", method), - GENERIC_ERROR_CODE, - )); - } - if matches!(request, JsonExecutionPayload::V1(_)) { - return Err(( - format!( - "{} called with `ExecutionPayloadV1` after Fulu fork!", - method - ), - GENERIC_ERROR_CODE, - )); - } - if matches!(request, JsonExecutionPayload::V2(_)) { - return Err(( - format!( - "{} called with `ExecutionPayloadV2` after Fulu fork!", - method - ), - GENERIC_ERROR_CODE, - )); - } - if matches!(request, JsonExecutionPayload::V3(_)) { - return Err(( - format!( - "{} called with `ExecutionPayloadV3` after Fulu fork!", - method - ), - GENERIC_ERROR_CODE, - )); - } - // TODO(fulu): remove once we switch to v5 - // if matches!(request, JsonExecutionPayload::V4(_)) { - // return Err(( - // format!( - // "{} called with `ExecutionPayloadV4` after Fulu fork!", - // method - // ), - // GENERIC_ERROR_CODE, - // )); - // } - } _ => unreachable!(), }; @@ -314,8 +260,7 @@ pub async fn handle_rpc( ENGINE_GET_PAYLOAD_V1 | ENGINE_GET_PAYLOAD_V2 | ENGINE_GET_PAYLOAD_V3 - | ENGINE_GET_PAYLOAD_V4 - | ENGINE_GET_PAYLOAD_V5 => { + | ENGINE_GET_PAYLOAD_V4 => { let request: JsonPayloadIdRequest = get_param(params, 0).map_err(|s| (s, BAD_PARAMS_ERROR_CODE))?; let id = request.into(); @@ -333,143 +278,100 @@ pub async fn handle_rpc( let maybe_blobs = ctx.execution_block_generator.write().get_blobs_bundle(&id); - // validate method called correctly according to shanghai fork time - if ctx + let fork_name = ctx .execution_block_generator .read() - .get_fork_at_timestamp(response.timestamp()) - == ForkName::Capella - && method == ENGINE_GET_PAYLOAD_V1 - { - return Err(( - format!("{} called after Capella fork!", method), - FORK_REQUEST_MISMATCH_ERROR_CODE, - )); - } - // validate method called correctly according to cancun fork time - if ctx - .execution_block_generator - .read() - .get_fork_at_timestamp(response.timestamp()) - == ForkName::Deneb - && (method == ENGINE_GET_PAYLOAD_V1 || method == ENGINE_GET_PAYLOAD_V2) - { - return Err(( - format!("{} called after Deneb fork!", method), - FORK_REQUEST_MISMATCH_ERROR_CODE, - )); - } - // validate method called correctly according to prague fork time - if ctx - .execution_block_generator - .read() - .get_fork_at_timestamp(response.timestamp()) - == ForkName::Electra - && (method == ENGINE_GET_PAYLOAD_V1 - || method == ENGINE_GET_PAYLOAD_V2 - || method == ENGINE_GET_PAYLOAD_V3) - { - return Err(( - format!("{} called after Electra fork!", method), - FORK_REQUEST_MISMATCH_ERROR_CODE, - )); - } + .get_fork_at_timestamp(response.timestamp()); - // validate method called correctly according to fulu fork time - if ctx - .execution_block_generator - .read() - .get_fork_at_timestamp(response.timestamp()) - == ForkName::Fulu - && (method == ENGINE_GET_PAYLOAD_V1 - || method == ENGINE_GET_PAYLOAD_V2 - || method == ENGINE_GET_PAYLOAD_V3 - || method == ENGINE_GET_PAYLOAD_V4) - { - return Err(( - format!("{} called after Fulu fork!", method), - FORK_REQUEST_MISMATCH_ERROR_CODE, - )); - } - - match method { - ENGINE_GET_PAYLOAD_V1 => { - Ok(serde_json::to_value(JsonExecutionPayload::from(response)).unwrap()) - } - ENGINE_GET_PAYLOAD_V2 => Ok(match JsonExecutionPayload::from(response) { - JsonExecutionPayload::V1(execution_payload) => { - serde_json::to_value(JsonGetPayloadResponseV1 { - execution_payload, - block_value: Uint256::from(DEFAULT_MOCK_EL_PAYLOAD_VALUE_WEI), - }) - .unwrap() + // Validate method depending on fork. + match fork_name { + ForkName::Capella => { + if method == ENGINE_GET_PAYLOAD_V1 { + return Err(( + format!("{} called after Capella fork!", method), + FORK_REQUEST_MISMATCH_ERROR_CODE, + )); } - JsonExecutionPayload::V2(execution_payload) => { - serde_json::to_value(JsonGetPayloadResponseV2 { - execution_payload, - block_value: Uint256::from(DEFAULT_MOCK_EL_PAYLOAD_VALUE_WEI), - }) - .unwrap() + } + ForkName::Deneb => { + if method == ENGINE_GET_PAYLOAD_V1 || method == ENGINE_GET_PAYLOAD_V2 { + return Err(( + format!("{} called after Deneb fork!", method), + FORK_REQUEST_MISMATCH_ERROR_CODE, + )); } - _ => unreachable!(), - }), - // From v3 onwards, we use the getPayload version only for the corresponding - // ExecutionPayload version. So we return an error if the ExecutionPayload version - // we get does not correspond to the getPayload version. - ENGINE_GET_PAYLOAD_V3 => Ok(match JsonExecutionPayload::from(response) { - JsonExecutionPayload::V3(execution_payload) => { - serde_json::to_value(JsonGetPayloadResponseV3 { - execution_payload, - block_value: Uint256::from(DEFAULT_MOCK_EL_PAYLOAD_VALUE_WEI), - blobs_bundle: maybe_blobs - .ok_or(( - "No blobs returned despite V3 Payload".to_string(), - GENERIC_ERROR_CODE, - ))? - .into(), - should_override_builder: false, - }) - .unwrap() + } + ForkName::Electra | ForkName::Fulu => { + if method == ENGINE_GET_PAYLOAD_V1 + || method == ENGINE_GET_PAYLOAD_V2 + || method == ENGINE_GET_PAYLOAD_V3 + { + return Err(( + format!("{} called after Electra fork!", method), + FORK_REQUEST_MISMATCH_ERROR_CODE, + )); } - _ => unreachable!(), - }), - ENGINE_GET_PAYLOAD_V4 => Ok(match JsonExecutionPayload::from(response) { - JsonExecutionPayload::V4(execution_payload) => { - serde_json::to_value(JsonGetPayloadResponseV4 { - execution_payload, + } + _ => {} + } + + match method { + ENGINE_GET_PAYLOAD_V1 => Ok(serde_json::to_value(JsonGetPayloadResponseV1 { + execution_payload: JsonExecutionPayloadV1::from( + response.as_bellatrix().unwrap().clone(), + ), + block_value: Uint256::from(DEFAULT_MOCK_EL_PAYLOAD_VALUE_WEI), + }) + .unwrap()), + ENGINE_GET_PAYLOAD_V2 => { + if let Ok(capella_payload) = response.as_capella() { + Ok(serde_json::to_value(JsonGetPayloadResponseV2 { + execution_payload: JsonExecutionPayloadV2::from( + capella_payload.clone(), + ), block_value: Uint256::from(DEFAULT_MOCK_EL_PAYLOAD_VALUE_WEI), - blobs_bundle: maybe_blobs - .ok_or(( - "No blobs returned despite V4 Payload".to_string(), - GENERIC_ERROR_CODE, - ))? - .into(), - should_override_builder: false, - // TODO(electra): add EL requests in mock el - execution_requests: Default::default(), }) - .unwrap() - } - _ => unreachable!(), - }), - ENGINE_GET_PAYLOAD_V5 => Ok(match JsonExecutionPayload::from(response) { - JsonExecutionPayload::V5(execution_payload) => { - serde_json::to_value(JsonGetPayloadResponseV5 { - execution_payload, + .unwrap()) + } else { + Ok(serde_json::to_value(JsonGetPayloadResponseV2 { + execution_payload: JsonExecutionPayloadV2::from( + response.as_bellatrix().unwrap().clone(), + ), block_value: Uint256::from(DEFAULT_MOCK_EL_PAYLOAD_VALUE_WEI), - blobs_bundle: maybe_blobs - .ok_or(( - "No blobs returned despite V5 Payload".to_string(), - GENERIC_ERROR_CODE, - ))? - .into(), - should_override_builder: false, - execution_requests: Default::default(), }) - .unwrap() + .unwrap()) } - _ => unreachable!(), - }), + } + ENGINE_GET_PAYLOAD_V3 => Ok(serde_json::to_value(JsonGetPayloadResponseV3 { + execution_payload: JsonExecutionPayloadV3::from( + response.as_deneb().unwrap().clone(), + ), + block_value: Uint256::from(DEFAULT_MOCK_EL_PAYLOAD_VALUE_WEI), + blobs_bundle: maybe_blobs + .ok_or(( + "No blobs returned despite V3 Payload".to_string(), + GENERIC_ERROR_CODE, + ))? + .into(), + should_override_builder: false, + }) + .unwrap()), + ENGINE_GET_PAYLOAD_V4 => Ok(serde_json::to_value(JsonGetPayloadResponseV4 { + execution_payload: JsonExecutionPayloadV4::from( + response.as_deneb().unwrap().clone(), + ), + block_value: Uint256::from(DEFAULT_MOCK_EL_PAYLOAD_VALUE_WEI), + blobs_bundle: maybe_blobs + .ok_or(( + "No blobs returned despite V4 Payload".to_string(), + GENERIC_ERROR_CODE, + ))? + .into(), + should_override_builder: false, + // TODO(electra): add EL requests in mock el + execution_requests: Default::default(), + }) + .unwrap()), _ => unreachable!(), } } diff --git a/beacon_node/execution_layer/src/test_utils/mock_builder.rs b/beacon_node/execution_layer/src/test_utils/mock_builder.rs index 751e99494ce..ff31de2e75f 100644 --- a/beacon_node/execution_layer/src/test_utils/mock_builder.rs +++ b/beacon_node/execution_layer/src/test_utils/mock_builder.rs @@ -109,12 +109,6 @@ impl BidStuff for BuilderBid { ExecutionPayloadHeaderRefMut::Deneb(header) => { header.fee_recipient = fee_recipient; } - ExecutionPayloadHeaderRefMut::Electra(header) => { - header.fee_recipient = fee_recipient; - } - ExecutionPayloadHeaderRefMut::Fulu(header) => { - header.fee_recipient = fee_recipient; - } } } @@ -129,12 +123,6 @@ impl BidStuff for BuilderBid { ExecutionPayloadHeaderRefMut::Deneb(header) => { header.gas_limit = gas_limit; } - ExecutionPayloadHeaderRefMut::Electra(header) => { - header.gas_limit = gas_limit; - } - ExecutionPayloadHeaderRefMut::Fulu(header) => { - header.gas_limit = gas_limit; - } } } @@ -153,12 +141,6 @@ impl BidStuff for BuilderBid { ExecutionPayloadHeaderRefMut::Deneb(header) => { header.parent_hash = ExecutionBlockHash::from_root(parent_hash); } - ExecutionPayloadHeaderRefMut::Electra(header) => { - header.parent_hash = ExecutionBlockHash::from_root(parent_hash); - } - ExecutionPayloadHeaderRefMut::Fulu(header) => { - header.parent_hash = ExecutionBlockHash::from_root(parent_hash); - } } } @@ -173,12 +155,6 @@ impl BidStuff for BuilderBid { ExecutionPayloadHeaderRefMut::Deneb(header) => { header.prev_randao = prev_randao; } - ExecutionPayloadHeaderRefMut::Electra(header) => { - header.prev_randao = prev_randao; - } - ExecutionPayloadHeaderRefMut::Fulu(header) => { - header.prev_randao = prev_randao; - } } } @@ -193,12 +169,6 @@ impl BidStuff for BuilderBid { ExecutionPayloadHeaderRefMut::Deneb(header) => { header.block_number = block_number; } - ExecutionPayloadHeaderRefMut::Electra(header) => { - header.block_number = block_number; - } - ExecutionPayloadHeaderRefMut::Fulu(header) => { - header.block_number = block_number; - } } } @@ -213,12 +183,6 @@ impl BidStuff for BuilderBid { ExecutionPayloadHeaderRefMut::Deneb(header) => { header.timestamp = timestamp; } - ExecutionPayloadHeaderRefMut::Electra(header) => { - header.timestamp = timestamp; - } - ExecutionPayloadHeaderRefMut::Fulu(header) => { - header.timestamp = timestamp; - } } } @@ -233,12 +197,6 @@ impl BidStuff for BuilderBid { ExecutionPayloadHeaderRefMut::Deneb(header) => { header.withdrawals_root = withdrawals_root; } - ExecutionPayloadHeaderRefMut::Electra(header) => { - header.withdrawals_root = withdrawals_root; - } - ExecutionPayloadHeaderRefMut::Fulu(header) => { - header.withdrawals_root = withdrawals_root; - } } } @@ -264,14 +222,6 @@ impl BidStuff for BuilderBid { header.extra_data = extra_data; header.block_hash = ExecutionBlockHash::from_root(header.tree_hash_root()); } - ExecutionPayloadHeaderRefMut::Electra(header) => { - header.extra_data = extra_data; - header.block_hash = ExecutionBlockHash::from_root(header.tree_hash_root()); - } - ExecutionPayloadHeaderRefMut::Fulu(header) => { - header.extra_data = extra_data; - header.block_hash = ExecutionBlockHash::from_root(header.tree_hash_root()); - } } } } @@ -542,7 +492,7 @@ impl MockBuilder { match fork { ForkName::Fulu => BuilderBid::Fulu(BuilderBidFulu { header: payload - .as_fulu() + .as_deneb() .map_err(|_| "incorrect payload variant".to_string())? .into(), blob_kzg_commitments: maybe_blobs_bundle @@ -554,7 +504,7 @@ impl MockBuilder { }), ForkName::Electra => BuilderBid::Electra(BuilderBidElectra { header: payload - .as_electra() + .as_deneb() .map_err(|_| "incorrect payload variant".to_string())? .into(), blob_kzg_commitments: maybe_blobs_bundle diff --git a/beacon_node/execution_layer/src/test_utils/mod.rs b/beacon_node/execution_layer/src/test_utils/mod.rs index 245aa71a157..6551d993809 100644 --- a/beacon_node/execution_layer/src/test_utils/mod.rs +++ b/beacon_node/execution_layer/src/test_utils/mod.rs @@ -45,7 +45,6 @@ pub const DEFAULT_ENGINE_CAPABILITIES: EngineCapabilities = EngineCapabilities { new_payload_v2: true, new_payload_v3: true, new_payload_v4: true, - new_payload_v5: true, forkchoice_updated_v1: true, forkchoice_updated_v2: true, forkchoice_updated_v3: true, @@ -55,7 +54,6 @@ pub const DEFAULT_ENGINE_CAPABILITIES: EngineCapabilities = EngineCapabilities { get_payload_v2: true, get_payload_v3: true, get_payload_v4: true, - get_payload_v5: true, get_client_version_v1: true, get_blobs_v1: true, get_blobs_v2: true, diff --git a/beacon_node/store/src/impls/execution_payload.rs b/beacon_node/store/src/impls/execution_payload.rs index 097b069a665..796e042e71b 100644 --- a/beacon_node/store/src/impls/execution_payload.rs +++ b/beacon_node/store/src/impls/execution_payload.rs @@ -2,7 +2,7 @@ use crate::{DBColumn, Error, StoreItem}; use ssz::{Decode, Encode}; use types::{ EthSpec, ExecutionPayload, ExecutionPayloadBellatrix, ExecutionPayloadCapella, - ExecutionPayloadDeneb, ExecutionPayloadElectra, ExecutionPayloadFulu, + ExecutionPayloadDeneb, }; macro_rules! impl_store_item { @@ -25,8 +25,6 @@ macro_rules! impl_store_item { impl_store_item!(ExecutionPayloadBellatrix); impl_store_item!(ExecutionPayloadCapella); impl_store_item!(ExecutionPayloadDeneb); -impl_store_item!(ExecutionPayloadElectra); -impl_store_item!(ExecutionPayloadFulu); /// This fork-agnostic implementation should be only used for writing. /// @@ -42,22 +40,13 @@ impl StoreItem for ExecutionPayload { } fn from_store_bytes(bytes: &[u8]) -> Result { - ExecutionPayloadFulu::from_ssz_bytes(bytes) - .map(Self::Fulu) + ExecutionPayloadDeneb::from_ssz_bytes(bytes) + .map(Self::Deneb) .or_else(|_| { - ExecutionPayloadElectra::from_ssz_bytes(bytes) - .map(Self::Electra) + ExecutionPayloadCapella::from_ssz_bytes(bytes) + .map(Self::Capella) .or_else(|_| { - ExecutionPayloadDeneb::from_ssz_bytes(bytes) - .map(Self::Deneb) - .or_else(|_| { - ExecutionPayloadCapella::from_ssz_bytes(bytes) - .map(Self::Capella) - .or_else(|_| { - ExecutionPayloadBellatrix::from_ssz_bytes(bytes) - .map(Self::Bellatrix) - }) - }) + ExecutionPayloadBellatrix::from_ssz_bytes(bytes).map(Self::Bellatrix) }) }) .map_err(Into::into) diff --git a/beacon_node/store/src/partial_beacon_state.rs b/beacon_node/store/src/partial_beacon_state.rs index fdd1880f559..e02b84142cd 100644 --- a/beacon_node/store/src/partial_beacon_state.rs +++ b/beacon_node/store/src/partial_beacon_state.rs @@ -109,12 +109,12 @@ where only(Electra), partial_getter(rename = "latest_execution_payload_header_electra") )] - pub latest_execution_payload_header: ExecutionPayloadHeaderElectra, + pub latest_execution_payload_header: ExecutionPayloadHeaderDeneb, #[superstruct( only(Fulu), partial_getter(rename = "latest_execution_payload_header_fulu") )] - pub latest_execution_payload_header: ExecutionPayloadHeaderFulu, + pub latest_execution_payload_header: ExecutionPayloadHeaderDeneb, // Capella #[superstruct(only(Capella, Deneb, Electra, Fulu))] diff --git a/common/eth2/src/types.rs b/common/eth2/src/types.rs index 07b5cb50166..2fc110b4589 100644 --- a/common/eth2/src/types.rs +++ b/common/eth2/src/types.rs @@ -2384,10 +2384,12 @@ mod test { ExecutionPayload::Deneb(ExecutionPayloadDeneb::::random_for_test( rng, )), - ExecutionPayload::Electra(ExecutionPayloadElectra::::random_for_test( + ExecutionPayload::Deneb(ExecutionPayloadDeneb::::random_for_test( + rng, + )), + ExecutionPayload::Deneb(ExecutionPayloadDeneb::::random_for_test( rng, )), - ExecutionPayload::Fulu(ExecutionPayloadFulu::::random_for_test(rng)), ]; let merged_forks = &ForkName::list_all()[2..]; assert_eq!( @@ -2397,7 +2399,6 @@ mod test { ); for (payload, &fork_name) in payloads.into_iter().zip(merged_forks) { - assert_eq!(payload.fork_name(), fork_name); let payload_str = serde_json::to_string(&payload).unwrap(); let mut de = serde_json::Deserializer::from_str(&payload_str); generic_deserialize_by_fork(&mut de, payload, fork_name); @@ -2410,6 +2411,7 @@ mod test { let payloads = [ { + // Deneb let execution_payload = ExecutionPayload::Deneb( ExecutionPayloadDeneb::::random_for_test(rng), @@ -2421,9 +2423,10 @@ mod test { } }, { + // Electra let execution_payload = - ExecutionPayload::Electra( - ExecutionPayloadElectra::::random_for_test(rng), + ExecutionPayload::Deneb( + ExecutionPayloadDeneb::::random_for_test(rng), ); let blobs_bundle = BlobsBundle::random_for_test(rng); ExecutionPayloadAndBlobs { @@ -2432,9 +2435,10 @@ mod test { } }, { + // Fulu let execution_payload = - ExecutionPayload::Fulu( - ExecutionPayloadFulu::::random_for_test(rng), + ExecutionPayload::Deneb( + ExecutionPayloadDeneb::::random_for_test(rng), ); let blobs_bundle = BlobsBundle::random_for_test(rng); ExecutionPayloadAndBlobs { @@ -2452,7 +2456,6 @@ mod test { ); for (payload, &fork_name) in payloads.into_iter().zip(blob_forks) { - assert_eq!(payload.execution_payload.fork_name(), fork_name); let payload_str = serde_json::to_string(&payload).unwrap(); let mut de = serde_json::Deserializer::from_str(&payload_str); generic_deserialize_by_fork(&mut de, payload, fork_name); diff --git a/consensus/state_processing/src/genesis.rs b/consensus/state_processing/src/genesis.rs index 8e62427ef13..45151bbf591 100644 --- a/consensus/state_processing/src/genesis.rs +++ b/consensus/state_processing/src/genesis.rs @@ -134,7 +134,7 @@ pub fn initialize_beacon_state_from_eth1( // Override latest execution payload header. // See https://github.com/ethereum/consensus-specs/blob/dev/specs/capella/beacon-chain.md#testing - if let Some(ExecutionPayloadHeader::Electra(ref header)) = execution_payload_header { + if let Some(ExecutionPayloadHeader::Deneb(ref header)) = execution_payload_header { *state.latest_execution_payload_header_electra_mut()? = header.clone(); } } @@ -150,7 +150,7 @@ pub fn initialize_beacon_state_from_eth1( state.fork_mut().previous_version = spec.fulu_fork_version; // Override latest execution payload header. - if let Some(ExecutionPayloadHeader::Fulu(header)) = execution_payload_header { + if let Some(ExecutionPayloadHeader::Deneb(header)) = execution_payload_header { *state.latest_execution_payload_header_fulu_mut()? = header.clone(); } } diff --git a/consensus/state_processing/src/per_block_processing.rs b/consensus/state_processing/src/per_block_processing.rs index 93892ecf5b6..98c2d44a7e8 100644 --- a/consensus/state_processing/src/per_block_processing.rs +++ b/consensus/state_processing/src/per_block_processing.rs @@ -440,18 +440,6 @@ pub fn process_execution_payload>( _ => return Err(BlockProcessingError::IncorrectStateType), } } - ExecutionPayloadHeaderRefMut::Electra(header_mut) => { - match payload.to_execution_payload_header() { - ExecutionPayloadHeader::Electra(header) => *header_mut = header, - _ => return Err(BlockProcessingError::IncorrectStateType), - } - } - ExecutionPayloadHeaderRefMut::Fulu(header_mut) => { - match payload.to_execution_payload_header() { - ExecutionPayloadHeader::Fulu(header) => *header_mut = header, - _ => return Err(BlockProcessingError::IncorrectStateType), - } - } } Ok(()) diff --git a/consensus/state_processing/src/upgrade/electra.rs b/consensus/state_processing/src/upgrade/electra.rs index 258b28a45bd..92a6e9a1878 100644 --- a/consensus/state_processing/src/upgrade/electra.rs +++ b/consensus/state_processing/src/upgrade/electra.rs @@ -145,7 +145,7 @@ pub fn upgrade_state_to_electra( current_sync_committee: pre.current_sync_committee.clone(), next_sync_committee: pre.next_sync_committee.clone(), // Execution - latest_execution_payload_header: pre.latest_execution_payload_header.upgrade_to_electra(), + latest_execution_payload_header: pre.latest_execution_payload_header.clone(), // Capella next_withdrawal_index: pre.next_withdrawal_index, next_withdrawal_validator_index: pre.next_withdrawal_validator_index, diff --git a/consensus/state_processing/src/upgrade/fulu.rs b/consensus/state_processing/src/upgrade/fulu.rs index 6b038ad73a1..9a248531106 100644 --- a/consensus/state_processing/src/upgrade/fulu.rs +++ b/consensus/state_processing/src/upgrade/fulu.rs @@ -90,7 +90,7 @@ pub fn upgrade_state_to_fulu( current_sync_committee: pre.current_sync_committee.clone(), next_sync_committee: pre.next_sync_committee.clone(), // Execution - latest_execution_payload_header: pre.latest_execution_payload_header.upgrade_to_fulu(), + latest_execution_payload_header: pre.latest_execution_payload_header.clone(), // Capella next_withdrawal_index: pre.next_withdrawal_index, next_withdrawal_validator_index: pre.next_withdrawal_validator_index, diff --git a/consensus/types/src/beacon_block.rs b/consensus/types/src/beacon_block.rs index 6a2bb88d04b..3001fe630cd 100644 --- a/consensus/types/src/beacon_block.rs +++ b/consensus/types/src/beacon_block.rs @@ -603,7 +603,7 @@ impl> EmptyBlock for BeaconBlockElec deposits: VariableList::empty(), voluntary_exits: VariableList::empty(), sync_aggregate: SyncAggregate::empty(), - execution_payload: Payload::Electra::default(), + execution_payload: Payload::Deneb::default(), bls_to_execution_changes: VariableList::empty(), blob_kzg_commitments: VariableList::empty(), execution_requests: ExecutionRequests::default(), @@ -637,7 +637,7 @@ impl> EmptyBlock for BeaconBlockFulu deposits: VariableList::empty(), voluntary_exits: VariableList::empty(), sync_aggregate: SyncAggregate::empty(), - execution_payload: Payload::Fulu::default(), + execution_payload: Payload::Deneb::default(), bls_to_execution_changes: VariableList::empty(), blob_kzg_commitments: VariableList::empty(), execution_requests: ExecutionRequests::default(), diff --git a/consensus/types/src/beacon_block_body.rs b/consensus/types/src/beacon_block_body.rs index dca9aa14c3c..16e39c6498a 100644 --- a/consensus/types/src/beacon_block_body.rs +++ b/consensus/types/src/beacon_block_body.rs @@ -119,10 +119,10 @@ pub struct BeaconBlockBody = FullPay pub execution_payload: Payload::Deneb, #[superstruct(only(Electra), partial_getter(rename = "execution_payload_electra"))] #[serde(flatten)] - pub execution_payload: Payload::Electra, + pub execution_payload: Payload::Deneb, #[superstruct(only(Fulu), partial_getter(rename = "execution_payload_fulu"))] #[serde(flatten)] - pub execution_payload: Payload::Fulu, + pub execution_payload: Payload::Deneb, #[superstruct(only(Capella, Deneb, Electra, Fulu))] pub bls_to_execution_changes: VariableList, @@ -692,7 +692,7 @@ impl From>> impl From>> for ( BeaconBlockBodyElectra>, - Option>, + Option>, ) { fn from(body: BeaconBlockBodyElectra>) -> Self { @@ -706,7 +706,7 @@ impl From>> deposits, voluntary_exits, sync_aggregate, - execution_payload: FullPayloadElectra { execution_payload }, + execution_payload: FullPayloadDeneb { execution_payload }, bls_to_execution_changes, blob_kzg_commitments, execution_requests, @@ -723,7 +723,7 @@ impl From>> deposits, voluntary_exits, sync_aggregate, - execution_payload: BlindedPayloadElectra { + execution_payload: BlindedPayloadDeneb { execution_payload_header: From::from(&execution_payload), }, bls_to_execution_changes, @@ -738,7 +738,7 @@ impl From>> impl From>> for ( BeaconBlockBodyFulu>, - Option>, + Option>, ) { fn from(body: BeaconBlockBodyFulu>) -> Self { @@ -752,7 +752,7 @@ impl From>> deposits, voluntary_exits, sync_aggregate, - execution_payload: FullPayloadFulu { execution_payload }, + execution_payload: FullPayloadDeneb { execution_payload }, bls_to_execution_changes, blob_kzg_commitments, execution_requests, @@ -769,7 +769,7 @@ impl From>> deposits, voluntary_exits, sync_aggregate, - execution_payload: BlindedPayloadFulu { + execution_payload: BlindedPayloadDeneb { execution_payload_header: From::from(&execution_payload), }, bls_to_execution_changes, @@ -910,7 +910,7 @@ impl BeaconBlockBodyElectra> { deposits, voluntary_exits, sync_aggregate, - execution_payload: FullPayloadElectra { execution_payload }, + execution_payload: FullPayloadDeneb { execution_payload }, bls_to_execution_changes, blob_kzg_commitments, execution_requests, @@ -926,7 +926,7 @@ impl BeaconBlockBodyElectra> { deposits: deposits.clone(), voluntary_exits: voluntary_exits.clone(), sync_aggregate: sync_aggregate.clone(), - execution_payload: BlindedPayloadElectra { + execution_payload: BlindedPayloadDeneb { execution_payload_header: execution_payload.into(), }, bls_to_execution_changes: bls_to_execution_changes.clone(), @@ -948,7 +948,7 @@ impl BeaconBlockBodyFulu> { deposits, voluntary_exits, sync_aggregate, - execution_payload: FullPayloadFulu { execution_payload }, + execution_payload: FullPayloadDeneb { execution_payload }, bls_to_execution_changes, blob_kzg_commitments, execution_requests, @@ -964,7 +964,7 @@ impl BeaconBlockBodyFulu> { deposits: deposits.clone(), voluntary_exits: voluntary_exits.clone(), sync_aggregate: sync_aggregate.clone(), - execution_payload: BlindedPayloadFulu { + execution_payload: BlindedPayloadDeneb { execution_payload_header: execution_payload.into(), }, bls_to_execution_changes: bls_to_execution_changes.clone(), diff --git a/consensus/types/src/beacon_state.rs b/consensus/types/src/beacon_state.rs index c7dfabbfee0..a30d8657f37 100644 --- a/consensus/types/src/beacon_state.rs +++ b/consensus/types/src/beacon_state.rs @@ -495,13 +495,13 @@ where partial_getter(rename = "latest_execution_payload_header_electra") )] #[metastruct(exclude_from(tree_lists))] - pub latest_execution_payload_header: ExecutionPayloadHeaderElectra, + pub latest_execution_payload_header: ExecutionPayloadHeaderDeneb, #[superstruct( only(Fulu), partial_getter(rename = "latest_execution_payload_header_fulu") )] #[metastruct(exclude_from(tree_lists))] - pub latest_execution_payload_header: ExecutionPayloadHeaderFulu, + pub latest_execution_payload_header: ExecutionPayloadHeaderDeneb, // Capella #[superstruct(only(Capella, Deneb, Electra, Fulu), partial_getter(copy))] @@ -1042,10 +1042,10 @@ impl BeaconState { BeaconState::Deneb(state) => Ok(ExecutionPayloadHeaderRef::Deneb( &state.latest_execution_payload_header, )), - BeaconState::Electra(state) => Ok(ExecutionPayloadHeaderRef::Electra( + BeaconState::Electra(state) => Ok(ExecutionPayloadHeaderRef::Deneb( &state.latest_execution_payload_header, )), - BeaconState::Fulu(state) => Ok(ExecutionPayloadHeaderRef::Fulu( + BeaconState::Fulu(state) => Ok(ExecutionPayloadHeaderRef::Deneb( &state.latest_execution_payload_header, )), } @@ -1065,10 +1065,10 @@ impl BeaconState { BeaconState::Deneb(state) => Ok(ExecutionPayloadHeaderRefMut::Deneb( &mut state.latest_execution_payload_header, )), - BeaconState::Electra(state) => Ok(ExecutionPayloadHeaderRefMut::Electra( + BeaconState::Electra(state) => Ok(ExecutionPayloadHeaderRefMut::Deneb( &mut state.latest_execution_payload_header, )), - BeaconState::Fulu(state) => Ok(ExecutionPayloadHeaderRefMut::Fulu( + BeaconState::Fulu(state) => Ok(ExecutionPayloadHeaderRefMut::Deneb( &mut state.latest_execution_payload_header, )), } diff --git a/consensus/types/src/builder_bid.rs b/consensus/types/src/builder_bid.rs index f8d61a0da5b..7054d852624 100644 --- a/consensus/types/src/builder_bid.rs +++ b/consensus/types/src/builder_bid.rs @@ -2,9 +2,8 @@ use crate::beacon_block_body::KzgCommitments; use crate::{ test_utils::TestRandom, ChainSpec, ContextDeserialize, EthSpec, ExecutionPayloadHeaderBellatrix, ExecutionPayloadHeaderCapella, ExecutionPayloadHeaderDeneb, - ExecutionPayloadHeaderElectra, ExecutionPayloadHeaderFulu, ExecutionPayloadHeaderRef, - ExecutionPayloadHeaderRefMut, ExecutionRequests, ForkName, ForkVersionDecode, SignedRoot, - Uint256, + ExecutionPayloadHeaderRef, ExecutionPayloadHeaderRefMut, ExecutionRequests, ForkName, + ForkVersionDecode, SignedRoot, Uint256, }; use bls::PublicKeyBytes; use bls::Signature; @@ -30,9 +29,7 @@ use tree_hash_derive::TreeHash; TestRandom ), serde(bound = "E: EthSpec", deny_unknown_fields) - ), - map_ref_into(ExecutionPayloadHeaderRef), - map_ref_mut_into(ExecutionPayloadHeaderRefMut) + ) )] #[derive(PartialEq, Debug, Encode, Serialize, Deserialize, TreeHash, Clone)] #[serde(bound = "E: EthSpec", deny_unknown_fields, untagged)] @@ -46,9 +43,9 @@ pub struct BuilderBid { #[superstruct(only(Deneb), partial_getter(rename = "header_deneb"))] pub header: ExecutionPayloadHeaderDeneb, #[superstruct(only(Electra), partial_getter(rename = "header_electra"))] - pub header: ExecutionPayloadHeaderElectra, + pub header: ExecutionPayloadHeaderDeneb, #[superstruct(only(Fulu), partial_getter(rename = "header_fulu"))] - pub header: ExecutionPayloadHeaderFulu, + pub header: ExecutionPayloadHeaderDeneb, #[superstruct(only(Deneb, Electra, Fulu))] pub blob_kzg_commitments: KzgCommitments, #[superstruct(only(Electra, Fulu))] @@ -66,17 +63,29 @@ impl BuilderBid { impl<'a, E: EthSpec> BuilderBidRef<'a, E> { pub fn header(&self) -> ExecutionPayloadHeaderRef<'a, E> { - map_builder_bid_ref_into_execution_payload_header_ref!(&'a _, self, |bid, cons| cons( - &bid.header - )) + match self { + BuilderBidRef::Bellatrix(bid) => ExecutionPayloadHeaderRef::Bellatrix(&bid.header), + BuilderBidRef::Capella(bid) => ExecutionPayloadHeaderRef::Capella(&bid.header), + BuilderBidRef::Deneb(bid) => ExecutionPayloadHeaderRef::Deneb(&bid.header), + BuilderBidRef::Electra(bid) => ExecutionPayloadHeaderRef::Deneb(&bid.header), + BuilderBidRef::Fulu(bid) => ExecutionPayloadHeaderRef::Deneb(&bid.header), + } } } impl<'a, E: EthSpec> BuilderBidRefMut<'a, E> { pub fn header_mut(self) -> ExecutionPayloadHeaderRefMut<'a, E> { - map_builder_bid_ref_mut_into_execution_payload_header_ref_mut!(&'a _, self, |bid, cons| { - cons(&mut bid.header) - }) + match self { + BuilderBidRefMut::Bellatrix(bid) => { + ExecutionPayloadHeaderRefMut::Bellatrix(&mut bid.header) + } + BuilderBidRefMut::Capella(bid) => { + ExecutionPayloadHeaderRefMut::Capella(&mut bid.header) + } + BuilderBidRefMut::Deneb(bid) => ExecutionPayloadHeaderRefMut::Deneb(&mut bid.header), + BuilderBidRefMut::Electra(bid) => ExecutionPayloadHeaderRefMut::Deneb(&mut bid.header), + BuilderBidRefMut::Fulu(bid) => ExecutionPayloadHeaderRefMut::Deneb(&mut bid.header), + } } } diff --git a/consensus/types/src/execution_payload.rs b/consensus/types/src/execution_payload.rs index 17e3a49496e..988cf25b23d 100644 --- a/consensus/types/src/execution_payload.rs +++ b/consensus/types/src/execution_payload.rs @@ -15,7 +15,7 @@ pub type Transactions = VariableList< pub type Withdrawals = VariableList::MaxWithdrawalsPerPayload>; #[superstruct( - variants(Bellatrix, Capella, Deneb, Electra, Fulu), + variants(Bellatrix, Capella, Deneb), variant_attributes( derive( Default, @@ -88,12 +88,12 @@ pub struct ExecutionPayload { pub block_hash: ExecutionBlockHash, #[serde(with = "ssz_types::serde_utils::list_of_hex_var_list")] pub transactions: Transactions, - #[superstruct(only(Capella, Deneb, Electra, Fulu))] + #[superstruct(only(Capella, Deneb))] pub withdrawals: Withdrawals, - #[superstruct(only(Deneb, Electra, Fulu), partial_getter(copy))] + #[superstruct(only(Deneb), partial_getter(copy))] #[serde(with = "serde_utils::quoted_u64")] pub blob_gas_used: u64, - #[superstruct(only(Deneb, Electra, Fulu), partial_getter(copy))] + #[superstruct(only(Deneb), partial_getter(copy))] #[serde(with = "serde_utils::quoted_u64")] pub excess_blob_gas: u64, } @@ -119,9 +119,9 @@ impl ForkVersionDecode for ExecutionPayload { ExecutionPayloadBellatrix::from_ssz_bytes(bytes).map(Self::Bellatrix) } ForkName::Capella => ExecutionPayloadCapella::from_ssz_bytes(bytes).map(Self::Capella), - ForkName::Deneb => ExecutionPayloadDeneb::from_ssz_bytes(bytes).map(Self::Deneb), - ForkName::Electra => ExecutionPayloadElectra::from_ssz_bytes(bytes).map(Self::Electra), - ForkName::Fulu => ExecutionPayloadFulu::from_ssz_bytes(bytes).map(Self::Fulu), + ForkName::Deneb | ForkName::Electra | ForkName::Fulu => { + ExecutionPayloadDeneb::from_ssz_bytes(bytes).map(Self::Deneb) + } } } } @@ -160,27 +160,9 @@ impl<'de, E: EthSpec> ContextDeserialize<'de, ForkName> for ExecutionPayload ForkName::Capella => { Self::Capella(Deserialize::deserialize(deserializer).map_err(convert_err)?) } - ForkName::Deneb => { + ForkName::Deneb | ForkName::Electra | ForkName::Fulu => { Self::Deneb(Deserialize::deserialize(deserializer).map_err(convert_err)?) } - ForkName::Electra => { - Self::Electra(Deserialize::deserialize(deserializer).map_err(convert_err)?) - } - ForkName::Fulu => { - Self::Fulu(Deserialize::deserialize(deserializer).map_err(convert_err)?) - } }) } } - -impl ExecutionPayload { - pub fn fork_name(&self) -> ForkName { - match self { - ExecutionPayload::Bellatrix(_) => ForkName::Bellatrix, - ExecutionPayload::Capella(_) => ForkName::Capella, - ExecutionPayload::Deneb(_) => ForkName::Deneb, - ExecutionPayload::Electra(_) => ForkName::Electra, - ExecutionPayload::Fulu(_) => ForkName::Fulu, - } - } -} diff --git a/consensus/types/src/execution_payload_header.rs b/consensus/types/src/execution_payload_header.rs index 9abc6e9e32c..f67155725a2 100644 --- a/consensus/types/src/execution_payload_header.rs +++ b/consensus/types/src/execution_payload_header.rs @@ -8,7 +8,7 @@ use tree_hash::TreeHash; use tree_hash_derive::TreeHash; #[superstruct( - variants(Bellatrix, Capella, Deneb, Electra, Fulu), + variants(Bellatrix, Capella, Deneb), variant_attributes( derive( Default, @@ -84,12 +84,12 @@ pub struct ExecutionPayloadHeader { pub block_hash: ExecutionBlockHash, #[superstruct(getter(copy))] pub transactions_root: Hash256, - #[superstruct(only(Capella, Deneb, Electra, Fulu), partial_getter(copy))] + #[superstruct(only(Capella, Deneb), partial_getter(copy))] pub withdrawals_root: Hash256, - #[superstruct(only(Deneb, Electra, Fulu), partial_getter(copy))] + #[superstruct(only(Deneb), partial_getter(copy))] #[serde(with = "serde_utils::quoted_u64")] pub blob_gas_used: u64, - #[superstruct(only(Deneb, Electra, Fulu), partial_getter(copy))] + #[superstruct(only(Deneb), partial_getter(copy))] #[serde(with = "serde_utils::quoted_u64")] pub excess_blob_gas: u64, } @@ -110,11 +110,9 @@ impl ExecutionPayloadHeader { ForkName::Capella => { ExecutionPayloadHeaderCapella::from_ssz_bytes(bytes).map(Self::Capella) } - ForkName::Deneb => ExecutionPayloadHeaderDeneb::from_ssz_bytes(bytes).map(Self::Deneb), - ForkName::Electra => { - ExecutionPayloadHeaderElectra::from_ssz_bytes(bytes).map(Self::Electra) + ForkName::Deneb | ForkName::Electra | ForkName::Fulu => { + ExecutionPayloadHeaderDeneb::from_ssz_bytes(bytes).map(Self::Deneb) } - ForkName::Fulu => ExecutionPayloadHeaderFulu::from_ssz_bytes(bytes).map(Self::Fulu), } } @@ -128,16 +126,6 @@ impl ExecutionPayloadHeader { 0 } } - - pub fn fork_name_unchecked(&self) -> ForkName { - match self { - ExecutionPayloadHeader::Bellatrix(_) => ForkName::Bellatrix, - ExecutionPayloadHeader::Capella(_) => ForkName::Capella, - ExecutionPayloadHeader::Deneb(_) => ForkName::Deneb, - ExecutionPayloadHeader::Electra(_) => ForkName::Electra, - ExecutionPayloadHeader::Fulu(_) => ForkName::Fulu, - } - } } impl<'a, E: EthSpec> ExecutionPayloadHeaderRef<'a, E> { @@ -195,54 +183,6 @@ impl ExecutionPayloadHeaderCapella { } } -impl ExecutionPayloadHeaderDeneb { - pub fn upgrade_to_electra(&self) -> ExecutionPayloadHeaderElectra { - ExecutionPayloadHeaderElectra { - parent_hash: self.parent_hash, - fee_recipient: self.fee_recipient, - state_root: self.state_root, - receipts_root: self.receipts_root, - logs_bloom: self.logs_bloom.clone(), - prev_randao: self.prev_randao, - block_number: self.block_number, - gas_limit: self.gas_limit, - gas_used: self.gas_used, - timestamp: self.timestamp, - extra_data: self.extra_data.clone(), - base_fee_per_gas: self.base_fee_per_gas, - block_hash: self.block_hash, - transactions_root: self.transactions_root, - withdrawals_root: self.withdrawals_root, - blob_gas_used: self.blob_gas_used, - excess_blob_gas: self.excess_blob_gas, - } - } -} - -impl ExecutionPayloadHeaderElectra { - pub fn upgrade_to_fulu(&self) -> ExecutionPayloadHeaderFulu { - ExecutionPayloadHeaderFulu { - parent_hash: self.parent_hash, - fee_recipient: self.fee_recipient, - state_root: self.state_root, - receipts_root: self.receipts_root, - logs_bloom: self.logs_bloom.clone(), - prev_randao: self.prev_randao, - block_number: self.block_number, - gas_limit: self.gas_limit, - gas_used: self.gas_used, - timestamp: self.timestamp, - extra_data: self.extra_data.clone(), - base_fee_per_gas: self.base_fee_per_gas, - block_hash: self.block_hash, - transactions_root: self.transactions_root, - withdrawals_root: self.withdrawals_root, - blob_gas_used: self.blob_gas_used, - excess_blob_gas: self.excess_blob_gas, - } - } -} - impl<'a, E: EthSpec> From<&'a ExecutionPayloadBellatrix> for ExecutionPayloadHeaderBellatrix { fn from(payload: &'a ExecutionPayloadBellatrix) -> Self { Self { @@ -310,54 +250,6 @@ impl<'a, E: EthSpec> From<&'a ExecutionPayloadDeneb> for ExecutionPayloadHead } } -impl<'a, E: EthSpec> From<&'a ExecutionPayloadElectra> for ExecutionPayloadHeaderElectra { - fn from(payload: &'a ExecutionPayloadElectra) -> Self { - Self { - parent_hash: payload.parent_hash, - fee_recipient: payload.fee_recipient, - state_root: payload.state_root, - receipts_root: payload.receipts_root, - logs_bloom: payload.logs_bloom.clone(), - prev_randao: payload.prev_randao, - block_number: payload.block_number, - 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(), - withdrawals_root: payload.withdrawals.tree_hash_root(), - blob_gas_used: payload.blob_gas_used, - excess_blob_gas: payload.excess_blob_gas, - } - } -} - -impl<'a, E: EthSpec> From<&'a ExecutionPayloadFulu> for ExecutionPayloadHeaderFulu { - fn from(payload: &'a ExecutionPayloadFulu) -> Self { - Self { - parent_hash: payload.parent_hash, - fee_recipient: payload.fee_recipient, - state_root: payload.state_root, - receipts_root: payload.receipts_root, - logs_bloom: payload.logs_bloom.clone(), - prev_randao: payload.prev_randao, - block_number: payload.block_number, - 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(), - withdrawals_root: payload.withdrawals.tree_hash_root(), - blob_gas_used: payload.blob_gas_used, - excess_blob_gas: payload.excess_blob_gas, - } - } -} - // These impls are required to work around an inelegance in `to_execution_payload_header`. // They only clone headers so they should be relatively cheap. impl<'a, E: EthSpec> From<&'a Self> for ExecutionPayloadHeaderBellatrix { @@ -378,18 +270,6 @@ impl<'a, E: EthSpec> From<&'a Self> for ExecutionPayloadHeaderDeneb { } } -impl<'a, E: EthSpec> From<&'a Self> for ExecutionPayloadHeaderElectra { - fn from(payload: &'a Self) -> Self { - payload.clone() - } -} - -impl<'a, E: EthSpec> From<&'a Self> for ExecutionPayloadHeaderFulu { - fn from(payload: &'a Self) -> Self { - payload.clone() - } -} - impl<'a, E: EthSpec> From> for ExecutionPayloadHeader { fn from(payload: ExecutionPayloadRef<'a, E>) -> Self { map_execution_payload_ref_into_execution_payload_header!( @@ -445,39 +325,11 @@ impl ExecutionPayloadHeaderRefMut<'_, E> { ExecutionPayloadHeaderRefMut::Deneb(mut_ref) => { *mut_ref = header.try_into()?; } - ExecutionPayloadHeaderRefMut::Electra(mut_ref) => { - *mut_ref = header.try_into()?; - } - ExecutionPayloadHeaderRefMut::Fulu(mut_ref) => { - *mut_ref = header.try_into()?; - } } Ok(()) } } -impl TryFrom> for ExecutionPayloadHeaderElectra { - type Error = BeaconStateError; - fn try_from(header: ExecutionPayloadHeader) -> Result { - match header { - ExecutionPayloadHeader::Electra(execution_payload_header) => { - Ok(execution_payload_header) - } - _ => Err(BeaconStateError::IncorrectStateVariant), - } - } -} - -impl TryFrom> for ExecutionPayloadHeaderFulu { - type Error = BeaconStateError; - fn try_from(header: ExecutionPayloadHeader) -> Result { - match header { - ExecutionPayloadHeader::Fulu(execution_payload_header) => Ok(execution_payload_header), - _ => Err(BeaconStateError::IncorrectStateVariant), - } - } -} - impl<'de, E: EthSpec> ContextDeserialize<'de, ForkName> for ExecutionPayloadHeader { fn context_deserialize(deserializer: D, context: ForkName) -> Result where @@ -502,15 +354,9 @@ impl<'de, E: EthSpec> ContextDeserialize<'de, ForkName> for ExecutionPayloadHead ForkName::Capella => { Self::Capella(Deserialize::deserialize(deserializer).map_err(convert_err)?) } - ForkName::Deneb => { + ForkName::Deneb | ForkName::Electra | ForkName::Fulu => { Self::Deneb(Deserialize::deserialize(deserializer).map_err(convert_err)?) } - ForkName::Electra => { - Self::Electra(Deserialize::deserialize(deserializer).map_err(convert_err)?) - } - ForkName::Fulu => { - Self::Fulu(Deserialize::deserialize(deserializer).map_err(convert_err)?) - } }) } } diff --git a/consensus/types/src/lib.rs b/consensus/types/src/lib.rs index f0555a06d6d..33a7635e091 100644 --- a/consensus/types/src/lib.rs +++ b/consensus/types/src/lib.rs @@ -168,13 +168,11 @@ pub use crate::execution_block_hash::ExecutionBlockHash; pub use crate::execution_block_header::{EncodableExecutionBlockHeader, ExecutionBlockHeader}; pub use crate::execution_payload::{ ExecutionPayload, ExecutionPayloadBellatrix, ExecutionPayloadCapella, ExecutionPayloadDeneb, - ExecutionPayloadElectra, ExecutionPayloadFulu, ExecutionPayloadRef, Transaction, Transactions, - Withdrawals, + ExecutionPayloadRef, Transaction, Transactions, Withdrawals, }; pub use crate::execution_payload_header::{ ExecutionPayloadHeader, ExecutionPayloadHeaderBellatrix, ExecutionPayloadHeaderCapella, - ExecutionPayloadHeaderDeneb, ExecutionPayloadHeaderElectra, ExecutionPayloadHeaderFulu, - ExecutionPayloadHeaderRef, ExecutionPayloadHeaderRefMut, + ExecutionPayloadHeaderDeneb, ExecutionPayloadHeaderRef, ExecutionPayloadHeaderRefMut, }; pub use crate::execution_requests::{ExecutionRequests, RequestType}; pub use crate::fork::Fork; @@ -212,9 +210,8 @@ pub use crate::light_client_update::{ pub use crate::participation_flags::ParticipationFlags; pub use crate::payload::{ AbstractExecPayload, BlindedPayload, BlindedPayloadBellatrix, BlindedPayloadCapella, - BlindedPayloadDeneb, BlindedPayloadElectra, BlindedPayloadFulu, BlindedPayloadRef, BlockType, - ExecPayload, FullPayload, FullPayloadBellatrix, FullPayloadCapella, FullPayloadDeneb, - FullPayloadElectra, FullPayloadFulu, FullPayloadRef, OwnedExecPayload, + BlindedPayloadDeneb, BlindedPayloadRef, BlockType, ExecPayload, FullPayload, + FullPayloadBellatrix, FullPayloadCapella, FullPayloadDeneb, FullPayloadRef, OwnedExecPayload, }; pub use crate::pending_attestation::PendingAttestation; pub use crate::pending_consolidation::PendingConsolidation; diff --git a/consensus/types/src/light_client_header.rs b/consensus/types/src/light_client_header.rs index c36a1c2111d..e366381b908 100644 --- a/consensus/types/src/light_client_header.rs +++ b/consensus/types/src/light_client_header.rs @@ -3,8 +3,7 @@ use crate::ChainSpec; use crate::{light_client_update::*, BeaconBlockBody}; use crate::{ test_utils::TestRandom, EthSpec, ExecutionPayloadHeaderCapella, ExecutionPayloadHeaderDeneb, - ExecutionPayloadHeaderElectra, ExecutionPayloadHeaderFulu, FixedVector, Hash256, - SignedBlindedBeaconBlock, + FixedVector, Hash256, SignedBlindedBeaconBlock, }; use crate::{BeaconBlockHeader, ExecutionPayloadHeader}; use crate::{ContextDeserialize, ForkName}; @@ -65,9 +64,9 @@ pub struct LightClientHeader { only(Electra), partial_getter(rename = "execution_payload_header_electra") )] - pub execution: ExecutionPayloadHeaderElectra, + pub execution: ExecutionPayloadHeaderDeneb, #[superstruct(only(Fulu), partial_getter(rename = "execution_payload_header_fulu"))] - pub execution: ExecutionPayloadHeaderFulu, + pub execution: ExecutionPayloadHeaderDeneb, #[superstruct(only(Capella, Deneb, Electra, Fulu))] pub execution_branch: FixedVector, @@ -263,9 +262,9 @@ impl LightClientHeaderElectra { let payload = block .message() .execution_payload()? - .execution_payload_electra()?; + .execution_payload_deneb()?; - let header = ExecutionPayloadHeaderElectra::from(payload); + let header = ExecutionPayloadHeaderDeneb::from(payload); let beacon_block_body = BeaconBlockBody::from( block .message() @@ -291,7 +290,7 @@ impl Default for LightClientHeaderElectra { fn default() -> Self { Self { beacon: BeaconBlockHeader::empty(), - execution: ExecutionPayloadHeaderElectra::default(), + execution: ExecutionPayloadHeaderDeneb::default(), execution_branch: FixedVector::default(), _phantom_data: PhantomData, } @@ -305,9 +304,9 @@ impl LightClientHeaderFulu { let payload = block .message() .execution_payload()? - .execution_payload_fulu()?; + .execution_payload_deneb()?; - let header = ExecutionPayloadHeaderFulu::from(payload); + let header = ExecutionPayloadHeaderDeneb::from(payload); let beacon_block_body = BeaconBlockBody::from( block .message() @@ -333,7 +332,7 @@ impl Default for LightClientHeaderFulu { fn default() -> Self { Self { beacon: BeaconBlockHeader::empty(), - execution: ExecutionPayloadHeaderFulu::default(), + execution: ExecutionPayloadHeaderDeneb::default(), execution_branch: FixedVector::default(), _phantom_data: PhantomData, } diff --git a/consensus/types/src/payload.rs b/consensus/types/src/payload.rs index 1f7edfcacaa..468d968d81a 100644 --- a/consensus/types/src/payload.rs +++ b/consensus/types/src/payload.rs @@ -103,17 +103,13 @@ pub trait AbstractExecPayload: + TryInto + TryInto + TryInto - + TryInto - + TryInto + Sync { type Ref<'a>: ExecPayload + Copy + From<&'a Self::Bellatrix> + From<&'a Self::Capella> - + From<&'a Self::Deneb> - + From<&'a Self::Electra> - + From<&'a Self::Fulu>; + + From<&'a Self::Deneb>; type Bellatrix: OwnedExecPayload + Into @@ -130,20 +126,10 @@ pub trait AbstractExecPayload: + for<'a> From>> + TryFrom> + Sync; - type Electra: OwnedExecPayload - + Into - + for<'a> From>> - + TryFrom> - + Sync; - type Fulu: OwnedExecPayload - + Into - + for<'a> From>> - + TryFrom> - + Sync; } #[superstruct( - variants(Bellatrix, Capella, Deneb, Electra, Fulu), + variants(Bellatrix, Capella, Deneb), variant_attributes( derive( Debug, @@ -194,10 +180,6 @@ pub struct FullPayload { pub execution_payload: ExecutionPayloadCapella, #[superstruct(only(Deneb), partial_getter(rename = "execution_payload_deneb"))] pub execution_payload: ExecutionPayloadDeneb, - #[superstruct(only(Electra), partial_getter(rename = "execution_payload_electra"))] - pub execution_payload: ExecutionPayloadElectra, - #[superstruct(only(Fulu), partial_getter(rename = "execution_payload_fulu"))] - pub execution_payload: ExecutionPayloadFulu, } impl From> for ExecutionPayload { @@ -311,12 +293,6 @@ impl ExecPayload for FullPayload { FullPayload::Deneb(ref inner) => { Ok(inner.execution_payload.withdrawals.tree_hash_root()) } - FullPayload::Electra(ref inner) => { - Ok(inner.execution_payload.withdrawals.tree_hash_root()) - } - FullPayload::Fulu(ref inner) => { - Ok(inner.execution_payload.withdrawals.tree_hash_root()) - } } } @@ -326,8 +302,6 @@ impl ExecPayload for FullPayload { Err(Error::IncorrectStateVariant) } FullPayload::Deneb(ref inner) => Ok(inner.execution_payload.blob_gas_used), - FullPayload::Electra(ref inner) => Ok(inner.execution_payload.blob_gas_used), - FullPayload::Fulu(ref inner) => Ok(inner.execution_payload.blob_gas_used), } } @@ -356,9 +330,9 @@ impl FullPayload { ForkName::Base | ForkName::Altair => Err(Error::IncorrectStateVariant), ForkName::Bellatrix => Ok(FullPayloadBellatrix::default().into()), ForkName::Capella => Ok(FullPayloadCapella::default().into()), - ForkName::Deneb => Ok(FullPayloadDeneb::default().into()), - ForkName::Electra => Ok(FullPayloadElectra::default().into()), - ForkName::Fulu => Ok(FullPayloadFulu::default().into()), + ForkName::Deneb | ForkName::Electra | ForkName::Fulu => { + Ok(FullPayloadDeneb::default().into()) + } } } } @@ -455,10 +429,6 @@ impl ExecPayload for FullPayloadRef<'_, E> { FullPayloadRef::Deneb(inner) => { Ok(inner.execution_payload.withdrawals.tree_hash_root()) } - FullPayloadRef::Electra(inner) => { - Ok(inner.execution_payload.withdrawals.tree_hash_root()) - } - FullPayloadRef::Fulu(inner) => Ok(inner.execution_payload.withdrawals.tree_hash_root()), } } @@ -468,8 +438,6 @@ impl ExecPayload for FullPayloadRef<'_, E> { Err(Error::IncorrectStateVariant) } FullPayloadRef::Deneb(inner) => Ok(inner.execution_payload.blob_gas_used), - FullPayloadRef::Electra(inner) => Ok(inner.execution_payload.blob_gas_used), - FullPayloadRef::Fulu(inner) => Ok(inner.execution_payload.blob_gas_used), } } @@ -491,8 +459,6 @@ impl AbstractExecPayload for FullPayload { type Bellatrix = FullPayloadBellatrix; type Capella = FullPayloadCapella; type Deneb = FullPayloadDeneb; - type Electra = FullPayloadElectra; - type Fulu = FullPayloadFulu; } impl From> for FullPayload { @@ -511,7 +477,7 @@ impl TryFrom> for FullPayload { } #[superstruct( - variants(Bellatrix, Capella, Deneb, Electra, Fulu), + variants(Bellatrix, Capella, Deneb), variant_attributes( derive( Debug, @@ -561,10 +527,6 @@ pub struct BlindedPayload { pub execution_payload_header: ExecutionPayloadHeaderCapella, #[superstruct(only(Deneb), partial_getter(rename = "execution_payload_deneb"))] pub execution_payload_header: ExecutionPayloadHeaderDeneb, - #[superstruct(only(Electra), partial_getter(rename = "execution_payload_electra"))] - pub execution_payload_header: ExecutionPayloadHeaderElectra, - #[superstruct(only(Fulu), partial_getter(rename = "execution_payload_fulu"))] - pub execution_payload_header: ExecutionPayloadHeaderFulu, } impl<'a, E: EthSpec> From> for BlindedPayload { @@ -654,10 +616,6 @@ impl ExecPayload for BlindedPayload { Ok(inner.execution_payload_header.withdrawals_root) } BlindedPayload::Deneb(ref inner) => Ok(inner.execution_payload_header.withdrawals_root), - BlindedPayload::Electra(ref inner) => { - Ok(inner.execution_payload_header.withdrawals_root) - } - BlindedPayload::Fulu(ref inner) => Ok(inner.execution_payload_header.withdrawals_root), } } @@ -667,8 +625,6 @@ impl ExecPayload for BlindedPayload { Err(Error::IncorrectStateVariant) } BlindedPayload::Deneb(ref inner) => Ok(inner.execution_payload_header.blob_gas_used), - BlindedPayload::Electra(ref inner) => Ok(inner.execution_payload_header.blob_gas_used), - BlindedPayload::Fulu(ref inner) => Ok(inner.execution_payload_header.blob_gas_used), } } @@ -764,10 +720,6 @@ impl<'b, E: EthSpec> ExecPayload for BlindedPayloadRef<'b, E> { Ok(inner.execution_payload_header.withdrawals_root) } BlindedPayloadRef::Deneb(inner) => Ok(inner.execution_payload_header.withdrawals_root), - BlindedPayloadRef::Electra(inner) => { - Ok(inner.execution_payload_header.withdrawals_root) - } - BlindedPayloadRef::Fulu(inner) => Ok(inner.execution_payload_header.withdrawals_root), } } @@ -777,8 +729,6 @@ impl<'b, E: EthSpec> ExecPayload for BlindedPayloadRef<'b, E> { Err(Error::IncorrectStateVariant) } BlindedPayloadRef::Deneb(inner) => Ok(inner.execution_payload_header.blob_gas_used), - BlindedPayloadRef::Electra(inner) => Ok(inner.execution_payload_header.blob_gas_used), - BlindedPayloadRef::Fulu(inner) => Ok(inner.execution_payload_header.blob_gas_used), } } @@ -1075,28 +1025,12 @@ impl_exec_payload_for_fork!( ExecutionPayloadDeneb, Deneb ); -impl_exec_payload_for_fork!( - BlindedPayloadElectra, - FullPayloadElectra, - ExecutionPayloadHeaderElectra, - ExecutionPayloadElectra, - Electra -); -impl_exec_payload_for_fork!( - BlindedPayloadFulu, - FullPayloadFulu, - ExecutionPayloadHeaderFulu, - ExecutionPayloadFulu, - Fulu -); impl AbstractExecPayload for BlindedPayload { type Ref<'a> = BlindedPayloadRef<'a, E>; type Bellatrix = BlindedPayloadBellatrix; type Capella = BlindedPayloadCapella; type Deneb = BlindedPayloadDeneb; - type Electra = BlindedPayloadElectra; - type Fulu = BlindedPayloadFulu; } impl From> for BlindedPayload { @@ -1128,16 +1062,6 @@ impl From> for BlindedPayload { execution_payload_header, }) } - ExecutionPayloadHeader::Electra(execution_payload_header) => { - Self::Electra(BlindedPayloadElectra { - execution_payload_header, - }) - } - ExecutionPayloadHeader::Fulu(execution_payload_header) => { - Self::Fulu(BlindedPayloadFulu { - execution_payload_header, - }) - } } } } @@ -1154,12 +1078,6 @@ impl From> for ExecutionPayloadHeader { BlindedPayload::Deneb(blinded_payload) => { ExecutionPayloadHeader::Deneb(blinded_payload.execution_payload_header) } - BlindedPayload::Electra(blinded_payload) => { - ExecutionPayloadHeader::Electra(blinded_payload.execution_payload_header) - } - BlindedPayload::Fulu(blinded_payload) => { - ExecutionPayloadHeader::Fulu(blinded_payload.execution_payload_header) - } } } } diff --git a/consensus/types/src/signed_beacon_block.rs b/consensus/types/src/signed_beacon_block.rs index 4a0a8c6ead0..3b9efd21faf 100644 --- a/consensus/types/src/signed_beacon_block.rs +++ b/consensus/types/src/signed_beacon_block.rs @@ -530,7 +530,7 @@ impl SignedBeaconBlockDeneb> { impl SignedBeaconBlockElectra> { pub fn into_full_block( self, - execution_payload: ExecutionPayloadElectra, + execution_payload: ExecutionPayloadDeneb, ) -> SignedBeaconBlockElectra> { let SignedBeaconBlockElectra { message: @@ -550,7 +550,7 @@ impl SignedBeaconBlockElectra> { deposits, voluntary_exits, sync_aggregate, - execution_payload: BlindedPayloadElectra { .. }, + execution_payload: BlindedPayloadDeneb { .. }, bls_to_execution_changes, blob_kzg_commitments, execution_requests, @@ -574,7 +574,7 @@ impl SignedBeaconBlockElectra> { deposits, voluntary_exits, sync_aggregate, - execution_payload: FullPayloadElectra { execution_payload }, + execution_payload: FullPayloadDeneb { execution_payload }, bls_to_execution_changes, blob_kzg_commitments, execution_requests, @@ -588,7 +588,7 @@ impl SignedBeaconBlockElectra> { impl SignedBeaconBlockFulu> { pub fn into_full_block( self, - execution_payload: ExecutionPayloadFulu, + execution_payload: ExecutionPayloadDeneb, ) -> SignedBeaconBlockFulu> { let SignedBeaconBlockFulu { message: @@ -608,7 +608,7 @@ impl SignedBeaconBlockFulu> { deposits, voluntary_exits, sync_aggregate, - execution_payload: BlindedPayloadFulu { .. }, + execution_payload: BlindedPayloadDeneb { .. }, bls_to_execution_changes, blob_kzg_commitments, execution_requests, @@ -632,7 +632,7 @@ impl SignedBeaconBlockFulu> { deposits, voluntary_exits, sync_aggregate, - execution_payload: FullPayloadFulu { execution_payload }, + execution_payload: FullPayloadDeneb { execution_payload }, bls_to_execution_changes, blob_kzg_commitments, execution_requests, @@ -660,10 +660,10 @@ impl SignedBeaconBlock> { (SignedBeaconBlock::Deneb(block), Some(ExecutionPayload::Deneb(payload))) => { SignedBeaconBlock::Deneb(block.into_full_block(payload)) } - (SignedBeaconBlock::Electra(block), Some(ExecutionPayload::Electra(payload))) => { + (SignedBeaconBlock::Electra(block), Some(ExecutionPayload::Deneb(payload))) => { SignedBeaconBlock::Electra(block.into_full_block(payload)) } - (SignedBeaconBlock::Fulu(block), Some(ExecutionPayload::Fulu(payload))) => { + (SignedBeaconBlock::Fulu(block), Some(ExecutionPayload::Deneb(payload))) => { SignedBeaconBlock::Fulu(block.into_full_block(payload)) } // avoid wildcard matching forks so that compiler will diff --git a/testing/ef_tests/src/type_name.rs b/testing/ef_tests/src/type_name.rs index b5b2c424d8f..4e508e305d3 100644 --- a/testing/ef_tests/src/type_name.rs +++ b/testing/ef_tests/src/type_name.rs @@ -79,15 +79,11 @@ type_name_generic!(ExecutionPayload); type_name_generic!(ExecutionPayloadBellatrix, "ExecutionPayload"); type_name_generic!(ExecutionPayloadCapella, "ExecutionPayload"); type_name_generic!(ExecutionPayloadDeneb, "ExecutionPayload"); -type_name_generic!(ExecutionPayloadElectra, "ExecutionPayload"); -type_name_generic!(ExecutionPayloadFulu, "ExecutionPayload"); type_name_generic!(FullPayload, "ExecutionPayload"); type_name_generic!(ExecutionPayloadHeader); type_name_generic!(ExecutionPayloadHeaderBellatrix, "ExecutionPayloadHeader"); type_name_generic!(ExecutionPayloadHeaderCapella, "ExecutionPayloadHeader"); type_name_generic!(ExecutionPayloadHeaderDeneb, "ExecutionPayloadHeader"); -type_name_generic!(ExecutionPayloadHeaderElectra, "ExecutionPayloadHeader"); -type_name_generic!(ExecutionPayloadHeaderFulu, "ExecutionPayloadHeader"); type_name_generic!(ExecutionRequests); type_name_generic!(BlindedPayload, "ExecutionPayloadHeader"); type_name!(Fork); diff --git a/testing/ef_tests/tests/tests.rs b/testing/ef_tests/tests/tests.rs index b6264f2e081..032eb4827a2 100644 --- a/testing/ef_tests/tests/tests.rs +++ b/testing/ef_tests/tests/tests.rs @@ -591,12 +591,6 @@ mod ssz_static { .run(); SszStaticHandler::, MainnetEthSpec>::deneb_only() .run(); - SszStaticHandler::, MinimalEthSpec>::electra_only() - .run(); - SszStaticHandler::, MainnetEthSpec>::electra_only() - .run(); - SszStaticHandler::, MinimalEthSpec>::fulu_only().run(); - SszStaticHandler::, MainnetEthSpec>::fulu_only().run(); } #[test] @@ -613,14 +607,6 @@ mod ssz_static { ::deneb_only().run(); SszStaticHandler::, MainnetEthSpec> ::deneb_only().run(); - SszStaticHandler::, MinimalEthSpec> - ::electra_only().run(); - SszStaticHandler::, MainnetEthSpec> - ::electra_only().run(); - SszStaticHandler::, MinimalEthSpec>::fulu_only() - .run(); - SszStaticHandler::, MainnetEthSpec>::fulu_only() - .run(); } #[test]