pub trait Inspector<CTX, INTR: InterpreterTypes> {
// Provided methods
fn initialize_interp(
&mut self,
interp: &mut Interpreter<INTR>,
context: &mut CTX,
) { ... }
fn step(&mut self, interp: &mut Interpreter<INTR>, context: &mut CTX) { ... }
fn step_end(&mut self, interp: &mut Interpreter<INTR>, context: &mut CTX) { ... }
fn log(
&mut self,
interp: &mut Interpreter<INTR>,
context: &mut CTX,
log: &Log,
) { ... }
fn call(
&mut self,
context: &mut CTX,
inputs: &mut CallInputs,
) -> Option<CallOutcome> { ... }
fn call_end(
&mut self,
context: &mut CTX,
inputs: &CallInputs,
outcome: &mut CallOutcome,
) { ... }
fn create(
&mut self,
context: &mut CTX,
inputs: &mut CreateInputs,
) -> Option<CreateOutcome> { ... }
fn create_end(
&mut self,
context: &mut CTX,
inputs: &CreateInputs,
outcome: &mut CreateOutcome,
) { ... }
fn eofcreate(
&mut self,
context: &mut CTX,
inputs: &mut EOFCreateInputs,
) -> Option<CreateOutcome> { ... }
fn eofcreate_end(
&mut self,
context: &mut CTX,
inputs: &EOFCreateInputs,
outcome: &mut 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<INTR>,
context: &mut CTX,
)
fn initialize_interp( &mut self, interp: &mut Interpreter<INTR>, context: &mut CTX, )
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<INTR>, context: &mut CTX)
fn step(&mut self, interp: &mut Interpreter<INTR>, context: &mut CTX)
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<INTR>, context: &mut CTX)
fn step_end(&mut self, interp: &mut Interpreter<INTR>, context: &mut CTX)
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<INTR>, context: &mut CTX, log: &Log)
fn log(&mut self, interp: &mut Interpreter<INTR>, context: &mut CTX, log: &Log)
Called when a log is emitted.
Sourcefn call(
&mut self,
context: &mut CTX,
inputs: &mut CallInputs,
) -> Option<CallOutcome>
fn call( &mut self, context: &mut CTX, 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 CTX,
inputs: &CallInputs,
outcome: &mut CallOutcome,
)
fn call_end( &mut self, context: &mut CTX, 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.
Sourcefn create(
&mut self,
context: &mut CTX,
inputs: &mut CreateInputs,
) -> Option<CreateOutcome>
fn create( &mut self, context: &mut CTX, 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 CTX,
inputs: &CreateInputs,
outcome: &mut CreateOutcome,
)
fn create_end( &mut self, context: &mut CTX, 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.
Sourcefn eofcreate(
&mut self,
context: &mut CTX,
inputs: &mut EOFCreateInputs,
) -> Option<CreateOutcome>
fn eofcreate( &mut self, context: &mut CTX, 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 CTX,
inputs: &EOFCreateInputs,
outcome: &mut CreateOutcome,
)
fn eofcreate_end( &mut self, context: &mut CTX, inputs: &EOFCreateInputs, outcome: &mut 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.