Skip to main content

NestedEvm

Trait NestedEvm 

pub trait NestedEvm {
    type Spec;
    type Block;
    type Tx;

    // Required methods
    fn journal_inner_mut(&mut self) -> &mut JournalInner<JournalEntry>;
    fn run_execution(
        &mut self,
        frame: FrameInput,
    ) -> Result<FrameResult, EVMError<DatabaseError>>;
    fn transact_raw(
        &mut self,
        tx: Self::Tx,
    ) -> Result<ExecResultAndState<ExecutionResult>, EVMError<DatabaseError>>;
    fn to_evm_env(&self) -> EvmEnv<Self::Spec, Self::Block>;
}
Expand description

Object-safe trait exposing the operations that cheatcode nested EVM closures need.

This abstracts over the concrete EVM type (FoundryEvm, future TempoEvm, etc.) so that cheatcode impls can build and run nested EVMs without knowing the concrete type.

Required Associated Types§

type Spec

The spec type.

type Block

The block environment type.

type Tx

The transaction environment type.

Required Methods§

fn journal_inner_mut(&mut self) -> &mut JournalInner<JournalEntry>

Returns a mutable reference to the journal inner state (JournaledState).

fn run_execution( &mut self, frame: FrameInput, ) -> Result<FrameResult, EVMError<DatabaseError>>

Runs a single execution frame (create or call) through the EVM handler loop.

fn transact_raw( &mut self, tx: Self::Tx, ) -> Result<ExecResultAndState<ExecutionResult>, EVMError<DatabaseError>>

Executes a full transaction with the given tx env.

fn to_evm_env(&self) -> EvmEnv<Self::Spec, Self::Block>

Implementations on Foreign Types§

§

impl<'db, I> NestedEvm for OpEvm<Context<BlockEnv, OpTransaction<TxEnv>, CfgEnv<OpSpecId>, &'db mut dyn DatabaseExt<OpEvmFactory, Error = DatabaseError>, Journal<&'db mut dyn DatabaseExt<OpEvmFactory, Error = DatabaseError>>, L1BlockInfo>, I, EthInstructions<EthInterpreter, Context<BlockEnv, OpTransaction<TxEnv>, CfgEnv<OpSpecId>, &'db mut dyn DatabaseExt<OpEvmFactory, Error = DatabaseError>, Journal<&'db mut dyn DatabaseExt<OpEvmFactory, Error = DatabaseError>>, L1BlockInfo>>, PrecompilesMap>
where I: FoundryInspectorExt<Context<BlockEnv, OpTransaction<TxEnv>, CfgEnv<OpSpecId>, &'db mut dyn DatabaseExt<OpEvmFactory, Error = DatabaseError>, Journal<&'db mut dyn DatabaseExt<OpEvmFactory, Error = DatabaseError>>, L1BlockInfo>>,

§

type Spec = OpSpecId

§

type Block = BlockEnv

§

type Tx = OpTransaction<TxEnv>

§

fn journal_inner_mut(&mut self) -> &mut JournalInner<JournalEntry>

§

fn run_execution( &mut self, frame: FrameInput, ) -> Result<FrameResult, EVMError<DatabaseError>>

§

fn transact_raw( &mut self, tx: <OpEvm<Context<BlockEnv, OpTransaction<TxEnv>, CfgEnv<OpSpecId>, &'db mut dyn DatabaseExt<OpEvmFactory, Error = DatabaseError>, Journal<&'db mut dyn DatabaseExt<OpEvmFactory, Error = DatabaseError>>, L1BlockInfo>, I, EthInstructions<EthInterpreter, Context<BlockEnv, OpTransaction<TxEnv>, CfgEnv<OpSpecId>, &'db mut dyn DatabaseExt<OpEvmFactory, Error = DatabaseError>, Journal<&'db mut dyn DatabaseExt<OpEvmFactory, Error = DatabaseError>>, L1BlockInfo>>, PrecompilesMap> as NestedEvm>::Tx, ) -> Result<ExecResultAndState<ExecutionResult>, EVMError<DatabaseError>>

§

fn to_evm_env( &self, ) -> EvmEnv<<OpEvm<Context<BlockEnv, OpTransaction<TxEnv>, CfgEnv<OpSpecId>, &'db mut dyn DatabaseExt<OpEvmFactory, Error = DatabaseError>, Journal<&'db mut dyn DatabaseExt<OpEvmFactory, Error = DatabaseError>>, L1BlockInfo>, I, EthInstructions<EthInterpreter, Context<BlockEnv, OpTransaction<TxEnv>, CfgEnv<OpSpecId>, &'db mut dyn DatabaseExt<OpEvmFactory, Error = DatabaseError>, Journal<&'db mut dyn DatabaseExt<OpEvmFactory, Error = DatabaseError>>, L1BlockInfo>>, PrecompilesMap> as NestedEvm>::Spec, <OpEvm<Context<BlockEnv, OpTransaction<TxEnv>, CfgEnv<OpSpecId>, &'db mut dyn DatabaseExt<OpEvmFactory, Error = DatabaseError>, Journal<&'db mut dyn DatabaseExt<OpEvmFactory, Error = DatabaseError>>, L1BlockInfo>, I, EthInstructions<EthInterpreter, Context<BlockEnv, OpTransaction<TxEnv>, CfgEnv<OpSpecId>, &'db mut dyn DatabaseExt<OpEvmFactory, Error = DatabaseError>, Journal<&'db mut dyn DatabaseExt<OpEvmFactory, Error = DatabaseError>>, L1BlockInfo>>, PrecompilesMap> as NestedEvm>::Block>

§

impl<'db, I> NestedEvm for TempoEvm<&'db mut dyn DatabaseExt<TempoEvmFactory, Error = DatabaseError>, I>
where I: FoundryInspectorExt<Context<TempoBlockEnv, TempoTxEnv, CfgEnv<TempoHardfork>, &'db mut dyn DatabaseExt<TempoEvmFactory, Error = DatabaseError>>>,

§

type Spec = TempoHardfork

§

type Block = TempoBlockEnv

§

type Tx = TempoTxEnv

§

fn journal_inner_mut(&mut self) -> &mut JournalInner<JournalEntry>

§

fn run_execution( &mut self, frame: FrameInput, ) -> Result<FrameResult, EVMError<DatabaseError>>

§

fn transact_raw( &mut self, tx: <TempoEvm<&'db mut dyn DatabaseExt<TempoEvmFactory, Error = DatabaseError>, I> as NestedEvm>::Tx, ) -> Result<ExecResultAndState<ExecutionResult>, EVMError<DatabaseError>>

§

fn to_evm_env( &self, ) -> EvmEnv<<TempoEvm<&'db mut dyn DatabaseExt<TempoEvmFactory, Error = DatabaseError>, I> as NestedEvm>::Spec, <TempoEvm<&'db mut dyn DatabaseExt<TempoEvmFactory, Error = DatabaseError>, I> as NestedEvm>::Block>

Implementors§

§

impl<'db, I> NestedEvm for Evm<Context<BlockEnv, TxEnv, CfgEnv, &'db mut dyn DatabaseExt<EthEvmFactory, Error = DatabaseError>>, I, EthInstructions<EthInterpreter, Context<BlockEnv, TxEnv, CfgEnv, &'db mut dyn DatabaseExt<EthEvmFactory, Error = DatabaseError>>>, PrecompilesMap, EthFrame>
where I: FoundryInspectorExt<Context<BlockEnv, TxEnv, CfgEnv, &'db mut dyn DatabaseExt<EthEvmFactory, Error = DatabaseError>>>,

§

type Spec = SpecId

§

type Block = BlockEnv

§

type Tx = TxEnv