Trait Inspector
pub trait Inspector<CTX, INTR = EthInterpreter>where
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: Uint<256, 4>,
) { ... }
}
Expand description
EVM hooks into execution.
Provided Methods§
fn 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 InstructionResult::Continue then the execution of the interpreter
is skipped.
fn 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()
.
fn 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 InstructionResult::Continue alters the execution
of the interpreter.
fn 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.
fn 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 InstructionResult::Continue overrides the result of the call.
fn 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.
fn 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.
fn 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.
fn 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.
fn 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.
fn selfdestruct(
&mut self,
contract: Address,
target: Address,
value: Uint<256, 4>,
)
fn selfdestruct( &mut self, contract: Address, target: Address, value: Uint<256, 4>, )
Called when a contract has been self-destructed with funds transferred to target.