diff --git a/crates/context/interface/src/cfg.rs b/crates/context/interface/src/cfg.rs index 31dd3ddef3..84382c1352 100644 --- a/crates/context/interface/src/cfg.rs +++ b/crates/context/interface/src/cfg.rs @@ -6,7 +6,7 @@ use specification::hardfork::SpecId; #[auto_impl(&, &mut, Box, Arc)] pub trait Cfg { - type Spec: Into; + type Spec: Into + Clone; fn chain_id(&self) -> u64; diff --git a/crates/handler/src/precompile_provider.rs b/crates/handler/src/precompile_provider.rs index 54f6b9387e..d372b1e8f5 100644 --- a/crates/handler/src/precompile_provider.rs +++ b/crates/handler/src/precompile_provider.rs @@ -9,7 +9,7 @@ use specification::hardfork::SpecId; use std::boxed::Box; #[auto_impl(&mut, Box)] -pub trait PrecompileProvider: Clone { +pub trait PrecompileProvider { type Context: ContextTrait; type Output; diff --git a/crates/revm/src/mainnet_exec_inspect.rs b/crates/revm/src/mainnet_exec_inspect.rs index 2d434f7106..bb6e535e85 100644 --- a/crates/revm/src/mainnet_exec_inspect.rs +++ b/crates/revm/src/mainnet_exec_inspect.rs @@ -8,23 +8,25 @@ use context_interface::{ }; use database_interface::DatabaseCommit; use handler::inspector::JournalExt; +use handler::PrecompileProvider; use handler::{handler::EvmTrait, inspector::EthInspectorHandler}; use handler::{ - inspector::Inspector, instructions::EthInstructions, EthFrame, EthHandler, EthPrecompiles, - MainnetHandler, + inspector::Inspector, instructions::EthInstructions, EthFrame, EthHandler, MainnetHandler, }; use interpreter::interpreter::EthInterpreter; +use interpreter::InterpreterResult; use primitives::Log; use state::EvmState; use std::vec::Vec; -impl ExecuteEvm - for Evm, EthPrecompiles> +impl ExecuteEvm + for Evm, PRECOMPILES> where CTX: ContextSetters + ContextTrait)> + JournalExt>, INSP: Inspector, + PRECOMPILES: PrecompileProvider, { type Output = Result< ResultAndState, @@ -37,8 +39,8 @@ where } } -impl ExecuteCommitEvm - for Evm, EthPrecompiles> +impl ExecuteCommitEvm + for Evm, PRECOMPILES> where CTX: ContextSetters + ContextTrait< @@ -46,6 +48,7 @@ where Db: DatabaseCommit, >, INSP: Inspector, + PRECOMPILES: PrecompileProvider, { type CommitOutput = Result< ExecutionResult, @@ -60,12 +63,13 @@ where } } -impl InspectEvm - for Evm, EthPrecompiles> +impl InspectEvm + for Evm, PRECOMPILES> where CTX: ContextSetters + ContextTrait)> + JournalExt>, INSP: Inspector, + PRECOMPILES: PrecompileProvider, { type Inspector = INSP; @@ -82,8 +86,8 @@ where } } -impl InspectCommitEvm - for Evm, EthPrecompiles> +impl InspectCommitEvm + for Evm, PRECOMPILES> where CTX: ContextSetters + ContextTrait< @@ -91,6 +95,7 @@ where Db: DatabaseCommit, >, INSP: Inspector, + PRECOMPILES: PrecompileProvider, { fn inspect_commit_previous(&mut self) -> Self::CommitOutput { self.inspect_previous().map(|r| {