Trait evm::Handler

source ·
pub trait Handler {
    type CreateInterrupt;
    type CreateFeedback;
    type CallInterrupt;
    type CallFeedback;

Show 31 methods // Required methods fn balance(&self, address: H160) -> U256; fn code_size(&self, address: H160) -> U256; fn code_hash(&self, address: H160) -> H256; fn code(&self, address: H160) -> Vec<u8>; fn storage(&self, address: H160, index: H256) -> H256; fn original_storage(&self, address: H160, index: H256) -> H256; fn gas_left(&self) -> U256; fn gas_price(&self) -> U256; fn origin(&self) -> H160; fn block_hash(&self, number: U256) -> H256; fn block_number(&self) -> U256; fn block_coinbase(&self) -> H160; fn block_timestamp(&self) -> U256; fn block_difficulty(&self) -> U256; fn block_randomness(&self) -> Option<H256>; fn block_gas_limit(&self) -> U256; fn block_base_fee_per_gas(&self) -> U256; fn chain_id(&self) -> U256; fn exists(&self, address: H160) -> bool; fn deleted(&self, address: H160) -> bool; fn is_cold( &mut self, address: H160, index: Option<H256> ) -> Result<bool, ExitError>; fn set_storage( &mut self, address: H160, index: H256, value: H256 ) -> Result<(), ExitError>; fn log( &mut self, address: H160, topics: Vec<H256>, data: Vec<u8> ) -> Result<(), ExitError>; fn mark_delete( &mut self, address: H160, target: H160 ) -> Result<(), ExitError>; fn create( &mut self, caller: H160, scheme: CreateScheme, value: U256, init_code: Vec<u8>, target_gas: Option<u64> ) -> Capture<(ExitReason, Option<H160>, Vec<u8>), Self::CreateInterrupt>; fn call( &mut self, code_address: H160, transfer: Option<Transfer>, input: Vec<u8>, target_gas: Option<u64>, is_static: bool, context: Context ) -> Capture<(ExitReason, Vec<u8>), Self::CallInterrupt>; fn pre_validate( &mut self, context: &Context, opcode: Opcode, stack: &Stack ) -> Result<(), ExitError>; fn record_external_operation( &mut self, op: ExternalOperation ) -> Result<(), ExitError>; // Provided methods fn create_feedback( &mut self, _feedback: Self::CreateFeedback ) -> Result<(), ExitError> { ... } fn call_feedback( &mut self, _feedback: Self::CallFeedback ) -> Result<(), ExitError> { ... } fn other( &mut self, opcode: Opcode, _stack: &mut Machine ) -> Result<(), ExitError> { ... }
}
Expand description

EVM context handler.

Required Associated Types§

source

type CreateInterrupt

Type of CREATE interrupt.

source

type CreateFeedback

Feedback value for CREATE interrupt.

source

type CallInterrupt

Type of CALL interrupt.

source

type CallFeedback

Feedback value of CALL interrupt.

Required Methods§

source

fn balance(&self, address: H160) -> U256

Get balance of address.

source

fn code_size(&self, address: H160) -> U256

Get code size of address.

source

fn code_hash(&self, address: H160) -> H256

Get code hash of address.

source

fn code(&self, address: H160) -> Vec<u8>

Get code of address.

source

fn storage(&self, address: H160, index: H256) -> H256

Get storage value of address at index.

source

fn original_storage(&self, address: H160, index: H256) -> H256

Get original storage value of address at index.

source

fn gas_left(&self) -> U256

Get the gas left value.

source

fn gas_price(&self) -> U256

Get the gas price value.

source

fn origin(&self) -> H160

Get execution origin.

source

fn block_hash(&self, number: U256) -> H256

Get environmental block hash.

source

fn block_number(&self) -> U256

Get environmental block number.

source

fn block_coinbase(&self) -> H160

Get environmental coinbase.

source

fn block_timestamp(&self) -> U256

Get environmental block timestamp.

source

fn block_difficulty(&self) -> U256

Get environmental block difficulty.

source

fn block_randomness(&self) -> Option<H256>

Get environmental block randomness.

source

fn block_gas_limit(&self) -> U256

Get environmental gas limit.

source

fn block_base_fee_per_gas(&self) -> U256

Environmental block base fee.

source

fn chain_id(&self) -> U256

Get environmental chain ID.

source

fn exists(&self, address: H160) -> bool

Check whether an address exists.

source

fn deleted(&self, address: H160) -> bool

Check whether an address has already been deleted.

source

fn is_cold( &mut self, address: H160, index: Option<H256> ) -> Result<bool, ExitError>

Checks if the address or (address, index) pair has been previously accessed (or set in accessed_addresses / accessed_storage_keys via an access list transaction). References:

source

fn set_storage( &mut self, address: H160, index: H256, value: H256 ) -> Result<(), ExitError>

Set storage value of address at index.

source

fn log( &mut self, address: H160, topics: Vec<H256>, data: Vec<u8> ) -> Result<(), ExitError>

Create a log owned by address with given topics and data.

source

fn mark_delete(&mut self, address: H160, target: H160) -> Result<(), ExitError>

Mark an address to be deleted, with funds transferred to target.

source

fn create( &mut self, caller: H160, scheme: CreateScheme, value: U256, init_code: Vec<u8>, target_gas: Option<u64> ) -> Capture<(ExitReason, Option<H160>, Vec<u8>), Self::CreateInterrupt>

Invoke a create operation.

source

fn call( &mut self, code_address: H160, transfer: Option<Transfer>, input: Vec<u8>, target_gas: Option<u64>, is_static: bool, context: Context ) -> Capture<(ExitReason, Vec<u8>), Self::CallInterrupt>

Invoke a call operation.

source

fn pre_validate( &mut self, context: &Context, opcode: Opcode, stack: &Stack ) -> Result<(), ExitError>

Pre-validation step for the runtime.

source

fn record_external_operation( &mut self, op: ExternalOperation ) -> Result<(), ExitError>

Records some associated ExternalOperation.

Provided Methods§

source

fn create_feedback( &mut self, _feedback: Self::CreateFeedback ) -> Result<(), ExitError>

Feed in create feedback.

source

fn call_feedback( &mut self, _feedback: Self::CallFeedback ) -> Result<(), ExitError>

Feed in call feedback.

source

fn other( &mut self, opcode: Opcode, _stack: &mut Machine ) -> Result<(), ExitError>

Handle other unknown external opcodes.

Implementations on Foreign Types§

source§

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

§

type CreateInterrupt = <T as Handler>::CreateInterrupt

§

type CreateFeedback = <T as Handler>::CreateFeedback

§

type CallInterrupt = <T as Handler>::CallInterrupt

§

type CallFeedback = <T as Handler>::CallFeedback

source§

fn balance(&self, address: H160) -> U256

source§

fn code_size(&self, address: H160) -> U256

source§

fn code_hash(&self, address: H160) -> H256

source§

fn code(&self, address: H160) -> Vec<u8>

source§

fn storage(&self, address: H160, index: H256) -> H256

source§

fn original_storage(&self, address: H160, index: H256) -> H256

source§

fn gas_left(&self) -> U256

source§

fn gas_price(&self) -> U256

source§

fn origin(&self) -> H160

source§

fn block_hash(&self, number: U256) -> H256

source§

fn block_number(&self) -> U256

source§

fn block_coinbase(&self) -> H160

source§

fn block_timestamp(&self) -> U256

source§

fn block_difficulty(&self) -> U256

source§

fn block_randomness(&self) -> Option<H256>

source§

fn block_gas_limit(&self) -> U256

source§

fn block_base_fee_per_gas(&self) -> U256

source§

fn chain_id(&self) -> U256

source§

fn exists(&self, address: H160) -> bool

source§

fn deleted(&self, address: H160) -> bool

source§

fn is_cold( &mut self, address: H160, index: Option<H256> ) -> Result<bool, ExitError>

source§

fn set_storage( &mut self, address: H160, index: H256, value: H256 ) -> Result<(), ExitError>

source§

fn log( &mut self, address: H160, topics: Vec<H256>, data: Vec<u8> ) -> Result<(), ExitError>

source§

fn mark_delete(&mut self, address: H160, target: H160) -> Result<(), ExitError>

source§

fn create( &mut self, caller: H160, scheme: CreateScheme, value: U256, init_code: Vec<u8>, target_gas: Option<u64> ) -> Capture<(ExitReason, Option<H160>, Vec<u8>), <&'a mut T as Handler>::CreateInterrupt>

source§

fn create_feedback( &mut self, _feedback: <&'a mut T as Handler>::CreateFeedback ) -> Result<(), ExitError>

source§

fn call( &mut self, code_address: H160, transfer: Option<Transfer>, input: Vec<u8>, target_gas: Option<u64>, is_static: bool, context: Context ) -> Capture<(ExitReason, Vec<u8>), <&'a mut T as Handler>::CallInterrupt>

source§

fn call_feedback( &mut self, _feedback: <&'a mut T as Handler>::CallFeedback ) -> Result<(), ExitError>

source§

fn pre_validate( &mut self, context: &Context, opcode: Opcode, stack: &Stack ) -> Result<(), ExitError>

source§

fn other( &mut self, opcode: Opcode, _stack: &mut Machine ) -> Result<(), ExitError>

source§

fn record_external_operation( &mut self, op: ExternalOperation ) -> Result<(), ExitError>

source§

impl<T> Handler for Box<T>
where T: Handler + ?Sized,

§

type CreateInterrupt = <T as Handler>::CreateInterrupt

§

type CreateFeedback = <T as Handler>::CreateFeedback

§

type CallInterrupt = <T as Handler>::CallInterrupt

§

type CallFeedback = <T as Handler>::CallFeedback

source§

fn balance(&self, address: H160) -> U256

source§

fn code_size(&self, address: H160) -> U256

source§

fn code_hash(&self, address: H160) -> H256

source§

fn code(&self, address: H160) -> Vec<u8>

source§

fn storage(&self, address: H160, index: H256) -> H256

source§

fn original_storage(&self, address: H160, index: H256) -> H256

source§

fn gas_left(&self) -> U256

source§

fn gas_price(&self) -> U256

source§

fn origin(&self) -> H160

source§

fn block_hash(&self, number: U256) -> H256

source§

fn block_number(&self) -> U256

source§

fn block_coinbase(&self) -> H160

source§

fn block_timestamp(&self) -> U256

source§

fn block_difficulty(&self) -> U256

source§

fn block_randomness(&self) -> Option<H256>

source§

fn block_gas_limit(&self) -> U256

source§

fn block_base_fee_per_gas(&self) -> U256

source§

fn chain_id(&self) -> U256

source§

fn exists(&self, address: H160) -> bool

source§

fn deleted(&self, address: H160) -> bool

source§

fn is_cold( &mut self, address: H160, index: Option<H256> ) -> Result<bool, ExitError>

source§

fn set_storage( &mut self, address: H160, index: H256, value: H256 ) -> Result<(), ExitError>

source§

fn log( &mut self, address: H160, topics: Vec<H256>, data: Vec<u8> ) -> Result<(), ExitError>

source§

fn mark_delete(&mut self, address: H160, target: H160) -> Result<(), ExitError>

source§

fn create( &mut self, caller: H160, scheme: CreateScheme, value: U256, init_code: Vec<u8>, target_gas: Option<u64> ) -> Capture<(ExitReason, Option<H160>, Vec<u8>), <Box<T> as Handler>::CreateInterrupt>

source§

fn create_feedback( &mut self, _feedback: <Box<T> as Handler>::CreateFeedback ) -> Result<(), ExitError>

source§

fn call( &mut self, code_address: H160, transfer: Option<Transfer>, input: Vec<u8>, target_gas: Option<u64>, is_static: bool, context: Context ) -> Capture<(ExitReason, Vec<u8>), <Box<T> as Handler>::CallInterrupt>

source§

fn call_feedback( &mut self, _feedback: <Box<T> as Handler>::CallFeedback ) -> Result<(), ExitError>

source§

fn pre_validate( &mut self, context: &Context, opcode: Opcode, stack: &Stack ) -> Result<(), ExitError>

source§

fn other( &mut self, opcode: Opcode, _stack: &mut Machine ) -> Result<(), ExitError>

source§

fn record_external_operation( &mut self, op: ExternalOperation ) -> Result<(), ExitError>

Implementors§

source§

impl<'config, 'precompiles, S: StackState<'config>, P: PrecompileSet> Handler for StackExecutor<'config, 'precompiles, S, P>

§

type CreateInterrupt = StackExecutorCreateInterrupt<'static>

§

type CreateFeedback = Infallible

§

type CallInterrupt = StackExecutorCallInterrupt<'static>

§

type CallFeedback = Infallible