gear icon indicating copy to clipboard operation
gear copied to clipboard

Provide proc-macro to make the signatures of the host functions human readable

Open clearloop opened this issue 3 years ago • 0 comments

Problem to Solve

now we're declaring host functions like

pub fn send(ctx: &mut Runtime<E>, args: &[Value]) -> SyscallOutput {
    let mut args = args.iter();

    let program_id_ptr = pop_i32(&mut args)?;
    let payload_ptr = pop_i32(&mut args)?;
    let payload_len = pop_i32(&mut args)?;
    let value_ptr = pop_i32(&mut args)?;
    let message_id_ptr = pop_i32(&mut args)?;
    
    // ...
        let dest: ProgramId = funcs::get_bytes32(memory, program_id_ptr)?.into();
        let payload = funcs::get_vec(memory, payload_ptr, payload_len)?;
        let value = funcs::get_u128(memory, value_ptr)?;
    // ...
}

https://github.com/gear-tech/gear/blob/master/core-backend/sandbox/src/funcs.rs

Possible Solution

could be like

#[host_func]
pub fn send(program_id: ProgramId, payload: Vec<u8>, gas_limit: i64, value: u128, message_id: i32) {
    ...
}

Notes

token stream mapping

type ptr len parsing
i32 name_i32 None None
i64 name_i64 None None
u128 name_ptr_i32 None Some(#funcs::get_u128(name_ptr_i32, name))
[u8] name_ptr_i32 Some(name_len_i32) Some(#funcs::get_vec(name_ptr_i32, name_len_i32))
struct name_ptr_i32 Some(name_len_i32) Some(#funcs::decode::<#type>(name_ptr_i32, name_len_i32))

references

https://webassembly.github.io/spec/core/syntax/types.html#number-types

clearloop avatar Jun 02 '22 01:06 clearloop