# Trait ethcore::evm::ext::Ext [−] [src]

    pub trait Ext {
        fn storage_at(&self, key: &H256) -> H256;
        fn set_storage(&mut self, key: H256, value: H256);
        fn exists(&self, address: &Address) -> bool;
        fn exists_and_not_null(&self, address: &Address) -> bool;
        fn origin_balance(&self) -> U256;
        fn balance(&self, address: &Address) -> U256;
        fn blockhash(&self, number: &U256) -> H256;
        fn create(&mut self,
              gas: &U256,
              value: &U256,
              code: &[u8])
              -> ContractCreateResult;
        fn call(&mut self,
            gas: &U256,
            sender_address: &Address,
            receive_address: &Address,
            value: Option<U256>,
            data: &[u8],
            code_address: &Address,
            output: &mut [u8],
            call_type: CallType)
            -> MessageCallResult;
        fn extcode(&self, address: &Address) -> Arc<Bytes>;
        fn extcodesize(&self, address: &Address) -> usize;
        fn log(&mut self, topics: Vec<H256>, data: &[u8]);
        fn ret(self, gas: &U256, data: &[u8]) -> Result<U256> where Self: Sized;
        fn suicide(&mut self, refund_address: &Address);
        fn schedule(&self) -> &Schedule;
        fn env_info(&self) -> &EnvInfo;
        fn depth(&self) -> usize;
        fn inc_sstore_clears(&mut self);

        fn trace_prepare_execute(&mut self,
                             _pc: usize,
                             _instruction: u8,
                             _gas_cost: &U256)
                             -> bool { ... }
        fn trace_executed(&mut self,
                      _gas_used: U256,
                      _stack_push: &[U256],
                      _mem_diff: Option<(usize, &[u8])>,
                      _store_diff: Option<(U256, U256)>) { ... }
    }

Externalities interface for EVMs

## Required Methods

### `fn storage_at(&self, key: &H256) -> H256`

Returns a value for given key.

### `fn set_storage(&mut self, key: H256, value: H256)`

Stores a value for given key.

### `fn exists(&self, address: &Address) -> bool`

Determine whether an account exists.

### `fn exists_and_not_null(&self, address: &Address) -> bool`

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

### `fn origin_balance(&self) -> U256`

Balance of the origin account.

### `fn balance(&self, address: &Address) -> U256`

Returns address balance.

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

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

### `fn create(&mut self,
gas: &U256,
value: &U256,
code: &[u8])
-> ContractCreateResult`

Creates new contract.

Returns gas_left and contract address if contract creation was succesfull.

### `fn call(&mut self,
gas: &U256,
sender_address: &Address,
receive_address: &Address,
value: Option<U256>,
data: &[u8],
code_address: &Address,
output: &mut [u8],
call_type: CallType)
-> MessageCallResult`

Message call.

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

### `fn extcode(&self, address: &Address) -> Arc<Bytes>`

Returns code at given address

### `fn extcodesize(&self, address: &Address) -> usize`

Returns code size at given address

### `fn log(&mut self, topics: Vec<H256>, data: &[u8])`

Creates log entry with given topics and data

### `fn ret(self, gas: &U256, data: &[u8]) -> Result<U256> where Self: Sized`

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

### `fn suicide(&mut self, refund_address: &Address)`

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

### `fn schedule(&self) -> &Schedule`

Returns schedule.

### `fn env_info(&self) -> &EnvInfo`

Returns environment info.

### `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.

### `fn inc_sstore_clears(&mut self)`

Increments sstore refunds count by 1.

## Provided Methods

### `fn trace_prepare_execute(&mut self,
_pc: usize,
_instruction: u8,
_gas_cost: &U256)
-> bool`

Prepare to trace an operation. Passthrough for the VM trace.

### `fn trace_executed(&mut self,
_gas_used: U256,
_stack_push: &[U256],
_mem_diff: Option<(usize, &[u8])>,
_store_diff: Option<(U256, U256)>)`

Trace the finalised execution of a single instruction.

## Implementors

# Help

## Keyboard Shortcuts

?
  Show this help dialog
S
  Focus the search field
⇤
  Move up in search results
⇥
  Move down in search results
⏎
  Go to active search result
+
  Collapse/expand all sections

## Search Tricks

Prefix searches with a type followed by a colon (e.g. `fn:`) to restrict the search to a given type.

Accepted types are: `fn`, `mod`, `struct`, `enum`, `trait`, `type`, `macro`, and `const`.

Search functions by type signature (e.g. `vec -> usize` or `* -> vec`)