接上篇,继续分析eosio.system.hpp头文件。 native.hpp EOSIO的系统合约类是system_contract,声明在eosio.system.hpp头文件中,继承自native类。 native类定义在native.hpp(eosio.contracts/contracts/eosio.system/include/eosio.system/native.hpp)头文件中,下面从native.hpp的源码开始分析。 首先是两个用于节点升级EOSIO版本到v1.8.x时的共识协议升级的函数: preactivate_feature、is_feature_activated,两个函数在wasm_interface中实现,分别用于激活协议特征和检查协议特征是否被激活。 native.hpp中权限相关的结构体 native.hpp然后定义了命名空间eosiosystem,内部定义了一系列权限、区块相关的结构体。 1、权限等级权重(代码中省略了序列化宏EOSLIB_SERIALIZE,下同): struct permission_level_weight { permission_level permission; uint16_t weight; }; 2、公钥权重 struct key_weight { eosio::public_key key; uint16_t weight; }; 3、延时时间权重 struct wait_weight { uint32_t wait_sec; uint16_t weight; }; 一个EOS账户的权限由以上权重中的一种或多种组成,每种权重又可能有一个或多个,EOS权限有一个权重阈值,如果某个权重或几个权重之和达到阈值就可以执行相应的操作。 以cleos get account命令为例: alice账户的owner权限,阈值是1,只有一个key_weight类型的权重也是1,EOS6W8V9TguKRMWGrGKcfBPNAPSdk1asKL5QnwbFZV7fJyNMNRLN5这个公钥就可以执行alice账户的owner权限相关操作; alice账户的active权限,阈值是1,有两个权重均为1,类型分别是key_weight和permission_level_weight,两个权重均能单独执行alice账户的active权限相关操作。 4、权力(authority) struct authority { uint32_t threshold = 0; std::vector<key_weight> keys; std::vector<permission_level_weight> accounts; std::vector<wait_weight> waits; }; 这里使用了authority这个词,注意和permission的区别,authority表示某种权力,permission表示对某种权力的授权或许可,permission的范围更大(permission > authority > weight)。 struct authority包含了一个阈值字段threshold,和3种权重的数组,使用cleos get account命令查询账户信息时添加 -j 选项以JSON格式展示信息,可以看到EOS账户的权限结构: permissions字段下有两个permission类型的对象owner和active,后者的required_auth字段就是authority对象的JSON格式。 native.hpp中还定义和声明了更多结构体和类,下一篇文章继续介绍。 更多内容 币圈信息站开发目录 EOS开发系列目录 —- 编译者/作者:松果 玩币族申明:玩币族作为开放的资讯翻译/分享平台,所提供的所有资讯仅代表作者个人观点,与玩币族平台立场无关,且不构成任何投资理财建议。文章版权归原作者所有。 |
【EOS源码分析】31 - eosio.system合约基类 & native.hpp权限相关结构体
2020-06-08 松果 来源:区块链网络
LOADING...
相关阅读:
- 8.3证券日报:已有不少券商开始探索区块链赋能证券业务领域2020-08-03
- 币圈有道:(8-3)个体是渺小的比特币今日行情分析2020-08-03
- 千万别看轰动全球的ALOKEX交易所揭秘ALOKEX合约核心技术看完的人都疯了2020-08-03
- 社区生态?|P网Poloniex比特币永续合约模拟赛再次开战总奖池高达22,500US2020-08-03
- 8月3比特币以太坊柚子等行情分析操作建议2020-08-03