LOADING...
LOADING...
LOADING...
当前位置: 玩币族首页 > 区块链资产 > 【EOS源码分析】31 - eosio.system合约基类 & native.hpp权限相关结构体

【EOS源码分析】31 - eosio.system合约基类 & native.hpp权限相关结构体

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


接上篇,继续分析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开发系列目录

—-

编译者/作者:松果

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

LOADING...
LOADING...