pub trait HostContext {
fn account_exists(&mut self, addr: &[u8; 20]) -> bool;
fn get_storage(&mut self, addr: &[u8; 20], key: &[u8; 32]) -> [u8; 32];
fn set_storage(
&mut self,
addr: &[u8; 20],
key: &[u8; 32],
value: &[u8; 32]
) -> evmc_storage_status;
fn get_balance(&mut self, addr: &[u8; 20]) -> [u8; 32];
fn get_code_size(&mut self, addr: &[u8; 20]) -> usize;
fn get_code_hash(&mut self, addr: &[u8; 20]) -> [u8; 32];
fn copy_code(
&mut self,
addr: &[u8; 20],
offset: &usize,
buffer_data: &*mut u8,
buffer_size: &usize
) -> usize;
fn selfdestruct(&mut self, addr: &[u8; 20], beneficiary: &[u8; 20]);
fn get_tx_context(
&mut self
) -> ([u8; 32], [u8; 20], [u8; 20], i64, i64, i64, [u8; 32]);
fn get_block_hash(&mut self, number: i64) -> [u8; 32];
fn emit_log(
&mut self,
addr: &[u8; 20],
topics: &Vec<[u8; 32], Global>,
data: &[u8]
);
fn call(
&mut self,
kind: evmc_call_kind,
destination: &[u8; 20],
sender: &[u8; 20],
value: &[u8; 32],
input: &[u8],
gas: i64,
depth: i32,
is_static: bool,
salt: &[u8; 32]
) -> (Vec<u8, Global>, i64, [u8; 20], evmc_status_code);
}