diff --git a/crates/ethereum/evm/src/lib.rs b/crates/ethereum/evm/src/lib.rs index 9b5cd3196..fdb121ef8 100644 --- a/crates/ethereum/evm/src/lib.rs +++ b/crates/ethereum/evm/src/lib.rs @@ -116,8 +116,6 @@ impl ConfigureEvm for EthEvmConfig { ) -> reth_revm::Evm<'_, Self::DefaultExternalContext<'_>, DB> { EvmBuilder::default().with_db(db).build() } - - fn default_external_context<'a>(&self) -> Self::DefaultExternalContext<'a> {} } #[cfg(test)] diff --git a/crates/evm/src/builder.rs b/crates/evm/src/builder.rs index 68888983e..019e7d9a6 100644 --- a/crates/evm/src/builder.rs +++ b/crates/evm/src/builder.rs @@ -1,7 +1,7 @@ //! Builder for creating an EVM with a database and environment. use revm::{inspector_handle_register, Database, Evm, EvmBuilder, GetInspector}; -use revm_primitives::EnvWithHandlerCfg; +use revm_primitives::{Env, EnvWithHandlerCfg}; /// Builder for creating an EVM with a database and environment. /// @@ -14,7 +14,7 @@ pub struct RethEvmBuilder { /// The database to use for the EVM. db: DB, /// The environment to use for the EVM. - env: Option>, + env: Option>, /// The external context for the EVM. external_context: EXT, } @@ -29,7 +29,7 @@ where } /// Set the environment for the EVM. - pub fn with_env(mut self, env: Box) -> Self { + pub fn with_env(mut self, env: Box) -> Self { self.env = Some(env); self } @@ -44,8 +44,7 @@ where let mut builder = EvmBuilder::default().with_db(self.db).with_external_context(self.external_context); if let Some(env) = self.env { - builder = builder.with_spec_id(env.clone().spec_id()); - builder = builder.with_env(env.env); + builder = builder.with_env(env); } builder.build() @@ -60,8 +59,7 @@ where let mut builder = EvmBuilder::default().with_db(self.db).with_external_context(self.external_context); if let Some(env) = self.env { - builder = builder.with_spec_id(env.clone().spec_id()); - builder = builder.with_env(env.env); + builder = builder.with_env(env); } builder .with_external_context(inspector) @@ -105,7 +103,7 @@ pub trait EvmFactory { db: DB, env: EnvWithHandlerCfg, ) -> Evm<'a, Self::DefaultExternalContext<'a>, DB> { - RethEvmBuilder::new(db, self.default_external_context()).with_env(env.into()).build() + RethEvmBuilder::new(db, self.default_external_context()).with_env(env.env).build() } /// Returns a new EVM with the given database configured with the given environment settings, @@ -125,7 +123,7 @@ pub trait EvmFactory { I: GetInspector, { RethEvmBuilder::new(db, self.default_external_context()) - .with_env(env.into()) + .with_env(env.env) .build_with_inspector(inspector) } diff --git a/crates/evm/src/lib.rs b/crates/evm/src/lib.rs index 334abd456..c92eb8e92 100644 --- a/crates/evm/src/lib.rs +++ b/crates/evm/src/lib.rs @@ -14,10 +14,9 @@ extern crate alloc; use core::ops::Deref; -use crate::builder::RethEvmBuilder; use reth_chainspec::ChainSpec; use reth_primitives::{Address, Header, TransactionSigned, TransactionSignedEcRecovered, U256}; -use revm::{Database, Evm, GetInspector}; +use revm::{inspector_handle_register, Database, Evm, EvmBuilder, GetInspector}; use revm_primitives::{ BlockEnv, Bytes, CfgEnvWithHandlerCfg, Env, EnvWithHandlerCfg, SpecId, TxEnv, }; @@ -55,7 +54,10 @@ pub trait ConfigureEvm: ConfigureEvmEnv { db: DB, env: EnvWithHandlerCfg, ) -> Evm<'_, Self::DefaultExternalContext<'_>, DB> { - RethEvmBuilder::new(db, self.default_external_context()).with_env(env.into()).build() + let mut evm = self.evm(db); + evm.modify_spec_id(env.spec_id()); + evm.context.evm.env = env.env; + evm } /// Returns a new EVM with the given database configured with the given environment settings, @@ -74,9 +76,10 @@ pub trait ConfigureEvm: ConfigureEvmEnv { DB: Database, I: GetInspector, { - RethEvmBuilder::new(db, self.default_external_context()) - .with_env(env.into()) - .build_with_inspector(inspector) + let mut evm = self.evm_with_inspector(db, inspector); + evm.modify_spec_id(env.spec_id()); + evm.context.evm.env = env.env; + evm } /// Returns a new EVM with the given inspector. @@ -89,11 +92,12 @@ pub trait ConfigureEvm: ConfigureEvmEnv { DB: Database, I: GetInspector, { - RethEvmBuilder::new(db, self.default_external_context()).build_with_inspector(inspector) + EvmBuilder::default() + .with_db(db) + .with_external_context(inspector) + .append_handler_register(inspector_handle_register) + .build() } - - /// Provides the default external context. - fn default_external_context<'a>(&self) -> Self::DefaultExternalContext<'a>; } /// This represents the set of methods used to configure the EVM's environment before block diff --git a/crates/optimism/evm/src/lib.rs b/crates/optimism/evm/src/lib.rs index ece9bcd56..1d7f22f3c 100644 --- a/crates/optimism/evm/src/lib.rs +++ b/crates/optimism/evm/src/lib.rs @@ -129,8 +129,6 @@ impl ConfigureEvm for OptimismEvmConfig { .append_handler_register(inspector_handle_register) .build() } - - fn default_external_context<'a>(&self) -> Self::DefaultExternalContext<'a> {} } #[cfg(test)] diff --git a/examples/custom-evm/src/main.rs b/examples/custom-evm/src/main.rs index f10f0c3c7..4c2f3b712 100644 --- a/examples/custom-evm/src/main.rs +++ b/examples/custom-evm/src/main.rs @@ -130,8 +130,6 @@ impl ConfigureEvm for MyEvmConfig { .append_handler_register(inspector_handle_register) .build() } - - fn default_external_context<'a>(&self) -> Self::DefaultExternalContext<'a> {} } /// Builds a regular ethereum block executor that uses the custom EVM. diff --git a/examples/stateful-precompile/src/main.rs b/examples/stateful-precompile/src/main.rs index 5505f6d16..dd598a801 100644 --- a/examples/stateful-precompile/src/main.rs +++ b/examples/stateful-precompile/src/main.rs @@ -193,8 +193,6 @@ impl ConfigureEvm for MyEvmConfig { .append_handler_register(inspector_handle_register) .build() } - - fn default_external_context<'a>(&self) -> Self::DefaultExternalContext<'a> {} } /// Builds a regular ethereum block executor that uses the custom EVM.