Skip to content

Commit

Permalink
chore: move and integrate ConfigureEvmFor (#13896)
Browse files Browse the repository at this point in the history
  • Loading branch information
Rjected authored Jan 21, 2025
1 parent c1fd0ce commit ace28d8
Show file tree
Hide file tree
Showing 11 changed files with 59 additions and 60 deletions.
6 changes: 3 additions & 3 deletions crates/engine/invalid-block-hooks/src/witness.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ use pretty_assertions::Comparison;
use reth_chainspec::{EthChainSpec, EthereumHardforks};
use reth_engine_primitives::InvalidBlockHook;
use reth_evm::{
state_change::post_block_balance_increments, system_calls::SystemCaller, ConfigureEvm, Evm,
state_change::post_block_balance_increments, system_calls::SystemCaller, ConfigureEvmFor, Evm,
};
use reth_primitives::{NodePrimitives, RecoveredBlock, SealedHeader};
use reth_primitives_traits::{BlockBody, SignedTransaction};
Expand Down Expand Up @@ -63,7 +63,7 @@ where
) -> eyre::Result<()>
where
N: NodePrimitives,
EvmConfig: ConfigureEvm<Header = N::BlockHeader, Transaction = N::SignedTx>,
EvmConfig: ConfigureEvmFor<N>,
{
// TODO(alexey): unify with `DebugApi::debug_execution_witness`

Expand Down Expand Up @@ -289,7 +289,7 @@ where
+ Send
+ Sync
+ 'static,
EvmConfig: ConfigureEvm<Header = N::BlockHeader, Transaction = N::SignedTx>,
EvmConfig: ConfigureEvmFor<N>,
{
fn on_invalid_block(
&self,
Expand Down
6 changes: 3 additions & 3 deletions crates/ethereum/node/src/payload.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,9 @@ use reth_ethereum_engine_primitives::{
EthBuiltPayload, EthPayloadAttributes, EthPayloadBuilderAttributes,
};
use reth_ethereum_payload_builder::EthereumBuilderConfig;
use reth_evm::ConfigureEvm;
use reth_evm::ConfigureEvmFor;
use reth_evm_ethereum::EthEvmConfig;
use reth_node_api::{FullNodeTypes, HeaderTy, NodeTypesWithEngine, TxTy};
use reth_node_api::{FullNodeTypes, NodeTypesWithEngine, TxTy};
use reth_node_builder::{
components::PayloadServiceBuilder, BuilderContext, PayloadBuilderConfig, PayloadTypes,
};
Expand All @@ -33,7 +33,7 @@ impl EthereumPayloadBuilder {
where
Types: NodeTypesWithEngine<ChainSpec = ChainSpec, Primitives = EthPrimitives>,
Node: FullNodeTypes<Types = Types>,
Evm: ConfigureEvm<Header = HeaderTy<Types>, Transaction = TxTy<Node::Types>>,
Evm: ConfigureEvmFor<Types::Primitives>,
Pool: TransactionPool<Transaction: PoolTransaction<Consensus = TxTy<Node::Types>>>
+ Unpin
+ 'static,
Expand Down
31 changes: 31 additions & 0 deletions crates/evm/src/aliases.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
//! Helper aliases when working with [`NodePrimitives`] and the traits in this crate.
use crate::{ConfigureEvm, ConfigureEvmEnv};
use reth_primitives_traits::NodePrimitives;

/// This is a type alias to make type bounds simpler when we have a [`NodePrimitives`] and need a
/// [`ConfigureEvmEnv`] whose associated types match the [`NodePrimitives`] associated types.
pub trait ConfigureEvmEnvFor<N: NodePrimitives>:
ConfigureEvmEnv<Header = N::BlockHeader, Transaction = N::SignedTx>
{
}

impl<N, C> ConfigureEvmEnvFor<N> for C
where
N: NodePrimitives,
C: ConfigureEvmEnv<Header = N::BlockHeader, Transaction = N::SignedTx>,
{
}

/// This is a type alias to make type bounds simpler when we have a [`NodePrimitives`] and need a
/// [`ConfigureEvm`] whose associated types match the [`NodePrimitives`] associated types.
pub trait ConfigureEvmFor<N: NodePrimitives>:
ConfigureEvm<Header = N::BlockHeader, Transaction = N::SignedTx>
{
}

impl<N, C> ConfigureEvmFor<N> for C
where
N: NodePrimitives,
C: ConfigureEvm<Header = N::BlockHeader, Transaction = N::SignedTx>,
{
}
3 changes: 3 additions & 0 deletions crates/evm/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,9 @@ pub mod env;
pub mod execute;
pub use env::EvmEnv;

mod aliases;
pub use aliases::*;

#[cfg(feature = "std")]
pub mod metrics;
pub mod noop;
Expand Down
7 changes: 3 additions & 4 deletions crates/node/api/src/node.rs
Original file line number Diff line number Diff line change
@@ -1,17 +1,16 @@
//! Traits for configuring a node.
use crate::ConfigureEvm;
use alloy_rpc_types_engine::JwtSecret;
use reth_consensus::{ConsensusError, FullConsensus};
use reth_db_api::{
database_metrics::{DatabaseMetadata, DatabaseMetrics},
Database,
};
use reth_engine_primitives::BeaconConsensusEngineHandle;
use reth_evm::execute::BlockExecutorProvider;
use reth_evm::{execute::BlockExecutorProvider, ConfigureEvmFor};
use reth_network_api::FullNetwork;
use reth_node_core::node_config::NodeConfig;
use reth_node_types::{HeaderTy, NodeTypes, NodeTypesWithDBAdapter, NodeTypesWithEngine, TxTy};
use reth_node_types::{NodeTypes, NodeTypesWithDBAdapter, NodeTypesWithEngine, TxTy};
use reth_payload_builder_primitives::PayloadBuilder;
use reth_provider::FullProvider;
use reth_tasks::TaskExecutor;
Expand Down Expand Up @@ -52,7 +51,7 @@ pub trait FullNodeComponents: FullNodeTypes + Clone + 'static {
type Pool: TransactionPool<Transaction: PoolTransaction<Consensus = TxTy<Self::Types>>> + Unpin;

/// The node's EVM configuration, defining settings for the Ethereum Virtual Machine.
type Evm: ConfigureEvm<Header = HeaderTy<Self::Types>, Transaction = TxTy<Self::Types>>;
type Evm: ConfigureEvmFor<<Self::Types as NodeTypes>::Primitives>;

/// The type that knows how to execute blocks.
type Executor: BlockExecutorProvider<Primitives = <Self::Types as NodeTypes>::Primitives>;
Expand Down
31 changes: 1 addition & 30 deletions crates/node/builder/src/aliases.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
use reth_evm::{ConfigureEvm, ConfigureEvmEnv};
use reth_network::NetworkPrimitives;
use reth_node_api::{BlockBody, NodePrimitives};
use reth_node_api::BlockBody;
use reth_provider::BlockReader;

/// This is a type alias to make type bounds simpler, when we have a [`NetworkPrimitives`] and need
Expand All @@ -26,31 +25,3 @@ where
>,
{
}

/// This is a type alias to make type bounds simpler when we have a [`NodePrimitives`] and need a
/// [`ConfigureEvmEnv`] whose associated types match the [`NodePrimitives`] associated types.
pub trait ConfigureEvmEnvFor<N: NodePrimitives>:
ConfigureEvmEnv<Header = N::BlockHeader, Transaction = N::SignedTx>
{
}

impl<N, C> ConfigureEvmEnvFor<N> for C
where
N: NodePrimitives,
C: ConfigureEvmEnv<Header = N::BlockHeader, Transaction = N::SignedTx>,
{
}

/// This is a type alias to make type bounds simpler when we have a [`NodePrimitives`] and need a
/// [`ConfigureEvm`] whose associated types match the [`NodePrimitives`] associated types.
pub trait ConfigureEvmFor<N: NodePrimitives>:
ConfigureEvm<Header = N::BlockHeader, Transaction = N::SignedTx>
{
}

impl<N, C> ConfigureEvmFor<N> for C
where
N: NodePrimitives,
C: ConfigureEvm<Header = N::BlockHeader, Transaction = N::SignedTx>,
{
}
6 changes: 3 additions & 3 deletions crates/node/builder/src/components/builder.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,10 @@ use crate::{
Components, ConsensusBuilder, ExecutorBuilder, NetworkBuilder, NodeComponents,
PayloadServiceBuilder, PoolBuilder,
},
BuilderContext, ConfigureEvm, FullNodeTypes,
BuilderContext, FullNodeTypes,
};
use reth_consensus::{ConsensusError, FullConsensus};
use reth_evm::execute::BlockExecutorProvider;
use reth_evm::{execute::BlockExecutorProvider, ConfigureEvmFor};
use reth_network::NetworkPrimitives;
use reth_node_api::{BlockTy, BodyTy, HeaderTy, NodeTypes, NodeTypesWithEngine, TxTy};
use reth_payload_builder::PayloadBuilderHandle;
Expand Down Expand Up @@ -405,7 +405,7 @@ where
Pool: TransactionPool<Transaction: PoolTransaction<Consensus = TxTy<Node::Types>>>
+ Unpin
+ 'static,
EVM: ConfigureEvm<Header = HeaderTy<Node::Types>, Transaction = TxTy<Node::Types>>,
EVM: ConfigureEvmFor<<Node::Types as NodeTypes>::Primitives>,
Executor: BlockExecutorProvider<Primitives = <Node::Types as NodeTypes>::Primitives>,
Cons: FullConsensus<<Node::Types as NodeTypes>::Primitives, Error = ConsensusError>
+ Clone
Expand Down
8 changes: 4 additions & 4 deletions crates/node/builder/src/components/execute.rs
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
//! EVM component for the node builder.
use crate::{BuilderContext, FullNodeTypes};
use reth_evm::execute::BlockExecutorProvider;
use reth_node_api::{ConfigureEvm, HeaderTy, TxTy};
use reth_evm::{execute::BlockExecutorProvider, ConfigureEvmFor};
use reth_node_api::NodeTypes;
use std::future::Future;

/// A type that knows how to build the executor types.
pub trait ExecutorBuilder<Node: FullNodeTypes>: Send {
/// The EVM config to use.
///
/// This provides the node with the necessary configuration to configure an EVM.
type EVM: ConfigureEvm<Header = HeaderTy<Node::Types>, Transaction = TxTy<Node::Types>>;
type EVM: ConfigureEvmFor<<Node::Types as NodeTypes>::Primitives>;

/// The type that knows how to execute blocks.
type Executor: BlockExecutorProvider<
Expand All @@ -26,7 +26,7 @@ pub trait ExecutorBuilder<Node: FullNodeTypes>: Send {
impl<Node, F, Fut, EVM, Executor> ExecutorBuilder<Node> for F
where
Node: FullNodeTypes,
EVM: ConfigureEvm<Header = HeaderTy<Node::Types>, Transaction = TxTy<Node::Types>>,
EVM: ConfigureEvmFor<<Node::Types as NodeTypes>::Primitives>,
Executor:
BlockExecutorProvider<Primitives = <Node::Types as reth_node_api::NodeTypes>::Primitives>,
F: FnOnce(&BuilderContext<Node>) -> Fut + Send,
Expand Down
4 changes: 2 additions & 2 deletions crates/node/builder/src/components/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ use reth_network_p2p::BlockClient;

use crate::{ConfigureEvm, FullNodeTypes};
use reth_consensus::{ConsensusError, FullConsensus};
use reth_evm::execute::BlockExecutorProvider;
use reth_evm::{execute::BlockExecutorProvider, ConfigureEvmFor};
use reth_network::{NetworkHandle, NetworkPrimitives};
use reth_network_api::FullNetwork;
use reth_node_api::{
Expand All @@ -43,7 +43,7 @@ pub trait NodeComponents<T: FullNodeTypes>: Clone + Unpin + Send + Sync + 'stati
type Pool: TransactionPool<Transaction: PoolTransaction<Consensus = TxTy<T::Types>>> + Unpin;

/// The node's EVM configuration, defining settings for the Ethereum Virtual Machine.
type Evm: ConfigureEvm<Header = HeaderTy<T::Types>, Transaction = TxTy<T::Types>>;
type Evm: ConfigureEvmFor<<T::Types as NodeTypes>::Primitives>;

/// The type that knows how to execute blocks.
type Executor: BlockExecutorProvider<Primitives = <T::Types as NodeTypes>::Primitives>;
Expand Down
11 changes: 3 additions & 8 deletions crates/optimism/evm/src/execute.rs
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ use reth_evm::{
},
state_change::post_block_balance_increments,
system_calls::{OnStateHook, SystemCaller},
ConfigureEvm, Evm, TxEnvOverrides,
ConfigureEvmFor, Evm, TxEnvOverrides,
};
use reth_optimism_chainspec::OpChainSpec;
use reth_optimism_consensus::validate_block_post_execution;
Expand Down Expand Up @@ -73,12 +73,7 @@ where
Receipt = OpReceipt,
SignedTx: OpTransaction,
>,
EvmConfig: Clone
+ Unpin
+ Sync
+ Send
+ 'static
+ ConfigureEvm<Header = N::BlockHeader, Transaction = N::SignedTx>,
EvmConfig: Clone + Unpin + Sync + Send + 'static + ConfigureEvmFor<N>,
{
type Primitives = N;
type Strategy<DB: Database<Error: Into<ProviderError> + Display>> =
Expand Down Expand Up @@ -151,7 +146,7 @@ where
SignedTx: OpTransaction,
Receipt: DepositReceipt,
>,
EvmConfig: ConfigureEvm<Header = N::BlockHeader, Transaction = N::SignedTx>,
EvmConfig: ConfigureEvmFor<N>,
{
type DB = DB;
type Primitives = N;
Expand Down
6 changes: 3 additions & 3 deletions crates/optimism/node/src/node.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,9 @@ use crate::{
use op_alloy_consensus::OpPooledTransaction;
use reth_basic_payload_builder::{BasicPayloadJobGenerator, BasicPayloadJobGeneratorConfig};
use reth_chainspec::{EthChainSpec, Hardforks};
use reth_evm::{execute::BasicBlockExecutorProvider, ConfigureEvm};
use reth_evm::{execute::BasicBlockExecutorProvider, ConfigureEvmFor};
use reth_network::{NetworkConfig, NetworkHandle, NetworkManager, NetworkPrimitives, PeersInfo};
use reth_node_api::{AddOnsContext, FullNodeComponents, HeaderTy, NodeAddOns, TxTy};
use reth_node_api::{AddOnsContext, FullNodeComponents, NodeAddOns, TxTy};
use reth_node_builder::{
components::{
ComponentsBuilder, ConsensusBuilder, ExecutorBuilder, NetworkBuilder,
Expand Down Expand Up @@ -484,7 +484,7 @@ where
Pool: TransactionPool<Transaction: PoolTransaction<Consensus = TxTy<Node::Types>>>
+ Unpin
+ 'static,
Evm: ConfigureEvm<Header = HeaderTy<Node::Types>, Transaction = TxTy<Node::Types>>,
Evm: ConfigureEvmFor<<Node::Types as NodeTypes>::Primitives>,
{
let payload_builder = reth_optimism_payload_builder::OpPayloadBuilder::with_builder_config(
evm_config,
Expand Down

0 comments on commit ace28d8

Please sign in to comment.