LOADING...
LOADING...
LOADING...
当前位置: 玩币族首页 > 币圈百科 > 【EOS源码分析】32 - eosio.system合约native.hpp头文件分析

【EOS源码分析】32 - eosio.system合约native.hpp头文件分析

2020-06-08 松果 来源:区块链网络


接上篇,继续分析native.hpp头文件。

block_header

native.hpp接下来定义了区块头(block_header)结构体:


是之前在eos主项目中介绍的block_header的简略版本,各字段的含义如下:

timestamp:时间戳;producer:区块生产者;confirmed:当前区块生产者需要确认的最新区块数量;previous:区块链上前一个区块的ID;transaction_mroot:交易的默克尔树根哈希;action_mroot:Action的默克尔树根哈希;schedule_version:区块生产者计划的版本;new_producers:下一轮区块生产者。

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开发系列目录

—-

编译者/作者:松果

玩币族申明:玩币族作为开放的资讯翻译/分享平台,所提供的所有资讯仅代表作者个人观点,与玩币族平台立场无关,且不构成任何投资理财建议。文章版权归原作者所有。

LOADING...
LOADING...