pub trait Inspector<EvmWiringT: EvmWiring> {
// Provided methods
fn initialize_interp(
&mut self,
interp: &mut Interpreter,
context: &mut EvmContext<EvmWiringT>,
) { ... }
fn step(
&mut self,
interp: &mut Interpreter,
context: &mut EvmContext<EvmWiringT>,
) { ... }
fn step_end(
&mut self,
interp: &mut Interpreter,
context: &mut EvmContext<EvmWiringT>,
) { ... }
fn log(
&mut self,
interp: &mut Interpreter,
context: &mut EvmContext<EvmWiringT>,
log: &Log,
) { ... }
fn call(
&mut self,
context: &mut EvmContext<EvmWiringT>,
inputs: &mut CallInputs,
) -> Option<CallOutcome> { ... }
fn call_end(
&mut self,
context: &mut EvmContext<EvmWiringT>,
inputs: &CallInputs,
outcome: CallOutcome,
) -> CallOutcome { ... }
fn create(
&mut self,
context: &mut EvmContext<EvmWiringT>,
inputs: &mut CreateInputs,
) -> Option<CreateOutcome> { ... }
fn create_end(
&mut self,
context: &mut EvmContext<EvmWiringT>,
inputs: &CreateInputs,
outcome: CreateOutcome,
) -> CreateOutcome { ... }
fn eofcreate(
&mut self,
context: &mut EvmContext<EvmWiringT>,
inputs: &mut EOFCreateInputs,
) -> Option<CreateOutcome> { ... }
fn eofcreate_end(
&mut self,
context: &mut EvmContext<EvmWiringT>,
inputs: &EOFCreateInputs,
outcome: CreateOutcome,
) -> CreateOutcome { ... }
fn selfdestruct(&mut self, contract: Address, target: Address, value: U256) { ... }
}
Expand description
EVM [Interpreter] callbacks.
Provided Methods§
Sourcefn initialize_interp(
&mut self,
interp: &mut Interpreter,
context: &mut EvmContext<EvmWiringT>,
)
fn initialize_interp( &mut self, interp: &mut Interpreter, context: &mut EvmContext<EvmWiringT>, )
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.
Sourcefn step(
&mut self,
interp: &mut Interpreter,
context: &mut EvmContext<EvmWiringT>,
)
fn step( &mut self, interp: &mut Interpreter, context: &mut EvmContext<EvmWiringT>, )
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()
.
Sourcefn step_end(
&mut self,
interp: &mut Interpreter,
context: &mut EvmContext<EvmWiringT>,
)
fn step_end( &mut self, interp: &mut Interpreter, context: &mut EvmContext<EvmWiringT>, )
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.
Sourcefn log(
&mut self,
interp: &mut Interpreter,
context: &mut EvmContext<EvmWiringT>,
log: &Log,
)
fn log( &mut self, interp: &mut Interpreter, context: &mut EvmContext<EvmWiringT>, log: &Log, )
Called when a log is emitted.
Sourcefn call(
&mut self,
context: &mut EvmContext<EvmWiringT>,
inputs: &mut CallInputs,
) -> Option<CallOutcome>
fn call( &mut self, context: &mut EvmContext<EvmWiringT>, 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.
Sourcefn call_end(
&mut self,
context: &mut EvmContext<EvmWiringT>,
inputs: &CallInputs,
outcome: CallOutcome,
) -> CallOutcome
fn call_end( &mut self, context: &mut EvmContext<EvmWiringT>, inputs: &CallInputs, outcome: CallOutcome, ) -> 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.
Sourcefn create(
&mut self,
context: &mut EvmContext<EvmWiringT>,
inputs: &mut CreateInputs,
) -> Option<CreateOutcome>
fn create( &mut self, context: &mut EvmContext<EvmWiringT>, 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.
Sourcefn create_end(
&mut self,
context: &mut EvmContext<EvmWiringT>,
inputs: &CreateInputs,
outcome: CreateOutcome,
) -> CreateOutcome
fn create_end( &mut self, context: &mut EvmContext<EvmWiringT>, inputs: &CreateInputs, outcome: CreateOutcome, ) -> 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.
Sourcefn eofcreate(
&mut self,
context: &mut EvmContext<EvmWiringT>,
inputs: &mut EOFCreateInputs,
) -> Option<CreateOutcome>
fn eofcreate( &mut self, context: &mut EvmContext<EvmWiringT>, inputs: &mut EOFCreateInputs, ) -> Option<CreateOutcome>
Called when EOF creating is called.
This can happen from create TX or from EOFCREATE opcode.
Sourcefn eofcreate_end(
&mut self,
context: &mut EvmContext<EvmWiringT>,
inputs: &EOFCreateInputs,
outcome: CreateOutcome,
) -> CreateOutcome
fn eofcreate_end( &mut self, context: &mut EvmContext<EvmWiringT>, inputs: &EOFCreateInputs, outcome: CreateOutcome, ) -> CreateOutcome
Called when eof creating has ended.
Sourcefn selfdestruct(&mut self, contract: Address, target: Address, value: U256)
fn selfdestruct(&mut self, contract: Address, target: Address, value: U256)
Called when a contract has been self-destructed with funds transferred to target.