HostIo

Trait HostIo 

Source
pub trait HostIo {
    type Error;

    // Required methods
    fn get_bytes32(&mut self, key: B256) -> Result<(B256, u64), Self::Error>;
    fn set_trie_slots(
        &mut self,
        data: &[u8],
        gas_left: &mut u64,
    ) -> Result<ApiStatus, Self::Error>;
    fn get_transient_bytes32(&mut self, key: B256) -> Result<B256, Self::Error>;
    fn set_transient_bytes32(
        &mut self,
        key: B256,
        value: B256,
    ) -> Result<ApiStatus, Self::Error>;
    fn contract_call(
        &mut self,
        contract: Address,
        calldata: &[u8],
        gas_left: u64,
        gas_req: u64,
        value: U256,
        call_type: RequestType,
    ) -> Result<(Vec<u8>, u64), Self::Error>;
    fn create(
        &mut self,
        code: &[u8],
        endowment: U256,
        salt: Option<U256>,
        gas: u64,
    ) -> Result<(Address, Vec<u8>, u64), Self::Error>;
    fn emit_log(
        &mut self,
        topics: &[B256],
        data: &[u8],
    ) -> Result<(), Self::Error>;
    fn account_balance(
        &mut self,
        address: Address,
    ) -> Result<(U256, u64), Self::Error>;
    fn account_code(
        &mut self,
        address: Address,
        gas: u64,
    ) -> Result<(Vec<u8>, u64), Self::Error>;
    fn account_code_hash(
        &mut self,
        address: Address,
    ) -> Result<(B256, u64), Self::Error>;
    fn add_pages(&mut self, pages: u16) -> Result<u64, Self::Error>;
    fn capture_hostio(
        &mut self,
        name: &str,
        args: &[u8],
        outs: &[u8],
        start_ink: u64,
        end_ink: u64,
    );
}
Expand description

Host I/O operations available to Stylus WASM programs.

Each method corresponds to a RequestType variant and provides the bridge between the WASM runtime and the EVM state.

Required Associated Types§

Required Methods§

Source

fn get_bytes32(&mut self, key: B256) -> Result<(B256, u64), Self::Error>

Read a storage slot.

Source

fn set_trie_slots( &mut self, data: &[u8], gas_left: &mut u64, ) -> Result<ApiStatus, Self::Error>

Write storage slots. Returns an API status and gas cost.

Source

fn get_transient_bytes32(&mut self, key: B256) -> Result<B256, Self::Error>

Read a transient storage slot.

Source

fn set_transient_bytes32( &mut self, key: B256, value: B256, ) -> Result<ApiStatus, Self::Error>

Write a transient storage slot.

Source

fn contract_call( &mut self, contract: Address, calldata: &[u8], gas_left: u64, gas_req: u64, value: U256, call_type: RequestType, ) -> Result<(Vec<u8>, u64), Self::Error>

Execute a CALL-family opcode.

Source

fn create( &mut self, code: &[u8], endowment: U256, salt: Option<U256>, gas: u64, ) -> Result<(Address, Vec<u8>, u64), Self::Error>

Execute CREATE or CREATE2.

Source

fn emit_log(&mut self, topics: &[B256], data: &[u8]) -> Result<(), Self::Error>

Emit a log.

Source

fn account_balance( &mut self, address: Address, ) -> Result<(U256, u64), Self::Error>

Get an account’s balance.

Source

fn account_code( &mut self, address: Address, gas: u64, ) -> Result<(Vec<u8>, u64), Self::Error>

Get an account’s code.

Source

fn account_code_hash( &mut self, address: Address, ) -> Result<(B256, u64), Self::Error>

Get an account’s code hash.

Source

fn add_pages(&mut self, pages: u16) -> Result<u64, Self::Error>

Request additional WASM memory pages.

Source

fn capture_hostio( &mut self, name: &str, args: &[u8], outs: &[u8], start_ink: u64, end_ink: u64, )

Capture host I/O for tracing.

Implementors§