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> + DerefMut<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>,
inspector: I,
) -> Self::FoundryEvm<'db, I>;
fn create_nested_evm_with_inspector<'db, I>(
&self,
db: &'db mut dyn DatabaseExt<Self>,
evm_env: EvmEnv<Self::Spec, Self::BlockEnv>,
inspector: I,
) -> NestedEvmFor<'db, Self>
where I: FoundryInspectorExt<Self::FoundryContext<'db>> + 'db;
// Provided method
fn create_nested_evm<'db>(
&self,
db: &'db mut dyn DatabaseExt<Self>,
evm_env: EvmEnv<Self::Spec, Self::BlockEnv>,
) -> NestedEvmFor<'db, Self> { ... }
}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> + DerefMut<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> + DerefMut<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>,
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>, inspector: I, ) -> Self::FoundryEvm<'db, I>
Creates a Foundry-wrapped EVM with the given inspector.
Callers carrying execution context must install it through the returned context’s
chain_mut before executing. This also preserves OP’s block-derived L1 fee information.
Sourcefn create_nested_evm_with_inspector<'db, I>(
&self,
db: &'db mut dyn DatabaseExt<Self>,
evm_env: EvmEnv<Self::Spec, Self::BlockEnv>,
inspector: I,
) -> NestedEvmFor<'db, Self>where
I: FoundryInspectorExt<Self::FoundryContext<'db>> + 'db,
fn create_nested_evm_with_inspector<'db, I>(
&self,
db: &'db mut dyn DatabaseExt<Self>,
evm_env: EvmEnv<Self::Spec, Self::BlockEnv>,
inspector: I,
) -> NestedEvmFor<'db, Self>where
I: FoundryInspectorExt<Self::FoundryContext<'db>> + 'db,
Creates a Foundry-wrapped nested EVM with the given inspector.
Install inherited chain state with NestedEvm::chain_mut before executing or restoring
journal-derived state.
Provided Methods§
Sourcefn create_nested_evm<'db>(
&self,
db: &'db mut dyn DatabaseExt<Self>,
evm_env: EvmEnv<Self::Spec, Self::BlockEnv>,
) -> NestedEvmFor<'db, Self>
fn create_nested_evm<'db>( &self, db: &'db mut dyn DatabaseExt<Self>, evm_env: EvmEnv<Self::Spec, Self::BlockEnv>, ) -> NestedEvmFor<'db, Self>
Creates a Foundry-wrapped nested EVM without an inspector.
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 BaseEvmFactory
Available on crate feature base only.
impl FoundryEvmFactory for BaseEvmFactory
Available on crate feature
base only.type Chain = L1BlockInfo
type FoundryContext<'db> = Context<BlockEnv, BaseTransaction<TxEnv>, CfgEnv<BaseSpecId>, &'db mut dyn DatabaseExt<BaseEvmFactory, Error = DatabaseError>, Journal<&'db mut dyn DatabaseExt<BaseEvmFactory, Error = DatabaseError>>, L1BlockInfo>
type FoundryEvm<'db, I: FoundryInspectorExt<Self::FoundryContext<'db>>> = BaseEvm<&'db mut dyn DatabaseExt<BaseEvmFactory, Error = DatabaseError>, 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>, inspector: I, ) -> Self::FoundryEvm<'db, I>
fn create_nested_evm_with_inspector<'db, I>(
&self,
db: &'db mut dyn DatabaseExt<Self>,
evm_env: EvmEnv<Self::Spec, Self::BlockEnv>,
inspector: I,
) -> NestedEvmFor<'db, Self>where
I: FoundryInspectorExt<Self::FoundryContext<'db>> + 'db,
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_foundry_evm_with_inspector<'db, I: FoundryInspectorExt<Self::FoundryContext<'db>>>( &self, db: &'db mut dyn DatabaseExt<Self>, evm_env: EvmEnv, inspector: I, ) -> Self::FoundryEvm<'db, I>
fn create_nested_evm_with_inspector<'db, I>(
&self,
db: &'db mut dyn DatabaseExt<Self>,
evm_env: EvmEnv,
inspector: I,
) -> NestedEvmFor<'db, Self>where
I: FoundryInspectorExt<Self::FoundryContext<'db>> + 'db,
Source§impl FoundryEvmFactory for MonadEvmFactory
Available on crate feature monad only.
impl FoundryEvmFactory for MonadEvmFactory
Available on crate feature
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_foundry_evm_with_inspector<'db, I: FoundryInspectorExt<Self::FoundryContext<'db>>>( &self, db: &'db mut dyn DatabaseExt<Self>, evm_env: EvmEnv<Self::Spec, Self::BlockEnv>, inspector: I, ) -> Self::FoundryEvm<'db, I>
fn create_nested_evm_with_inspector<'db, I>(
&self,
db: &'db mut dyn DatabaseExt<Self>,
evm_env: EvmEnv<Self::Spec, Self::BlockEnv>,
inspector: I,
) -> NestedEvmFor<'db, Self>where
I: FoundryInspectorExt<Self::FoundryContext<'db>> + 'db,
Source§impl FoundryEvmFactory for OpEvmFactory
Available on crate feature optimism only.
impl FoundryEvmFactory for OpEvmFactory
Available on crate feature
optimism only.