LOADING...
LOADING...
LOADING...
当前位置: 玩币族首页 > 行情分析 > 【EOS源码分析】29 - eosio.system合约源码分析(eosio.system.hpp)

【EOS源码分析】29 - eosio.system合约源码分析(eosio.system.hpp)

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


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

producer_info

producer_info表保存已注册的区块生产者(出块节点)信息,定义如下:


字段含义如下:

owner:拥有该节点的EOS账户名;total_votes:获得的投票数,是根据算法计算出的投票数,不是EOS数量;producer_key:区块生产者公钥,注意不是owner账户的公钥;is_active:是否活跃;url:节点的主页地址;unpaid_blocks:未支付的区块数,节点通过claim获取出块奖励,这也是EOS通证的增发方式;last_claim_time:上次领取出块奖励的时间;location:节点位置代号。

使用cleos查询Multi-index表数据时,使用的表名是producers:

typedef eosio::multi_index< "producers"_n, producer_info, indexed_by<"prototalvote"_n, const_mem_fun<producer_info, double, &producer_info::by_votes> > > producers_table;

producer_info2

producer_info2表是producer_info表的扩展,用于记录EOS节点的投票奖励权重,增加了两个字段:

votepay_share:投票奖励权重;last_votepay_share_update:上次更新时间。

producer_info2表的表名被指定为producers2:

typedef eosio::multi_index< "producers2"_n, producer_info2 > producers_table2;

使用cleos查询producers2表的示例如下:


到这里发现了一个规律,包括上一篇文章介绍的global、global2、global3表,和这里的producers、producers2表,每当原数据表需要扩展新字段时,都是新建一张表,而不是在原表上增加。

这是因为,如果EOS合约的Multi-index表中已经有数据了,想要再向其中添加新字段只能先清空表中的数据,为了不影响链上已经运行的数据,这里采用了新增一张数据表的方式;

还有一种方法理论上可以解决这个问题,就是把旧表中的数据同步到新增了字段的新表中,但要求同步时旧表中的数据是相对稳定的,即停机维护,而这在已经处于运行状态的智能合约上不太可行,除非在同步数据期间没有人调用此合约而产生新数据。

voter_info

voter_info表保存投票者和投票信息,定义如下:


字段含义如下:

owner:投票者;proxy:owner的投票代理者;producers:已投的节点列表,投票方式选择代理或直接投节点二选一,即proxy和producers同时只会有一个字段有值;staked:抵押的EOS数量(带精度);last_vote_weight:上次投票权重,如果一段时间内不重新投票,投票权重会按照算法逐渐衰减;proxied_vote_weight:代理投票权重(投票代理此值才会大于0);is_proxy:owner是否是投票代理;flags1:标识位,可以设置为这3个枚举值之一:ram_managed、net_managed、cpu_managed。

使用的查询表名是voters:

typedef eosio::multi_index< "voters"_n, voter_info > voters_table;

使用cleos查询voters表的示例如下:


eosio.system.hpp中还声明和定义了很多内容,下一篇文章继续介绍。

更多内容

币圈信息站开发目录

EOS开发系列目录

—-

编译者/作者:松果

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

LOADING...
LOADING...