Trait Ext

Source
pub trait Ext {
Show 27 methods // Required methods fn initial_storage_at(&self, key: &H256) -> Result<H256, Error>; fn storage_at(&self, key: &H256) -> Result<H256, Error>; fn set_storage(&mut self, key: H256, value: H256) -> Result<(), Error>; fn exists(&self, address: &H160) -> Result<bool, Error>; fn exists_and_not_null(&self, address: &H160) -> Result<bool, Error>; fn origin_balance(&self) -> Result<U256, Error>; fn balance(&self, address: &H160) -> Result<U256, Error>; fn blockhash(&mut self, number: &U256) -> H256; fn create( &mut self, gas: &U256, value: &U256, code: &[u8], parent_version: &U256, address: CreateContractAddress, trap: bool, ) -> Result<ContractCreateResult, TrapKind>; fn call( &mut self, gas: &U256, sender_address: &H160, receive_address: &H160, value: Option<U256>, data: &[u8], code_address: &H160, call_type: ActionType, trap: bool, ) -> Result<MessageCallResult, TrapKind>; fn extcode(&self, address: &H160) -> Result<Option<Arc<Vec<u8>>>, Error>; fn extcodehash(&self, address: &H160) -> Result<Option<H256>, Error>; fn extcodesize(&self, address: &H160) -> Result<Option<usize>, Error>; fn log(&mut self, topics: Vec<H256>, data: &[u8]) -> Result<(), Error>; fn ret( self, gas: &U256, data: &ReturnData, apply_state: bool, ) -> Result<U256, Error>; fn suicide(&mut self, refund_address: &H160) -> Result<(), Error>; fn schedule(&self) -> &Schedule; fn env_info(&self) -> &EnvInfo; fn chain_id(&self) -> u64; fn depth(&self) -> usize; fn add_sstore_refund(&mut self, value: usize); fn sub_sstore_refund(&mut self, value: usize); fn is_static(&self) -> bool; // Provided methods fn trace_next_instruction( &mut self, _pc: usize, _instruction: u8, _current_gas: U256, ) -> bool { ... } fn trace_prepare_execute( &mut self, _pc: usize, _instruction: u8, _gas_cost: U256, _mem_written: Option<(usize, usize)>, _store_written: Option<(U256, U256)>, ) { ... } fn trace_failed(&mut self) { ... } fn trace_executed( &mut self, _gas_used: U256, _stack_push: &[U256], _mem: &[u8], ) { ... }
}
Expand description

Externalities interface for VVMs

Required Methods§

Source

fn initial_storage_at(&self, key: &H256) -> Result<H256, Error>

Returns the storage value for a given key if reversion happens on the current transaction.

Source

fn storage_at(&self, key: &H256) -> Result<H256, Error>

Returns a value for given key.

Source

fn set_storage(&mut self, key: H256, value: H256) -> Result<(), Error>

Stores a value for given key.

Source

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

Determine whether an account exists.

Source

fn exists_and_not_null(&self, address: &H160) -> Result<bool, Error>

Determine whether an account exists and is not null (zero balance/nonce, no code).

Source

fn origin_balance(&self) -> Result<U256, Error>

Balance of the origin account.

Source

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

Returns address balance.

Source

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

Returns the hash of one of the 256 most recent complete blocks.

Source

fn create( &mut self, gas: &U256, value: &U256, code: &[u8], parent_version: &U256, address: CreateContractAddress, trap: bool, ) -> Result<ContractCreateResult, TrapKind>

Creates new contract.

Returns gas_left and contract address if contract creation was successful.

Source

fn call( &mut self, gas: &U256, sender_address: &H160, receive_address: &H160, value: Option<U256>, data: &[u8], code_address: &H160, call_type: ActionType, trap: bool, ) -> Result<MessageCallResult, TrapKind>

Message call.

Returns Err, if we run out of gas. Otherwise returns call_result which contains gas left and true if subcall was successfull.

Source

fn extcode(&self, address: &H160) -> Result<Option<Arc<Vec<u8>>>, Error>

Returns code at given address

Source

fn extcodehash(&self, address: &H160) -> Result<Option<H256>, Error>

Returns code hash at given address

Source

fn extcodesize(&self, address: &H160) -> Result<Option<usize>, Error>

Returns code size at given address

Source

fn log(&mut self, topics: Vec<H256>, data: &[u8]) -> Result<(), Error>

Creates log entry with given topics and data

Source

fn ret( self, gas: &U256, data: &ReturnData, apply_state: bool, ) -> Result<U256, Error>

Should be called when transaction calls RETURN opcode. Returns gas_left if cost of returning the data is not too high.

Source

fn suicide(&mut self, refund_address: &H160) -> Result<(), Error>

Should be called when contract commits suicide. Address to which funds should be refunded.

Source

fn schedule(&self) -> &Schedule

Returns schedule.

Source

fn env_info(&self) -> &EnvInfo

Returns environment info.

Source

fn chain_id(&self) -> u64

Returns the chain ID of the blockchain

Source

fn depth(&self) -> usize

Returns current depth of execution.

If contract A calls contract B, and contract B calls C, then A depth is 0, B is 1, C is 2 and so on.

Source

fn add_sstore_refund(&mut self, value: usize)

Increments sstore refunds counter.

Source

fn sub_sstore_refund(&mut self, value: usize)

Decrements sstore refunds counter.

Source

fn is_static(&self) -> bool

Check if running in static context.

Provided Methods§

Source

fn trace_next_instruction( &mut self, _pc: usize, _instruction: u8, _current_gas: U256, ) -> bool

Decide if any more operations should be traced. Passthrough for the VM trace.

Source

fn trace_prepare_execute( &mut self, _pc: usize, _instruction: u8, _gas_cost: U256, _mem_written: Option<(usize, usize)>, _store_written: Option<(U256, U256)>, )

Prepare to trace an operation. Passthrough for the VM trace. For each call of trace_prepare_execute either trace_failed or trace_executed MUST be called.

Source

fn trace_failed(&mut self)

Trace the execution failure of a single instruction.

Source

fn trace_executed(&mut self, _gas_used: U256, _stack_push: &[U256], _mem: &[u8])

Trace the finalised execution of a single instruction.

Implementors§