Skip to main content

FoundryEvmFactory

Trait FoundryEvmFactory 

pub trait FoundryEvmFactory:
    EvmFactory<Precompiles = PrecompilesMap>
    + Clone
    + Debug
    + Default
    + 'static
where Self::Spec: Into<SpecId> + ExecutionSpec + Default + Copy + Unpin + Send + 'static, Self::BlockEnv: FoundryBlock + ForkBlockEnv + Default + Unpin, Self::Tx: Clone + Debug + FoundryTransaction + FromAnyRpcTransaction + Default + Send + Sync, Self::HaltReason: IntoInstructionResult,
{ type Chain: FoundryChain<Self::Tx>; type FoundryContext<'db>: FoundryContextExt<Block = Self::BlockEnv, Tx = Self::Tx, Spec = Self::Spec, Chain = Self::Chain> where <Self::FoundryContext<'db> as ContextTr>::Journal: FoundryJournal, <Self::FoundryContext<'db> as ContextTr>::Db: DatabaseExt<Self>, Self: 'db; type FoundryEvm<'db, I: FoundryInspectorExt<Self::FoundryContext<'db>>>: Evm<DB = &'db mut dyn DatabaseExt<Self, Error = DatabaseError>, Tx = Self::Tx, BlockEnv = Self::BlockEnv, Spec = Self::Spec, HaltReason = Self::HaltReason, Precompiles = PrecompilesMap> + DerefMut<Target = Self::FoundryContext<'db>> where Self: 'db; // Required methods fn create_foundry_evm_with_inspector<'db, I>( &self, db: &'db mut dyn DatabaseExt<Self, Error = DatabaseError>, evm_env: EvmEnv<Self::Spec, Self::BlockEnv>, inspector: I, ) -> Self::FoundryEvm<'db, I> where I: FoundryInspectorExt<Self::FoundryContext<'db>>; fn create_nested_evm_with_inspector<'db, I>( &self, db: &'db mut dyn DatabaseExt<Self, Error = DatabaseError>, evm_env: EvmEnv<Self::Spec, Self::BlockEnv>, inspector: I, ) -> Box<dyn NestedEvm<Chain = Self::Chain, Block = Self::BlockEnv, Tx = Self::Tx, Spec = Self::Spec, Journal = <Self::FoundryContext<'db> as ContextTr>::Journal> + 'db> where I: FoundryInspectorExt<Self::FoundryContext<'db>> + 'db; // Provided methods fn create_nested_evm<'db>( &self, db: &'db mut dyn DatabaseExt<Self, Error = DatabaseError>, evm_env: EvmEnv<Self::Spec, Self::BlockEnv>, ) -> Box<dyn NestedEvm<Chain = Self::Chain, Block = Self::BlockEnv, Tx = Self::Tx, Spec = Self::Spec, Journal = <Self::FoundryContext<'db> as ContextTr>::Journal> + 'db> { ... } fn set_execution_spec( context: &mut Self::FoundryContext<'_>, spec: Self::Spec, ) { ... } }

Required Associated Types§

type Chain: FoundryChain<Self::Tx>

Chain type for EVM’s context created by this factory.

type FoundryContext<'db>: FoundryContextExt<Block = Self::BlockEnv, Tx = Self::Tx, Spec = Self::Spec, Chain = Self::Chain> where <Self::FoundryContext<'db> as ContextTr>::Journal: FoundryJournal, <Self::FoundryContext<'db> as ContextTr>::Db: DatabaseExt<Self>, Self: 'db

Foundry Context abstraction

type FoundryEvm<'db, I: FoundryInspectorExt<Self::FoundryContext<'db>>>: Evm<DB = &'db mut dyn DatabaseExt<Self, Error = DatabaseError>, Tx = Self::Tx, BlockEnv = Self::BlockEnv, Spec = Self::Spec, HaltReason = Self::HaltReason, Precompiles = PrecompilesMap> + DerefMut<Target = Self::FoundryContext<'db>> where Self: 'db

The Foundry-wrapped EVM type produced by this factory.

Required Methods§

fn create_foundry_evm_with_inspector<'db, I>( &self, db: &'db mut dyn DatabaseExt<Self, Error = DatabaseError>, evm_env: EvmEnv<Self::Spec, Self::BlockEnv>, inspector: I, ) -> Self::FoundryEvm<'db, I>
where I: FoundryInspectorExt<Self::FoundryContext<'db>>,

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.

fn create_nested_evm_with_inspector<'db, I>( &self, db: &'db mut dyn DatabaseExt<Self, Error = DatabaseError>, evm_env: EvmEnv<Self::Spec, Self::BlockEnv>, inspector: I, ) -> Box<dyn NestedEvm<Chain = Self::Chain, Block = Self::BlockEnv, Tx = Self::Tx, Spec = Self::Spec, Journal = <Self::FoundryContext<'db> as ContextTr>::Journal> + 'db>
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§

fn create_nested_evm<'db>( &self, db: &'db mut dyn DatabaseExt<Self, Error = DatabaseError>, evm_env: EvmEnv<Self::Spec, Self::BlockEnv>, ) -> Box<dyn NestedEvm<Chain = Self::Chain, Block = Self::BlockEnv, Tx = Self::Tx, Spec = Self::Spec, Journal = <Self::FoundryContext<'db> as ContextTr>::Journal> + 'db>

Creates a Foundry-wrapped nested EVM without an inspector.

fn set_execution_spec(context: &mut Self::FoundryContext<'_>, spec: Self::Spec)

Updates the execution spec and gas parameters using this family’s configuration. This does not reconstruct the instruction table or precompile registry.

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety".

Implementations on Foreign Types§

§

impl FoundryEvmFactory for BaseEvmFactory

§

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<<BaseEvmFactory as FoundryEvmFactory>::FoundryContext<'db>>> = BaseEvm<&'db mut dyn DatabaseExt<BaseEvmFactory, Error = DatabaseError>, I>

§

fn create_foundry_evm_with_inspector<'db, I>( &self, db: &'db mut dyn DatabaseExt<BaseEvmFactory, Error = DatabaseError>, evm_env: EvmEnv<<BaseEvmFactory as EvmFactory>::Spec, <BaseEvmFactory as EvmFactory>::BlockEnv>, inspector: I, ) -> <BaseEvmFactory as FoundryEvmFactory>::FoundryEvm<'db, I>
where I: FoundryInspectorExt<<BaseEvmFactory as FoundryEvmFactory>::FoundryContext<'db>>,

§

fn create_nested_evm_with_inspector<'db, I>( &self, db: &'db mut dyn DatabaseExt<BaseEvmFactory, Error = DatabaseError>, evm_env: EvmEnv<<BaseEvmFactory as EvmFactory>::Spec, <BaseEvmFactory as EvmFactory>::BlockEnv>, inspector: I, ) -> Box<dyn NestedEvm<Chain = <BaseEvmFactory as FoundryEvmFactory>::Chain, Block = <BaseEvmFactory as EvmFactory>::BlockEnv, Tx = <BaseEvmFactory as EvmFactory>::Tx, Spec = <BaseEvmFactory as EvmFactory>::Spec, Journal = <<BaseEvmFactory as FoundryEvmFactory>::FoundryContext<'db> as ContextTr>::Journal> + 'db>
where I: FoundryInspectorExt<<BaseEvmFactory as FoundryEvmFactory>::FoundryContext<'db>> + 'db,

§

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<<EthEvmFactory as FoundryEvmFactory>::FoundryContext<'db>>> = EthEvm<&'db mut dyn DatabaseExt<EthEvmFactory, Error = DatabaseError>, I, <EthEvmFactory as EvmFactory>::Precompiles>

§

fn create_foundry_evm_with_inspector<'db, I>( &self, db: &'db mut dyn DatabaseExt<EthEvmFactory, Error = DatabaseError>, evm_env: EvmEnv, inspector: I, ) -> <EthEvmFactory as FoundryEvmFactory>::FoundryEvm<'db, I>
where I: FoundryInspectorExt<<EthEvmFactory as FoundryEvmFactory>::FoundryContext<'db>>,

§

fn create_nested_evm_with_inspector<'db, I>( &self, db: &'db mut dyn DatabaseExt<EthEvmFactory, Error = DatabaseError>, evm_env: EvmEnv, inspector: I, ) -> Box<dyn NestedEvm<Chain = <EthEvmFactory as FoundryEvmFactory>::Chain, Block = <EthEvmFactory as EvmFactory>::BlockEnv, Tx = <EthEvmFactory as EvmFactory>::Tx, Spec = <EthEvmFactory as EvmFactory>::Spec, Journal = <<EthEvmFactory as FoundryEvmFactory>::FoundryContext<'db> as ContextTr>::Journal> + 'db>
where I: FoundryInspectorExt<<EthEvmFactory as FoundryEvmFactory>::FoundryContext<'db>> + 'db,

§

impl FoundryEvmFactory for MonadEvmFactory

§

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<<MonadEvmFactory as FoundryEvmFactory>::FoundryContext<'db>>> = MonadEvm<&'db mut dyn DatabaseExt<MonadEvmFactory, Error = DatabaseError>, I>

§

fn create_foundry_evm_with_inspector<'db, I>( &self, db: &'db mut dyn DatabaseExt<MonadEvmFactory, Error = DatabaseError>, evm_env: EvmEnv<<MonadEvmFactory as EvmFactory>::Spec, <MonadEvmFactory as EvmFactory>::BlockEnv>, inspector: I, ) -> <MonadEvmFactory as FoundryEvmFactory>::FoundryEvm<'db, I>
where I: FoundryInspectorExt<<MonadEvmFactory as FoundryEvmFactory>::FoundryContext<'db>>,

§

fn create_nested_evm_with_inspector<'db, I>( &self, db: &'db mut dyn DatabaseExt<MonadEvmFactory, Error = DatabaseError>, evm_env: EvmEnv<<MonadEvmFactory as EvmFactory>::Spec, <MonadEvmFactory as EvmFactory>::BlockEnv>, inspector: I, ) -> Box<dyn NestedEvm<Chain = <MonadEvmFactory as FoundryEvmFactory>::Chain, Block = <MonadEvmFactory as EvmFactory>::BlockEnv, Tx = <MonadEvmFactory as EvmFactory>::Tx, Spec = <MonadEvmFactory as EvmFactory>::Spec, Journal = <<MonadEvmFactory as FoundryEvmFactory>::FoundryContext<'db> as ContextTr>::Journal> + 'db>
where I: FoundryInspectorExt<<MonadEvmFactory as FoundryEvmFactory>::FoundryContext<'db>> + 'db,

§

impl FoundryEvmFactory for OpEvmFactory

§

type Chain = L1BlockInfo

§

type FoundryContext<'db> = Context<BlockEnv, OpTx, CfgEnv<OpSpecId>, &'db mut dyn DatabaseExt<OpEvmFactory, Error = DatabaseError>, Journal<&'db mut dyn DatabaseExt<OpEvmFactory, Error = DatabaseError>>, L1BlockInfo>

§

type FoundryEvm<'db, I: FoundryInspectorExt<<OpEvmFactory as FoundryEvmFactory>::FoundryContext<'db>>> = OpEvm<&'db mut dyn DatabaseExt<OpEvmFactory, Error = DatabaseError>, I, <OpEvmFactory as EvmFactory>::Precompiles>

§

fn create_foundry_evm_with_inspector<'db, I>( &self, db: &'db mut dyn DatabaseExt<OpEvmFactory, Error = DatabaseError>, evm_env: EvmEnv<<OpEvmFactory as EvmFactory>::Spec, <OpEvmFactory as EvmFactory>::BlockEnv>, inspector: I, ) -> <OpEvmFactory as FoundryEvmFactory>::FoundryEvm<'db, I>
where I: FoundryInspectorExt<<OpEvmFactory as FoundryEvmFactory>::FoundryContext<'db>>,

§

fn create_nested_evm_with_inspector<'db, I>( &self, db: &'db mut dyn DatabaseExt<OpEvmFactory, Error = DatabaseError>, evm_env: EvmEnv<<OpEvmFactory as EvmFactory>::Spec, <OpEvmFactory as EvmFactory>::BlockEnv>, inspector: I, ) -> Box<dyn NestedEvm<Chain = <OpEvmFactory as FoundryEvmFactory>::Chain, Block = <OpEvmFactory as EvmFactory>::BlockEnv, Tx = <OpEvmFactory as EvmFactory>::Tx, Spec = <OpEvmFactory as EvmFactory>::Spec, Journal = <<OpEvmFactory as FoundryEvmFactory>::FoundryContext<'db> as ContextTr>::Journal> + 'db>
where I: FoundryInspectorExt<<OpEvmFactory as FoundryEvmFactory>::FoundryContext<'db>> + 'db,

§

impl FoundryEvmFactory for TempoEvmFactory

§

type Chain = ()

§

type FoundryContext<'db> = Context<TempoBlockEnv, TempoTxEnv, CfgEnv<TempoHardfork>, &'db mut dyn DatabaseExt<TempoEvmFactory, Error = DatabaseError>>

§

type FoundryEvm<'db, I: FoundryInspectorExt<<TempoEvmFactory as FoundryEvmFactory>::FoundryContext<'db>>> = TempoEvm<&'db mut dyn DatabaseExt<TempoEvmFactory, Error = DatabaseError>, I>

§

fn create_foundry_evm_with_inspector<'db, I>( &self, db: &'db mut dyn DatabaseExt<TempoEvmFactory, Error = DatabaseError>, evm_env: EvmEnv<<TempoEvmFactory as EvmFactory>::Spec, <TempoEvmFactory as EvmFactory>::BlockEnv>, inspector: I, ) -> <TempoEvmFactory as FoundryEvmFactory>::FoundryEvm<'db, I>
where I: FoundryInspectorExt<<TempoEvmFactory as FoundryEvmFactory>::FoundryContext<'db>>,

§

fn create_nested_evm_with_inspector<'db, I>( &self, db: &'db mut dyn DatabaseExt<TempoEvmFactory, Error = DatabaseError>, evm_env: EvmEnv<<TempoEvmFactory as EvmFactory>::Spec, <TempoEvmFactory as EvmFactory>::BlockEnv>, inspector: I, ) -> Box<dyn NestedEvm<Chain = <TempoEvmFactory as FoundryEvmFactory>::Chain, Block = <TempoEvmFactory as EvmFactory>::BlockEnv, Tx = <TempoEvmFactory as EvmFactory>::Tx, Spec = <TempoEvmFactory as EvmFactory>::Spec, Journal = <<TempoEvmFactory as FoundryEvmFactory>::FoundryContext<'db> as ContextTr>::Journal> + 'db>
where I: FoundryInspectorExt<<TempoEvmFactory as FoundryEvmFactory>::FoundryContext<'db>> + 'db,

§

fn set_execution_spec( context: &mut <TempoEvmFactory as FoundryEvmFactory>::FoundryContext<'_>, spec: <TempoEvmFactory as EvmFactory>::Spec, )

Implementors§