From cf294ce397d802361144cdabe61873618dc43976 Mon Sep 17 00:00:00 2001 From: Arsenii Kulikov Date: Mon, 23 Sep 2024 18:02:57 +0300 Subject: [PATCH] feat: add `ChainSpec` AT to `EngineTypes` (#11054) --- Cargo.lock | 1 - crates/engine/primitives/Cargo.toml | 1 - crates/engine/primitives/src/lib.rs | 6 ++++-- crates/ethereum/engine-primitives/src/lib.rs | 2 ++ crates/node/types/src/lib.rs | 4 ++-- crates/optimism/node/src/engine.rs | 2 ++ crates/rpc/rpc-engine-api/src/engine_api.rs | 4 ++-- examples/custom-engine-types/src/main.rs | 2 ++ 8 files changed, 14 insertions(+), 8 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 5ff4543d9..53a89476e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -6990,7 +6990,6 @@ name = "reth-engine-primitives" version = "1.0.7" dependencies = [ "alloy-primitives", - "reth-chainspec", "reth-execution-types", "reth-payload-primitives", "reth-primitives", diff --git a/crates/engine/primitives/Cargo.toml b/crates/engine/primitives/Cargo.toml index 43bde32eb..008af4503 100644 --- a/crates/engine/primitives/Cargo.toml +++ b/crates/engine/primitives/Cargo.toml @@ -12,7 +12,6 @@ workspace = true [dependencies] # reth -reth-chainspec.workspace = true reth-execution-types.workspace = true reth-payload-primitives.workspace = true reth-primitives.workspace = true diff --git a/crates/engine/primitives/src/lib.rs b/crates/engine/primitives/src/lib.rs index 284ed9f0f..8e1b6441a 100644 --- a/crates/engine/primitives/src/lib.rs +++ b/crates/engine/primitives/src/lib.rs @@ -11,7 +11,6 @@ mod invalid_block_hook; pub use invalid_block_hook::InvalidBlockHook; -use reth_chainspec::ChainSpec; pub use reth_payload_primitives::{ BuiltPayload, EngineApiMessageVersion, EngineObjectValidationError, PayloadOrAttributes, PayloadTypes, @@ -32,6 +31,9 @@ pub trait EngineTypes: + Serialize + 'static { + /// The chain specification of the node. + type ChainSpec: Send + Sync; + /// Execution Payload V1 type. type ExecutionPayloadV1: DeserializeOwned + Serialize + Clone + Unpin + Send + Sync + 'static; /// Execution Payload V2 type. @@ -44,7 +46,7 @@ pub trait EngineTypes: /// Validates the presence or exclusion of fork-specific fields based on the payload attributes /// and the message version. fn validate_version_specific_fields( - chain_spec: &ChainSpec, + chain_spec: &Self::ChainSpec, version: EngineApiMessageVersion, payload_or_attrs: PayloadOrAttributes<'_, Self::PayloadAttributes>, ) -> Result<(), EngineObjectValidationError>; diff --git a/crates/ethereum/engine-primitives/src/lib.rs b/crates/ethereum/engine-primitives/src/lib.rs index 5554beea3..955cdf8bb 100644 --- a/crates/ethereum/engine-primitives/src/lib.rs +++ b/crates/ethereum/engine-primitives/src/lib.rs @@ -36,6 +36,8 @@ impl PayloadTypes for EthEngineTypes { } impl EngineTypes for EthEngineTypes { + type ChainSpec = ChainSpec; + type ExecutionPayloadV1 = ExecutionPayloadV1; type ExecutionPayloadV2 = ExecutionPayloadEnvelopeV2; type ExecutionPayloadV3 = ExecutionPayloadEnvelopeV3; diff --git a/crates/node/types/src/lib.rs b/crates/node/types/src/lib.rs index 2ad2f8abd..dda669817 100644 --- a/crates/node/types/src/lib.rs +++ b/crates/node/types/src/lib.rs @@ -39,7 +39,7 @@ pub trait NodeTypes: Send + Sync + Unpin + 'static { /// The type that configures an Ethereum-like node with an engine for consensus. pub trait NodeTypesWithEngine: NodeTypes { /// The node's engine types, defining the interaction with the consensus engine. - type Engine: EngineTypes; + type Engine: EngineTypes; } /// A helper trait that is downstream of the [`NodeTypesWithEngine`] trait and adds database to the @@ -166,7 +166,7 @@ where impl NodeTypesWithEngine for AnyNodeTypesWithEngine where P: NodePrimitives + Send + Sync + Unpin + 'static, - E: EngineTypes + Send + Sync + Unpin, + E: EngineTypes + Send + Sync + Unpin, C: EthChainSpec, { type Engine = E; diff --git a/crates/optimism/node/src/engine.rs b/crates/optimism/node/src/engine.rs index 0b0785306..4bd6b78ea 100644 --- a/crates/optimism/node/src/engine.rs +++ b/crates/optimism/node/src/engine.rs @@ -27,6 +27,8 @@ impl PayloadTypes for OptimismEngineTypes { } impl EngineTypes for OptimismEngineTypes { + type ChainSpec = ChainSpec; + type ExecutionPayloadV1 = ExecutionPayloadV1; type ExecutionPayloadV2 = ExecutionPayloadEnvelopeV2; type ExecutionPayloadV3 = OptimismExecutionPayloadEnvelopeV3; diff --git a/crates/rpc/rpc-engine-api/src/engine_api.rs b/crates/rpc/rpc-engine-api/src/engine_api.rs index a09ef8661..ed91c0102 100644 --- a/crates/rpc/rpc-engine-api/src/engine_api.rs +++ b/crates/rpc/rpc-engine-api/src/engine_api.rs @@ -71,7 +71,7 @@ struct EngineApiInner { impl EngineApi where Provider: HeaderProvider + BlockReader + StateProviderFactory + EvmEnvProvider + 'static, - EngineT: EngineTypes, + EngineT: EngineTypes, Pool: TransactionPool + 'static, { /// Create new instance of [`EngineApi`]. @@ -622,7 +622,7 @@ where impl EngineApiServer for EngineApi where Provider: HeaderProvider + BlockReader + StateProviderFactory + EvmEnvProvider + 'static, - EngineT: EngineTypes, + EngineT: EngineTypes, Pool: TransactionPool + 'static, { /// Handler for `engine_newPayloadV1` diff --git a/examples/custom-engine-types/src/main.rs b/examples/custom-engine-types/src/main.rs index 6b2e2c8ad..ede84485d 100644 --- a/examples/custom-engine-types/src/main.rs +++ b/examples/custom-engine-types/src/main.rs @@ -167,6 +167,8 @@ impl PayloadTypes for CustomEngineTypes { } impl EngineTypes for CustomEngineTypes { + type ChainSpec = ChainSpec; + type ExecutionPayloadV1 = ExecutionPayloadV1; type ExecutionPayloadV2 = ExecutionPayloadEnvelopeV2; type ExecutionPayloadV3 = ExecutionPayloadEnvelopeV3;