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§
Sourcefn get_bytes32(&mut self, key: B256) -> Result<(B256, u64), Self::Error>
fn get_bytes32(&mut self, key: B256) -> Result<(B256, u64), Self::Error>
Read a storage slot.
Sourcefn set_trie_slots(
&mut self,
data: &[u8],
gas_left: &mut u64,
) -> Result<ApiStatus, Self::Error>
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.
Sourcefn get_transient_bytes32(&mut self, key: B256) -> Result<B256, Self::Error>
fn get_transient_bytes32(&mut self, key: B256) -> Result<B256, Self::Error>
Read a transient storage slot.
Sourcefn set_transient_bytes32(
&mut self,
key: B256,
value: B256,
) -> Result<ApiStatus, Self::Error>
fn set_transient_bytes32( &mut self, key: B256, value: B256, ) -> Result<ApiStatus, Self::Error>
Write a transient storage slot.
Sourcefn 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 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.
Sourcefn create(
&mut self,
code: &[u8],
endowment: U256,
salt: Option<U256>,
gas: u64,
) -> Result<(Address, 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>
Execute CREATE or CREATE2.
Sourcefn account_balance(
&mut self,
address: Address,
) -> Result<(U256, u64), Self::Error>
fn account_balance( &mut self, address: Address, ) -> Result<(U256, u64), Self::Error>
Get an account’s balance.
Sourcefn account_code(
&mut self,
address: Address,
gas: u64,
) -> Result<(Vec<u8>, u64), Self::Error>
fn account_code( &mut self, address: Address, gas: u64, ) -> Result<(Vec<u8>, u64), Self::Error>
Get an account’s code.
Sourcefn account_code_hash(
&mut self,
address: Address,
) -> Result<(B256, u64), Self::Error>
fn account_code_hash( &mut self, address: Address, ) -> Result<(B256, u64), Self::Error>
Get an account’s code hash.