一起来读源码36-eosio.cdt action

摘要

负责action的收发,鉴权

 

详情

  • action.hpp

 

知识点:

    1.std:tie: 1.用于解构std::tuple中的元素,2.用来将多个变量构造成std::tuple;

    2.std::tuple: 元组,使用它可以把多个不同类型的变量组合成一个对象;

 

action数据拆包:

    默认包缓冲区尺寸:512byte,如果超过就malloc;具体的拆包代码在datastream.hpp里;

 

定义导出c函数:

//读action数据,具体看eos的wasm_interface.cpp

uint32_t read_action_data( void* msg, uint32_t len );

//获得action数据尺寸,具体看eos的wasm_interface.cpp

uint32_t action_data_size();

//设置需要被通知的账号

void require_recipient( uint64_t name );

//验证权限

void require_auth( uint64_t name );

//是否有此权限

bool has_auth( uint64_t name );

//权限验证函数版本2

void require_auth2( uint64_t name, uint64_t permission );

//是否是一个账号

bool is_account( uint64_t name );

void send_inline(char *serialized_action, size_t size);

void send_context_free_inline(char *serialized_action, size_t size);

uint64_t publication_time();

uint64_t current_receiver();

 

定义类:

struct permission_level { //权限等级

    permission_level(name a, name p):actor(a), permission(p){}

    permission_level(){}

    name actor; //权限拥有着

    name permission; //权限名

    == //判断是否相等

    < //判断是否小于

}

struct action_wrapper { //action封装类

    static constexpr eosio::name action_name = eosio::name(Name); //action名字

    eosio::name code_name; //调用的函数名字

    std::vector permissions; //权限

    //转action

    template

    action to_action(Args&&... args)const

    //发送

    template

    void send(Args&&... args)const

    //

    template

    void send_context_free(Args&&... args)const

}

你可能感兴趣的:(一起读源码)