pub trait Handler {
type CreateInterrupt;
type CreateFeedback;
type CallInterrupt;
type CallFeedback;
Show 38 methods
// Required methods
fn balance(&self, address: H160) -> U256;
fn code_size(&mut self, address: H160) -> U256;
fn code_hash(&mut self, address: H160) -> H256;
fn code(&self, address: H160) -> Vec<u8> ⓘ;
fn storage(&self, address: H160, index: H256) -> H256;
fn is_empty_storage(&self, address: H160) -> bool;
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>) -> bool;
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, 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 record_external_operation(
&mut self,
op: ExternalOperation,
) -> Result<(), ExitError>;
fn blob_base_fee(&self) -> Option<u128>;
fn get_blob_hash(&self, index: usize) -> Option<U256>;
fn tstore(
&mut self,
address: H160,
index: H256,
value: U256,
) -> Result<(), ExitError>;
fn tload(&mut self, address: H160, index: H256) -> Result<U256, ExitError>;
fn get_authority_target(&mut self, address: H160) -> Option<H160>;
fn authority_code(&mut self, authority: H160) -> Vec<u8> ⓘ;
fn warm_target(&mut self, target: (H160, Option<H256>));
// 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§
Sourcetype CreateInterrupt
type CreateInterrupt
Type of CREATE interrupt.
Sourcetype CreateFeedback
type CreateFeedback
Feedback value for CREATE interrupt.
Sourcetype CallInterrupt
type CallInterrupt
Type of CALL interrupt.
Sourcetype CallFeedback
type CallFeedback
Feedback value of CALL interrupt.
Required Methods§
Sourcefn is_empty_storage(&self, address: H160) -> bool
fn is_empty_storage(&self, address: H160) -> bool
Check if the storage of the address is empty.
Sourcefn original_storage(&self, address: H160, index: H256) -> H256
fn original_storage(&self, address: H160, index: H256) -> H256
Get original storage value of address at index.
Sourcefn block_hash(&self, number: U256) -> H256
fn block_hash(&self, number: U256) -> H256
Get environmental block hash.
Sourcefn block_number(&self) -> U256
fn block_number(&self) -> U256
Get environmental block number.
Sourcefn block_coinbase(&self) -> H160
fn block_coinbase(&self) -> H160
Get environmental coinbase.
Sourcefn block_timestamp(&self) -> U256
fn block_timestamp(&self) -> U256
Get environmental block timestamp.
Sourcefn block_difficulty(&self) -> U256
fn block_difficulty(&self) -> U256
Get environmental block difficulty.
Sourcefn block_randomness(&self) -> Option<H256>
fn block_randomness(&self) -> Option<H256>
Get environmental block randomness.
Sourcefn block_gas_limit(&self) -> U256
fn block_gas_limit(&self) -> U256
Get environmental gas limit.
Sourcefn block_base_fee_per_gas(&self) -> U256
fn block_base_fee_per_gas(&self) -> U256
Environmental block base fee.
Sourcefn is_cold(&mut self, address: H160, index: Option<H256>) -> bool
fn is_cold(&mut self, address: H160, index: Option<H256>) -> bool
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:
§Errors
Return ExitError
Sourcefn set_storage(
&mut self,
address: H160,
index: H256,
value: H256,
) -> Result<(), ExitError>
fn set_storage( &mut self, address: H160, index: H256, value: H256, ) -> Result<(), ExitError>
Sourcefn log(
&mut self,
address: H160,
topics: Vec<H256>,
data: Vec<u8>,
) -> Result<(), ExitError>
fn log( &mut self, address: H160, topics: Vec<H256>, data: Vec<u8>, ) -> Result<(), ExitError>
Sourcefn create(
&mut self,
caller: H160,
scheme: CreateScheme,
value: U256,
init_code: Vec<u8>,
target_gas: Option<u64>,
) -> Capture<(ExitReason, Vec<u8>), Self::CreateInterrupt>
fn create( &mut self, caller: H160, scheme: CreateScheme, value: U256, init_code: Vec<u8>, target_gas: Option<u64>, ) -> Capture<(ExitReason, Vec<u8>), Self::CreateInterrupt>
Invoke a create operation.
Sourcefn 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 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.
Sourcefn record_external_operation(
&mut self,
op: ExternalOperation,
) -> Result<(), ExitError>
fn record_external_operation( &mut self, op: ExternalOperation, ) -> Result<(), ExitError>
Sourcefn blob_base_fee(&self) -> Option<u128>
fn blob_base_fee(&self) -> Option<u128>
Returns None if Cancun is not enabled.
CANCUN hard fork.
[EIP-4844]: Shard Blob Transactions
[EIP-7516]: BLOBBASEFEE instruction
Sourcefn get_blob_hash(&self, index: usize) -> Option<U256>
fn get_blob_hash(&self, index: usize) -> Option<U256>
Get blob_hash from blob_versioned_hashes by index
[EIP-4844]: BLOBHASH - https://eips.ethereum.org/EIPS/eip-4844#opcode-to-get-versioned-hashes
Return the target address of the authority delegation designation (EIP-7702).
Get delegation designator code for the authority code. EIP-7702
Sourcefn warm_target(&mut self, target: (H160, Option<H256>))
fn warm_target(&mut self, target: (H160, Option<H256>))
Warm target according to EIP-2929