Skip to main content

NestedEvm

Trait NestedEvm 

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

    // Required methods
    fn journal_inner_mut(&mut self) -> &mut JournaledState;
    fn run_execution(
        &mut self,
        frame: FrameInput,
    ) -> Result<FrameResult, EVMError<DatabaseError>>;
    fn transact_raw(
        &mut self,
        tx: Self::Tx,
    ) -> Result<ResultAndState<HaltReason>, 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§

Source

type Spec

The spec type.

Source

type Block

The block environment type.

Source

type Tx

The transaction environment type.

Required Methods§

Source

fn journal_inner_mut(&mut self) -> &mut JournaledState

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

Source

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

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

Source

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

Executes a full transaction with the given tx env.

Source

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

Implementations on Foreign Types§

Source§

impl<'db, I: FoundryInspectorExt<EthEvmContext<&'db mut dyn DatabaseExt<EthEvmFactory>>>> NestedEvm for Evm<EthEvmContext<&'db mut dyn DatabaseExt<EthEvmFactory>>, I, EthInstructions<EthInterpreter, EthEvmContext<&'db mut dyn DatabaseExt<EthEvmFactory>>>, PrecompilesMap, EthFrame<EthInterpreter>>

Source§

type Spec = SpecId

Source§

type Block = BlockEnv

Source§

type Tx = TxEnv

Source§

fn journal_inner_mut(&mut self) -> &mut JournaledState

Source§

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

Source§

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

Source§

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

Source§

impl<'db, I: FoundryInspectorExt<OpContext<&'db mut dyn DatabaseExt<OpEvmFactory>>>> NestedEvm for OpEvm<OpContext<&'db mut dyn DatabaseExt<OpEvmFactory>>, I, EthInstructions<EthInterpreter, OpContext<&'db mut dyn DatabaseExt<OpEvmFactory>>>, PrecompilesMap>

Source§

type Spec = OpSpecId

Source§

type Block = BlockEnv

Source§

type Tx = OpTransaction<TxEnv>

Source§

fn journal_inner_mut(&mut self) -> &mut JournaledState

Source§

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

Source§

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

Source§

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

Source§

impl<'db, I: FoundryInspectorExt<TempoContext<&'db mut dyn DatabaseExt<TempoEvmFactory>>>> NestedEvm for TempoEvm<&'db mut dyn DatabaseExt<TempoEvmFactory>, I>

Source§

type Spec = TempoHardfork

Source§

type Block = TempoBlockEnv

Source§

type Tx = TempoTxEnv

Source§

fn journal_inner_mut(&mut self) -> &mut JournaledState

Source§

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

Source§

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

Source§

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

Implementors§