revm_inspector

Trait Inspector

Source
pub trait Inspector {
    type Context;
    type InterpreterTypes: InterpreterTypes;

    // Provided methods
    fn initialize_interp(
        &mut self,
        interp: &mut Interpreter<Self::InterpreterTypes>,
        context: &mut Self::Context,
    ) { ... }
    fn step(
        &mut self,
        interp: &mut Interpreter<Self::InterpreterTypes>,
        context: &mut Self::Context,
    ) { ... }
    fn step_end(
        &mut self,
        interp: &mut Interpreter<Self::InterpreterTypes>,
        context: &mut Self::Context,
    ) { ... }
    fn log(
        &mut self,
        interp: &mut Interpreter<Self::InterpreterTypes>,
        context: &mut Self::Context,
        log: &Log,
    ) { ... }
    fn call(
        &mut self,
        context: &mut Self::Context,
        inputs: &mut CallInputs,
    ) -> Option<CallOutcome> { ... }
    fn call_end(
        &mut self,
        context: &mut Self::Context,
        inputs: &CallInputs,
        outcome: &mut CallOutcome,
    ) { ... }
    fn create(
        &mut self,
        context: &mut Self::Context,
        inputs: &mut CreateInputs,
    ) -> Option<CreateOutcome> { ... }
    fn create_end(
        &mut self,
        context: &mut Self::Context,
        inputs: &CreateInputs,
        outcome: &mut CreateOutcome,
    ) { ... }
    fn eofcreate(
        &mut self,
        context: &mut Self::Context,
        inputs: &mut EOFCreateInputs,
    ) -> Option<CreateOutcome> { ... }
    fn eofcreate_end(
        &mut self,
        context: &mut Self::Context,
        inputs: &EOFCreateInputs,
        outcome: &mut CreateOutcome,
    ) { ... }
    fn selfdestruct(&mut self, contract: Address, target: Address, value: U256) { ... }
}
Expand description

EVM Interpreter callbacks.

Required Associated Types§

Provided Methods§

Source

fn initialize_interp( &mut self, interp: &mut Interpreter<Self::InterpreterTypes>, context: &mut Self::Context, )

Called before the interpreter is initialized.

If interp.instruction_result is set to anything other than revm::interpreter::InstructionResult::Continue then the execution of the interpreter is skipped.

Source

fn step( &mut self, interp: &mut Interpreter<Self::InterpreterTypes>, context: &mut Self::Context, )

Called on each step of the interpreter.

Information about the current execution, including the memory, stack and more is available on interp (see Interpreter).

§Example

To get the current opcode, use interp.current_opcode().

Source

fn step_end( &mut self, interp: &mut Interpreter<Self::InterpreterTypes>, context: &mut Self::Context, )

Called after step when the instruction has been executed.

Setting interp.instruction_result to anything other than revm::interpreter::InstructionResult::Continue alters the execution of the interpreter.

Source

fn log( &mut self, interp: &mut Interpreter<Self::InterpreterTypes>, context: &mut Self::Context, log: &Log, )

Called when a log is emitted.

Source

fn call( &mut self, context: &mut Self::Context, inputs: &mut CallInputs, ) -> Option<CallOutcome>

Called whenever a call to a contract is about to start.

InstructionResulting anything other than revm::interpreter::InstructionResult::Continue overrides the result of the call.

Source

fn call_end( &mut self, context: &mut Self::Context, inputs: &CallInputs, outcome: &mut CallOutcome, )

Called when a call to a contract has concluded.

The returned CallOutcome is used as the result of the call.

This allows the inspector to modify the given result before returning it.

Source

fn create( &mut self, context: &mut Self::Context, inputs: &mut CreateInputs, ) -> Option<CreateOutcome>

Called when a contract is about to be created.

If this returns Some then the CreateOutcome is used to override the result of the creation.

If this returns None then the creation proceeds as normal.

Source

fn create_end( &mut self, context: &mut Self::Context, inputs: &CreateInputs, outcome: &mut CreateOutcome, )

Called when a contract has been created.

InstructionResulting anything other than the values passed to this function ((ret, remaining_gas, address, out)) will alter the result of the create.

Source

fn eofcreate( &mut self, context: &mut Self::Context, inputs: &mut EOFCreateInputs, ) -> Option<CreateOutcome>

Called when EOF creating is called.

This can happen from create TX or from EOFCREATE opcode.

Source

fn eofcreate_end( &mut self, context: &mut Self::Context, inputs: &EOFCreateInputs, outcome: &mut CreateOutcome, )

Called when eof creating has ended.

Source

fn selfdestruct(&mut self, contract: Address, target: Address, value: U256)

Called when a contract has been self-destructed with funds transferred to target.

Implementations on Foreign Types§

Source§

impl<'a, T: 'a + Inspector + ?Sized> Inspector for &'a mut T

Source§

type Context = <T as Inspector>::Context

Source§

type InterpreterTypes = <T as Inspector>::InterpreterTypes

Source§

fn initialize_interp( &mut self, interp: &mut Interpreter<Self::InterpreterTypes>, context: &mut Self::Context, )

Source§

fn step( &mut self, interp: &mut Interpreter<Self::InterpreterTypes>, context: &mut Self::Context, )

Source§

fn step_end( &mut self, interp: &mut Interpreter<Self::InterpreterTypes>, context: &mut Self::Context, )

Source§

fn log( &mut self, interp: &mut Interpreter<Self::InterpreterTypes>, context: &mut Self::Context, log: &Log, )

Source§

fn call( &mut self, context: &mut Self::Context, inputs: &mut CallInputs, ) -> Option<CallOutcome>

Source§

fn call_end( &mut self, context: &mut Self::Context, inputs: &CallInputs, outcome: &mut CallOutcome, )

Source§

fn create( &mut self, context: &mut Self::Context, inputs: &mut CreateInputs, ) -> Option<CreateOutcome>

Source§

fn create_end( &mut self, context: &mut Self::Context, inputs: &CreateInputs, outcome: &mut CreateOutcome, )

Source§

fn eofcreate( &mut self, context: &mut Self::Context, inputs: &mut EOFCreateInputs, ) -> Option<CreateOutcome>

Source§

fn eofcreate_end( &mut self, context: &mut Self::Context, inputs: &EOFCreateInputs, outcome: &mut CreateOutcome, )

Source§

fn selfdestruct(&mut self, contract: Address, target: Address, value: U256)

Source§

impl<T: Inspector + ?Sized> Inspector for Box<T>

Source§

type Context = <T as Inspector>::Context

Source§

type InterpreterTypes = <T as Inspector>::InterpreterTypes

Source§

fn initialize_interp( &mut self, interp: &mut Interpreter<Self::InterpreterTypes>, context: &mut Self::Context, )

Source§

fn step( &mut self, interp: &mut Interpreter<Self::InterpreterTypes>, context: &mut Self::Context, )

Source§

fn step_end( &mut self, interp: &mut Interpreter<Self::InterpreterTypes>, context: &mut Self::Context, )

Source§

fn log( &mut self, interp: &mut Interpreter<Self::InterpreterTypes>, context: &mut Self::Context, log: &Log, )

Source§

fn call( &mut self, context: &mut Self::Context, inputs: &mut CallInputs, ) -> Option<CallOutcome>

Source§

fn call_end( &mut self, context: &mut Self::Context, inputs: &CallInputs, outcome: &mut CallOutcome, )

Source§

fn create( &mut self, context: &mut Self::Context, inputs: &mut CreateInputs, ) -> Option<CreateOutcome>

Source§

fn create_end( &mut self, context: &mut Self::Context, inputs: &CreateInputs, outcome: &mut CreateOutcome, )

Source§

fn eofcreate( &mut self, context: &mut Self::Context, inputs: &mut EOFCreateInputs, ) -> Option<CreateOutcome>

Source§

fn eofcreate_end( &mut self, context: &mut Self::Context, inputs: &EOFCreateInputs, outcome: &mut CreateOutcome, )

Source§

fn selfdestruct(&mut self, contract: Address, target: Address, value: U256)

Implementors§

Source§

impl<CTX, INTR> Inspector for TracerEip3155<CTX, INTR>
where CTX: CfgGetter + TransactionGetter + JournalStateGetter, INTR: InterpreterTypes<Stack: StackTrait + CloneStack>,

Source§

impl<CTX, INTR: InterpreterTypes> Inspector for NoOpInspector<CTX, INTR>