pub trait FoundryEvmFactory:
EvmFactory<Spec: Into<SpecId> + ExecutionSpec + Default + Copy + Unpin + Send + 'static, BlockEnv: FoundryBlock + ForkBlockEnv + Default + Unpin, Tx: Clone + Debug + FoundryTransaction + FromAnyRpcTransaction + Default + Send + Sync, HaltReason: IntoInstructionResult, Precompiles = PrecompilesMap>
+ Clone
+ Debug
+ Default
+ 'static {
type Chain: FoundryChain<Self::Tx>;
type FoundryContext<'db>: FoundryContextExt<Block = Self::BlockEnv, Tx = Self::Tx, Spec = Self::Spec, Chain = Self::Chain, Journal: FoundryJournal, Db: DatabaseExt<Self>>
where Self: 'db;
type FoundryEvm<'db, I: FoundryInspectorExt<Self::FoundryContext<'db>>>: Evm<DB = &'db mut dyn DatabaseExt<Self>, Tx = Self::Tx, BlockEnv = Self::BlockEnv, Spec = Self::Spec, HaltReason = Self::HaltReason> + Deref<Target = Self::FoundryContext<'db>>
where Self: 'db;
// Required methods
fn create_foundry_evm_with_inspector<'db, I: FoundryInspectorExt<Self::FoundryContext<'db>>>(
&self,
db: &'db mut dyn DatabaseExt<Self>,
evm_env: EvmEnv<Self::Spec, Self::BlockEnv>,
chain_context: Self::Chain,
inspector: I,
) -> Self::FoundryEvm<'db, I>;
fn create_evm_with_context<DB: Database>(
&self,
db: DB,
evm_env: EvmEnv<Self::Spec, Self::BlockEnv>,
chain_context: Self::Chain,
) -> Self::Evm<DB, NoOpInspector>;
fn create_foundry_nested_evm<'db>(
&self,
db: &'db mut dyn DatabaseExt<Self>,
evm_env: EvmEnv<Self::Spec, Self::BlockEnv>,
chain_context: Self::Chain,
inspector: &'db mut dyn FoundryInspectorExt<Self::FoundryContext<'db>>,
) -> NestedEvmFor<'db, Self>;
// Provided method
fn try_transact_system_replay<DB, I>(
&self,
_evm: &mut Self::Evm<DB, I>,
_tx: &Self::Tx,
) -> Result<Option<ResultAndState<Self::HaltReason>>>
where DB: Database,
I: Inspector<Self::Context<DB>> { ... }
}Required Associated Types§
Sourcetype Chain: FoundryChain<Self::Tx>
type Chain: FoundryChain<Self::Tx>
Chain type for EVM’s context created by this factory.
Sourcetype FoundryContext<'db>: FoundryContextExt<Block = Self::BlockEnv, Tx = Self::Tx, Spec = Self::Spec, Chain = Self::Chain, Journal: FoundryJournal, Db: DatabaseExt<Self>>
where
Self: 'db
type FoundryContext<'db>: FoundryContextExt<Block = Self::BlockEnv, Tx = Self::Tx, Spec = Self::Spec, Chain = Self::Chain, Journal: FoundryJournal, Db: DatabaseExt<Self>> where Self: 'db
Foundry Context abstraction
Sourcetype FoundryEvm<'db, I: FoundryInspectorExt<Self::FoundryContext<'db>>>: Evm<DB = &'db mut dyn DatabaseExt<Self>, Tx = Self::Tx, BlockEnv = Self::BlockEnv, Spec = Self::Spec, HaltReason = Self::HaltReason> + Deref<Target = Self::FoundryContext<'db>>
where
Self: 'db
type FoundryEvm<'db, I: FoundryInspectorExt<Self::FoundryContext<'db>>>: Evm<DB = &'db mut dyn DatabaseExt<Self>, Tx = Self::Tx, BlockEnv = Self::BlockEnv, Spec = Self::Spec, HaltReason = Self::HaltReason> + Deref<Target = Self::FoundryContext<'db>> where Self: 'db
The Foundry-wrapped EVM type produced by this factory.
Required Methods§
Sourcefn create_foundry_evm_with_inspector<'db, I: FoundryInspectorExt<Self::FoundryContext<'db>>>(
&self,
db: &'db mut dyn DatabaseExt<Self>,
evm_env: EvmEnv<Self::Spec, Self::BlockEnv>,
chain_context: Self::Chain,
inspector: I,
) -> Self::FoundryEvm<'db, I>
fn create_foundry_evm_with_inspector<'db, I: FoundryInspectorExt<Self::FoundryContext<'db>>>( &self, db: &'db mut dyn DatabaseExt<Self>, evm_env: EvmEnv<Self::Spec, Self::BlockEnv>, chain_context: Self::Chain, inspector: I, ) -> Self::FoundryEvm<'db, I>
Creates a Foundry-wrapped EVM with the given inspector.
Sourcefn create_evm_with_context<DB: Database>(
&self,
db: DB,
evm_env: EvmEnv<Self::Spec, Self::BlockEnv>,
chain_context: Self::Chain,
) -> Self::Evm<DB, NoOpInspector>
fn create_evm_with_context<DB: Database>( &self, db: DB, evm_env: EvmEnv<Self::Spec, Self::BlockEnv>, chain_context: Self::Chain, ) -> Self::Evm<DB, NoOpInspector>
Creates an uninspected EVM with explicit transaction-position context.
Sourcefn create_foundry_nested_evm<'db>(
&self,
db: &'db mut dyn DatabaseExt<Self>,
evm_env: EvmEnv<Self::Spec, Self::BlockEnv>,
chain_context: Self::Chain,
inspector: &'db mut dyn FoundryInspectorExt<Self::FoundryContext<'db>>,
) -> NestedEvmFor<'db, Self>
fn create_foundry_nested_evm<'db>( &self, db: &'db mut dyn DatabaseExt<Self>, evm_env: EvmEnv<Self::Spec, Self::BlockEnv>, chain_context: Self::Chain, inspector: &'db mut dyn FoundryInspectorExt<Self::FoundryContext<'db>>, ) -> NestedEvmFor<'db, Self>
Creates a Foundry-wrapped EVM with a dynamic inspector, returning a boxed NestedEvm.
This helper exists because &mut dyn FoundryInspectorExt<FoundryContext> cannot satisfy
the generic I: FoundryInspectorExt<Self::FoundryContext<'db>> bound when the context
type is only known through an associated type. Each concrete factory implements this
directly, side-stepping the higher-kinded lifetime issue.
Provided Methods§
Sourcefn try_transact_system_replay<DB, I>(
&self,
_evm: &mut Self::Evm<DB, I>,
_tx: &Self::Tx,
) -> Result<Option<ResultAndState<Self::HaltReason>>>where
DB: Database,
I: Inspector<Self::Context<DB>>,
Available on crate feature monad only.
fn try_transact_system_replay<DB, I>(
&self,
_evm: &mut Self::Evm<DB, I>,
_tx: &Self::Tx,
) -> Result<Option<ResultAndState<Self::HaltReason>>>where
DB: Database,
I: Inspector<Self::Context<DB>>,
monad only.Tries to execute a canonical system transaction on a regular Alloy EVM during replay.
Returning Ok(None) means the transaction was not recognized. Implementations must not
mutate the EVM, its database, or inspector before returning Ok(None), because callers may
fall back to ordinary execution using the same EVM instance.
Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety".
Implementations on Foreign Types§
Source§impl FoundryEvmFactory for EthEvmFactory
impl FoundryEvmFactory for EthEvmFactory
type Chain = ()
type FoundryContext<'db> = Context<BlockEnv, TxEnv, CfgEnv, &'db mut dyn DatabaseExt<EthEvmFactory, Error = DatabaseError>>
type FoundryEvm<'db, I: FoundryInspectorExt<Self::FoundryContext<'db>>> = EthEvm<&'db mut dyn DatabaseExt<EthEvmFactory, Error = DatabaseError>, I, <EthEvmFactory as EvmFactory>::Precompiles>
fn create_evm_with_context<DB: Database>( &self, db: DB, evm_env: EvmEnv, _chain_context: Self::Chain, ) -> Self::Evm<DB, NoOpInspector>
fn create_foundry_evm_with_inspector<'db, I: FoundryInspectorExt<Self::FoundryContext<'db>>>( &self, db: &'db mut dyn DatabaseExt<Self>, evm_env: EvmEnv, _chain_context: Self::Chain, inspector: I, ) -> Self::FoundryEvm<'db, I>
fn create_foundry_nested_evm<'db>( &self, db: &'db mut dyn DatabaseExt<Self>, evm_env: EvmEnv, chain_context: Self::Chain, inspector: &'db mut dyn FoundryInspectorExt<Self::FoundryContext<'db>>, ) -> NestedEvmFor<'db, Self>
Source§impl FoundryEvmFactory for MonadEvmFactory
Available on crate feature monad only.
impl FoundryEvmFactory for MonadEvmFactory
monad only.type Chain = MonadChainContext
type FoundryContext<'db> = Context<BlockEnv, TxEnv, MonadCfgEnv, &'db mut dyn DatabaseExt<MonadEvmFactory, Error = DatabaseError>, MonadJournal<&'db mut dyn DatabaseExt<MonadEvmFactory, Error = DatabaseError>>, MonadChainContext>
type FoundryEvm<'db, I: FoundryInspectorExt<Self::FoundryContext<'db>>> = MonadEvm<&'db mut dyn DatabaseExt<MonadEvmFactory, Error = DatabaseError>, I>
fn create_evm_with_context<DB: Database>( &self, db: DB, evm_env: EvmEnv<Self::Spec, Self::BlockEnv>, chain_context: Self::Chain, ) -> Self::Evm<DB, NoOpInspector>
fn create_foundry_evm_with_inspector<'db, I: FoundryInspectorExt<Self::FoundryContext<'db>>>( &self, db: &'db mut dyn DatabaseExt<Self>, evm_env: EvmEnv<Self::Spec, Self::BlockEnv>, chain_context: Self::Chain, inspector: I, ) -> Self::FoundryEvm<'db, I>
fn try_transact_system_replay<DB, I>(
&self,
evm: &mut Self::Evm<DB, I>,
tx: &Self::Tx,
) -> Result<Option<ResultAndState<Self::HaltReason>>>where
DB: Database,
I: Inspector<Self::Context<DB>>,
fn create_foundry_nested_evm<'db>( &self, db: &'db mut dyn DatabaseExt<Self>, evm_env: EvmEnv<Self::Spec, Self::BlockEnv>, chain_context: Self::Chain, inspector: &'db mut dyn FoundryInspectorExt<Self::FoundryContext<'db>>, ) -> NestedEvmFor<'db, Self>
Source§impl FoundryEvmFactory for OpEvmFactory
Available on crate feature optimism only.
impl FoundryEvmFactory for OpEvmFactory
optimism only.