接上篇,继续分析native.hpp头文件。 block_header native.hpp接下来定义了区块头(block_header)结构体: 是之前在eos主项目中介绍的block_header的简略版本,各字段的含义如下: abi_hash abi_hash是一张Multi-index表,记录部署在EOS区块链上的合约的ABI的哈希值,定义如下: 两个字段owner和hash,分别表示合约被部署的账号名和合约ABI的哈希值。 通过属性[[eosio::table("abihash")]]指定了表名为abihash,这张表只有一个scope,使用cleos get table查询示例如下: 要注意和code hash的区别,使用cleos set contract命令部署EOS智能合约时,会调用setcode和setabi这两个Action分别设置WASM代码的哈希值和ABI的哈希值。 使用cleos get code命令可以查询合约的code hash: 可以看到,对于部署在本地的coincoininfo合约,其code hash值为: 34d92b7c99e7711b1461f3001655e5e4676ef6055a90fc108531f3759de76e40 abi hash值为: 5183dd79b980c458cda67f5a66794b373acb52e8c28b65a1683f1995d883104d native合约类 native类继承自eosio::contract,是一个EOS智能合约类,同时是system_contract类的父类。 native.hpp中声明了一些Action,其代码是从eosio.bios.hpp部分移植过来的,eosio.system.cpp中实现了部分Action。 本质上讲,EOS智能合约中定义的Action实际上应该称为Action Handler,即Action接收器或Action处理器; 用户发送的请求才是Action,用户把Action发送给EOS智能合约,合约把Action分发给对应的Action Handler,后者内部定义了业务逻辑代码来处理用户请求,类似于传统的C/S架构。 native合约类声明的Action包括: using newaccount_action = eosio::action_wrapper<"newaccount"_n, &native::newaccount>; using updateauth_action = eosio::action_wrapper<"updateauth"_n, &native::updateauth>; using deleteauth_action = eosio::action_wrapper<"deleteauth"_n, &native::deleteauth>; using linkauth_action = eosio::action_wrapper<"linkauth"_n, &native::linkauth>; using unlinkauth_action = eosio::action_wrapper<"unlinkauth"_n, &native::unlinkauth>; using canceldelay_action = eosio::action_wrapper<"canceldelay"_n, &native::canceldelay>; using setcode_action = eosio::action_wrapper<"setcode"_n, &native::setcode>; using setabi_action = eosio::action_wrapper<"setabi"_n, &native::setabi>; 区别于合约层(contract level),这些Action都是核心层(core level)的,用户能直接使用的Action有如下几个: 1、newaccount(创建新账户) [[eosio::action]] void newaccount( const name& creator, const name& name, ignore<authority> owner, ignore<authority> active); 对应cleos命令: cleos system newaccount [OPTIONS] creator name OwnerKey [ActiveKey] 2、updateauth(更新权限) [[eosio::action]] void updateauth( ignore<name> account, ignore<name> permission, ignore<name> parent, ignore<authority> auth ) {} 对应cleos命令: cleos set account permission [OPTIONS] account permission [authority] [parent] 3、canceldelay(取消一个延期交易) [[eosio::action]] void canceldelay( ignore<permission_level> canceling_auth, ignore<checksum256> trx_id ) {} 对应cleos命令: cleos system canceldelay [OPTIONS] canceling_account canceling_permission trx_id 下一篇文章介绍native的子类system_contract。 更多内容 币圈信息站开发目录 EOS开发系列目录 —- 编译者/作者:松果 玩币族申明:玩币族作为开放的资讯翻译/分享平台,所提供的所有资讯仅代表作者个人观点,与玩币族平台立场无关,且不构成任何投资理财建议。文章版权归原作者所有。 |
【EOS源码分析】32 - eosio.system合约native.hpp头文件分析
2020-06-08 松果 来源:区块链网络
LOADING...
相关阅读:
- 交易所赛道烽烟四起 站用户的永续合约交易系统是什么样?2020-08-05
- 极致tron新2020币用宝区块链应用年中颁奖盛典2020-08-05
- BMEX金小雅BTC行情分析:今日阻力位11650今日支撑位111502020-08-05
- GECT以算力构建绿色数字能源2020-08-05
- 火币日本启动上币投票活动IOST在列 | IOST节点周报第14期2020-08-05