From a699ee5405dd31c55555ff20e42713ed075758fb Mon Sep 17 00:00:00 2001 From: Yohann Kazoula Date: Thu, 13 Feb 2025 11:02:33 +0200 Subject: [PATCH] Upstream ExecutionData to alloy (#14188) --- Cargo.lock | 1 - crates/engine/primitives/src/lib.rs | 43 ++------------------ crates/engine/tree/src/tree/mod.rs | 5 ++- crates/engine/util/src/reorg.rs | 6 +-- crates/ethereum/engine-primitives/src/lib.rs | 4 +- crates/node/builder/src/rpc.rs | 6 +-- crates/optimism/node/src/engine.rs | 6 +-- crates/optimism/node/src/rpc.rs | 3 +- crates/optimism/rpc/src/engine.rs | 6 +-- crates/payload/validator/Cargo.toml | 1 - crates/payload/validator/src/lib.rs | 3 +- crates/rpc/rpc-builder/Cargo.toml | 2 +- crates/rpc/rpc-builder/src/lib.rs | 6 +-- crates/rpc/rpc-engine-api/src/engine_api.rs | 12 +++--- crates/rpc/rpc/src/validation.rs | 6 +-- examples/custom-engine-types/src/main.rs | 7 ++-- 16 files changed, 40 insertions(+), 77 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 895ca0b15..d0bfd3ffc 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -8758,7 +8758,6 @@ version = "1.2.0" dependencies = [ "alloy-rpc-types", "reth-chainspec", - "reth-engine-primitives", "reth-primitives", "reth-primitives-traits", ] diff --git a/crates/engine/primitives/src/lib.rs b/crates/engine/primitives/src/lib.rs index 394d731bb..1aac9398d 100644 --- a/crates/engine/primitives/src/lib.rs +++ b/crates/engine/primitives/src/lib.rs @@ -12,9 +12,9 @@ extern crate alloc; use alloy_consensus::BlockHeader; -use alloy_eips::{eip7685::Requests, Decodable2718}; +use alloy_eips::eip7685::Requests; use alloy_primitives::B256; -use alloy_rpc_types_engine::{ExecutionPayloadSidecar, PayloadError}; +use alloy_rpc_types_engine::{ExecutionData, PayloadError}; use core::fmt::{self, Debug}; use reth_payload_primitives::{ validate_execution_requests, BuiltPayload, EngineApiMessageVersion, @@ -23,7 +23,7 @@ use reth_payload_primitives::{ }; use reth_primitives::{NodePrimitives, SealedBlock}; use reth_primitives_traits::Block; -use serde::{de::DeserializeOwned, Deserialize, Serialize}; +use serde::{de::DeserializeOwned, Serialize}; mod error; pub use error::*; @@ -40,41 +40,6 @@ pub use event::*; mod invalid_block_hook; pub use invalid_block_hook::InvalidBlockHook; -/// Struct aggregating [`alloy_rpc_types_engine::ExecutionPayload`] and [`ExecutionPayloadSidecar`] -/// and encapsulating complete payload supplied for execution. -#[derive(Debug, Clone, Serialize, Deserialize)] -pub struct ExecutionData { - /// Execution payload. - pub payload: alloy_rpc_types_engine::ExecutionPayload, - /// Additional fork-specific fields. - pub sidecar: ExecutionPayloadSidecar, -} - -impl ExecutionData { - /// Creates new instance of [`ExecutionData`]. - pub const fn new( - payload: alloy_rpc_types_engine::ExecutionPayload, - sidecar: ExecutionPayloadSidecar, - ) -> Self { - Self { payload, sidecar } - } - - /// Tries to create a new unsealed block from the given payload and payload sidecar. - /// - /// Performs additional validation of `extra_data` and `base_fee_per_gas` fields. - /// - /// # Note - /// - /// The log bloom is assumed to be validated during serialization. - /// - /// See - pub fn try_into_block( - self, - ) -> Result, PayloadError> { - self.payload.try_into_block_with_sidecar(&self.sidecar) - } -} - /// An execution payload. pub trait ExecutionPayload: Serialize + DeserializeOwned + Debug + Clone + Send + Sync + 'static @@ -152,7 +117,7 @@ pub trait EngineTypes: /// Execution data. type ExecutionData: ExecutionPayload; - /// Converts a [`BuiltPayload`] into an [`ExecutionPayload`] and [`ExecutionPayloadSidecar`]. + /// Converts a [`BuiltPayload`] into an [`ExecutionData`]. fn block_to_payload( block: SealedBlock< <::Primitives as NodePrimitives>::Block, diff --git a/crates/engine/tree/src/tree/mod.rs b/crates/engine/tree/src/tree/mod.rs index 3ba33f1b1..b0f83a0d7 100644 --- a/crates/engine/tree/src/tree/mod.rs +++ b/crates/engine/tree/src/tree/mod.rs @@ -3200,12 +3200,13 @@ mod tests { use alloy_primitives::Bytes; use alloy_rlp::Decodable; use alloy_rpc_types_engine::{ - CancunPayloadFields, ExecutionPayloadSidecar, ExecutionPayloadV1, ExecutionPayloadV3, + CancunPayloadFields, ExecutionData, ExecutionPayloadSidecar, ExecutionPayloadV1, + ExecutionPayloadV3, }; use assert_matches::assert_matches; use reth_chain_state::{test_utils::TestBlockBuilder, BlockState}; use reth_chainspec::{ChainSpec, HOLESKY, MAINNET}; - use reth_engine_primitives::{ExecutionData, ForkchoiceStatus}; + use reth_engine_primitives::ForkchoiceStatus; use reth_ethereum_consensus::EthBeaconConsensus; use reth_ethereum_engine_primitives::{EthEngineTypes, EthereumEngineValidator}; use reth_ethereum_primitives::{Block, EthPrimitives}; diff --git a/crates/engine/util/src/reorg.rs b/crates/engine/util/src/reorg.rs index 4a521b1ab..f0232970e 100644 --- a/crates/engine/util/src/reorg.rs +++ b/crates/engine/util/src/reorg.rs @@ -2,14 +2,14 @@ use alloy_consensus::{Header, Transaction}; use alloy_rpc_types_engine::{ - CancunPayloadFields, ExecutionPayload, ExecutionPayloadSidecar, ForkchoiceState, PayloadStatus, + CancunPayloadFields, ExecutionData, ExecutionPayload, ExecutionPayloadSidecar, ForkchoiceState, + PayloadStatus, }; use futures::{stream::FuturesUnordered, Stream, StreamExt, TryFutureExt}; use itertools::Either; use reth_chainspec::EthChainSpec; use reth_engine_primitives::{ - BeaconEngineMessage, BeaconOnNewPayloadError, EngineTypes, ExecutionData, - ExecutionPayload as _, OnForkChoiceUpdated, + BeaconEngineMessage, BeaconOnNewPayloadError, EngineTypes, OnForkChoiceUpdated, }; use reth_errors::{BlockExecutionError, BlockValidationError, RethError, RethResult}; use reth_ethereum_forks::EthereumHardforks; diff --git a/crates/ethereum/engine-primitives/src/lib.rs b/crates/ethereum/engine-primitives/src/lib.rs index 0a93f386e..39644fed0 100644 --- a/crates/ethereum/engine-primitives/src/lib.rs +++ b/crates/ethereum/engine-primitives/src/lib.rs @@ -13,14 +13,14 @@ extern crate alloc; mod payload; use alloc::sync::Arc; -use alloy_rpc_types_engine::{ExecutionPayload, PayloadError}; +use alloy_rpc_types_engine::{ExecutionData, ExecutionPayload, PayloadError}; pub use alloy_rpc_types_engine::{ ExecutionPayloadEnvelopeV2, ExecutionPayloadEnvelopeV3, ExecutionPayloadEnvelopeV4, ExecutionPayloadV1, PayloadAttributes as EthPayloadAttributes, }; pub use payload::{EthBuiltPayload, EthPayloadBuilderAttributes}; use reth_chainspec::ChainSpec; -use reth_engine_primitives::{EngineTypes, EngineValidator, ExecutionData, PayloadValidator}; +use reth_engine_primitives::{EngineTypes, EngineValidator, PayloadValidator}; use reth_payload_primitives::{ validate_version_specific_fields, BuiltPayload, EngineApiMessageVersion, EngineObjectValidationError, PayloadOrAttributes, PayloadTypes, diff --git a/crates/node/builder/src/rpc.rs b/crates/node/builder/src/rpc.rs index fac8146f1..cef42466a 100644 --- a/crates/node/builder/src/rpc.rs +++ b/crates/node/builder/src/rpc.rs @@ -7,12 +7,12 @@ use std::{ }; use crate::{BeaconConsensusEngineEvent, BeaconConsensusEngineHandle, EthApiBuilderCtx}; -use alloy_rpc_types::engine::ClientVersionV1; +use alloy_rpc_types::engine::{ClientVersionV1, ExecutionData}; use futures::TryFutureExt; use reth_chainspec::EthereumHardforks; use reth_node_api::{ - AddOnsContext, BlockTy, EngineTypes, EngineValidator, ExecutionData, FullNodeComponents, - NodeAddOns, NodeTypes, NodeTypesWithEngine, + AddOnsContext, BlockTy, EngineTypes, EngineValidator, FullNodeComponents, NodeAddOns, + NodeTypes, NodeTypesWithEngine, }; use reth_node_core::{ node_config::NodeConfig, diff --git a/crates/optimism/node/src/engine.rs b/crates/optimism/node/src/engine.rs index 82ba137fc..bfa2d86d8 100644 --- a/crates/optimism/node/src/engine.rs +++ b/crates/optimism/node/src/engine.rs @@ -1,5 +1,5 @@ use alloy_rpc_types_engine::{ - ExecutionPayload, ExecutionPayloadEnvelopeV2, ExecutionPayloadV1, PayloadError, + ExecutionData, ExecutionPayload, ExecutionPayloadEnvelopeV2, ExecutionPayloadV1, PayloadError, }; use op_alloy_rpc_types_engine::{ OpExecutionPayloadEnvelopeV3, OpExecutionPayloadEnvelopeV4, OpPayloadAttributes, @@ -11,8 +11,8 @@ use reth_node_api::{ EngineObjectValidationError, MessageValidationKind, PayloadOrAttributes, PayloadTypes, VersionSpecificValidationError, }, - validate_version_specific_fields, BuiltPayload, EngineTypes, EngineValidator, ExecutionData, - NodePrimitives, PayloadValidator, + validate_version_specific_fields, BuiltPayload, EngineTypes, EngineValidator, NodePrimitives, + PayloadValidator, }; use reth_optimism_chainspec::OpChainSpec; use reth_optimism_forks::{OpHardfork, OpHardforks}; diff --git a/crates/optimism/node/src/rpc.rs b/crates/optimism/node/src/rpc.rs index 06047bb4e..1da0d0dc1 100644 --- a/crates/optimism/node/src/rpc.rs +++ b/crates/optimism/node/src/rpc.rs @@ -2,9 +2,10 @@ pub use reth_optimism_rpc::OpEngineApi; +use alloy_rpc_types_engine::ExecutionData; use reth_chainspec::EthereumHardforks; use reth_node_api::{ - AddOnsContext, EngineTypes, ExecutionData, FullNodeComponents, NodeTypes, NodeTypesWithEngine, + AddOnsContext, EngineTypes, FullNodeComponents, NodeTypes, NodeTypesWithEngine, }; use reth_node_builder::rpc::{BasicEngineApiBuilder, EngineApiBuilder, EngineValidatorBuilder}; diff --git a/crates/optimism/rpc/src/engine.rs b/crates/optimism/rpc/src/engine.rs index 1d03ddfda..52dba10eb 100644 --- a/crates/optimism/rpc/src/engine.rs +++ b/crates/optimism/rpc/src/engine.rs @@ -3,15 +3,15 @@ use alloy_eips::eip7685::Requests; use alloy_primitives::{BlockHash, B256, U64}; use alloy_rpc_types_engine::{ - ClientVersionV1, ExecutionPayloadBodiesV1, ExecutionPayloadInputV2, ExecutionPayloadV3, - ForkchoiceState, ForkchoiceUpdated, PayloadId, PayloadStatus, + ClientVersionV1, ExecutionData, ExecutionPayloadBodiesV1, ExecutionPayloadInputV2, + ExecutionPayloadV3, ForkchoiceState, ForkchoiceUpdated, PayloadId, PayloadStatus, }; use derive_more::Constructor; use jsonrpsee::proc_macros::rpc; use jsonrpsee_core::{server::RpcModule, RpcResult}; use op_alloy_rpc_types_engine::OpExecutionPayloadV4; use reth_chainspec::EthereumHardforks; -use reth_node_api::{EngineTypes, EngineValidator, ExecutionData}; +use reth_node_api::{EngineTypes, EngineValidator}; use reth_provider::{BlockReader, HeaderProvider, StateProviderFactory}; use reth_rpc_api::IntoEngineApiRpcModule; use reth_rpc_engine_api::{EngineApi, EngineApiServer}; diff --git a/crates/payload/validator/Cargo.toml b/crates/payload/validator/Cargo.toml index 11d0480da..5c34a9f45 100644 --- a/crates/payload/validator/Cargo.toml +++ b/crates/payload/validator/Cargo.toml @@ -16,7 +16,6 @@ workspace = true reth-chainspec.workspace = true reth-primitives.workspace = true reth-primitives-traits.workspace = true -reth-engine-primitives.workspace = true # alloy alloy-rpc-types = { workspace = true, features = ["engine"] } diff --git a/crates/payload/validator/src/lib.rs b/crates/payload/validator/src/lib.rs index 745de4b40..e1bded98c 100644 --- a/crates/payload/validator/src/lib.rs +++ b/crates/payload/validator/src/lib.rs @@ -8,9 +8,8 @@ #![cfg_attr(not(test), warn(unused_crate_dependencies))] #![cfg_attr(docsrs, feature(doc_cfg, doc_auto_cfg))] -use alloy_rpc_types::engine::{MaybeCancunPayloadFields, PayloadError}; +use alloy_rpc_types::engine::{ExecutionData, MaybeCancunPayloadFields, PayloadError}; use reth_chainspec::EthereumHardforks; -use reth_engine_primitives::ExecutionData; use reth_primitives::SealedBlock; use reth_primitives_traits::{Block, SignedTransaction}; use std::sync::Arc; diff --git a/crates/rpc/rpc-builder/Cargo.toml b/crates/rpc/rpc-builder/Cargo.toml index 16caf4d79..16c56bd9c 100644 --- a/crates/rpc/rpc-builder/Cargo.toml +++ b/crates/rpc/rpc-builder/Cargo.toml @@ -70,8 +70,8 @@ reth-engine-primitives.workspace = true alloy-primitives.workspace = true alloy-rpc-types-eth.workspace = true alloy-rpc-types-trace.workspace = true -alloy-rpc-types-engine.workspace = true alloy-eips.workspace = true +alloy-rpc-types-engine.workspace = true tokio = { workspace = true, features = ["rt", "rt-multi-thread"] } serde_json.workspace = true diff --git a/crates/rpc/rpc-builder/src/lib.rs b/crates/rpc/rpc-builder/src/lib.rs index ee6fa5e9e..4749021c0 100644 --- a/crates/rpc/rpc-builder/src/lib.rs +++ b/crates/rpc/rpc-builder/src/lib.rs @@ -17,7 +17,7 @@ //! //! ``` //! use reth_consensus::{ConsensusError, FullConsensus}; -//! use reth_engine_primitives::{ExecutionData, PayloadValidator}; +//! use reth_engine_primitives::PayloadValidator; //! use reth_evm::{execute::BlockExecutorProvider, ConfigureEvm}; //! use reth_evm_ethereum::EthEvmConfig; //! use reth_network_api::{NetworkInfo, Peers}; @@ -87,7 +87,7 @@ //! //! ``` //! use reth_consensus::{ConsensusError, FullConsensus}; -//! use reth_engine_primitives::{ExecutionData, PayloadValidator}; +//! use reth_engine_primitives::PayloadValidator; //! use reth_evm::{execute::BlockExecutorProvider, ConfigureEvm}; //! use reth_evm_ethereum::EthEvmConfig; //! use reth_network_api::{NetworkInfo, Peers}; @@ -641,7 +641,7 @@ where /// /// ```no_run /// use reth_consensus::noop::NoopConsensus; - /// use reth_engine_primitives::{ExecutionData, PayloadValidator}; + /// use reth_engine_primitives::PayloadValidator; /// use reth_evm::ConfigureEvm; /// use reth_evm_ethereum::execute::EthExecutorProvider; /// use reth_network_api::noop::NoopNetwork; diff --git a/crates/rpc/rpc-engine-api/src/engine_api.rs b/crates/rpc/rpc-engine-api/src/engine_api.rs index e990479a0..41141018d 100644 --- a/crates/rpc/rpc-engine-api/src/engine_api.rs +++ b/crates/rpc/rpc-engine-api/src/engine_api.rs @@ -9,18 +9,16 @@ use alloy_eips::{ }; use alloy_primitives::{BlockHash, BlockNumber, B256, U64}; use alloy_rpc_types_engine::{ - CancunPayloadFields, ClientVersionV1, ExecutionPayload, ExecutionPayloadBodiesV1, - ExecutionPayloadBodyV1, ExecutionPayloadInputV2, ExecutionPayloadSidecar, ExecutionPayloadV1, - ExecutionPayloadV3, ForkchoiceState, ForkchoiceUpdated, PayloadId, PayloadStatus, - PraguePayloadFields, TransitionConfiguration, + CancunPayloadFields, ClientVersionV1, ExecutionData, ExecutionPayload, + ExecutionPayloadBodiesV1, ExecutionPayloadBodyV1, ExecutionPayloadInputV2, + ExecutionPayloadSidecar, ExecutionPayloadV1, ExecutionPayloadV3, ForkchoiceState, + ForkchoiceUpdated, PayloadId, PayloadStatus, PraguePayloadFields, TransitionConfiguration, }; use async_trait::async_trait; use jsonrpsee_core::{server::RpcModule, RpcResult}; use parking_lot::Mutex; use reth_chainspec::{EthereumHardfork, EthereumHardforks}; -use reth_engine_primitives::{ - BeaconConsensusEngineHandle, EngineTypes, EngineValidator, ExecutionData, -}; +use reth_engine_primitives::{BeaconConsensusEngineHandle, EngineTypes, EngineValidator}; use reth_payload_builder::PayloadStore; use reth_payload_primitives::{ validate_payload_timestamp, EngineApiMessageVersion, PayloadBuilderAttributes, diff --git a/crates/rpc/rpc/src/validation.rs b/crates/rpc/rpc/src/validation.rs index e1597aaac..c7ab92a7b 100644 --- a/crates/rpc/rpc/src/validation.rs +++ b/crates/rpc/rpc/src/validation.rs @@ -7,14 +7,14 @@ use alloy_rpc_types_beacon::relay::{ BuilderBlockValidationRequestV3, BuilderBlockValidationRequestV4, }; use alloy_rpc_types_engine::{ - BlobsBundleV1, CancunPayloadFields, ExecutionPayload, ExecutionPayloadSidecar, PayloadError, - PraguePayloadFields, + BlobsBundleV1, CancunPayloadFields, ExecutionData, ExecutionPayload, ExecutionPayloadSidecar, + PayloadError, PraguePayloadFields, }; use async_trait::async_trait; use jsonrpsee::core::RpcResult; use reth_chainspec::{ChainSpecProvider, EthereumHardforks}; use reth_consensus::{Consensus, FullConsensus, PostExecutionInput}; -use reth_engine_primitives::{ExecutionData, PayloadValidator}; +use reth_engine_primitives::PayloadValidator; use reth_errors::{BlockExecutionError, ConsensusError, ProviderError}; use reth_evm::execute::{BlockExecutorProvider, Executor}; use reth_metrics::{metrics, metrics::Gauge, Metrics}; diff --git a/examples/custom-engine-types/src/main.rs b/examples/custom-engine-types/src/main.rs index ca89b82d4..faf62260e 100644 --- a/examples/custom-engine-types/src/main.rs +++ b/examples/custom-engine-types/src/main.rs @@ -22,8 +22,9 @@ use alloy_genesis::Genesis; use alloy_primitives::{Address, B256}; use alloy_rpc_types::{ engine::{ - ExecutionPayloadEnvelopeV2, ExecutionPayloadEnvelopeV3, ExecutionPayloadEnvelopeV4, - ExecutionPayloadV1, PayloadAttributes as EthPayloadAttributes, PayloadId, + ExecutionData, ExecutionPayloadEnvelopeV2, ExecutionPayloadEnvelopeV3, + ExecutionPayloadEnvelopeV4, ExecutionPayloadV1, PayloadAttributes as EthPayloadAttributes, + PayloadId, }, Withdrawal, }; @@ -53,7 +54,7 @@ use reth_engine_local::payload::UnsupportedLocalAttributes; use reth_ethereum_payload_builder::EthereumBuilderConfig; use reth_node_api::{ payload::{EngineApiMessageVersion, EngineObjectValidationError, PayloadOrAttributes}, - validate_version_specific_fields, AddOnsContext, EngineTypes, EngineValidator, ExecutionData, + validate_version_specific_fields, AddOnsContext, EngineTypes, EngineValidator, FullNodeComponents, PayloadAttributes, PayloadBuilderAttributes, PayloadValidator, }; use reth_node_core::{args::RpcServerArgs, node_config::NodeConfig};