LOADING...
LOADING...
LOADING...
当前位置: 玩币族首页 > 区块链资讯 > 【EOS源码分析】30 - eosio.system.hpp中资源相关的Multi-index表

【EOS源码分析】30 - eosio.system.hpp中资源相关的Multi-index表

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


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

user_resources

user_resources表保存EOS账户的资源余额信息,定义如下:


字段含义如下:

owner:EOS账户名;net_weight:抵押到网络资源的EOS数量;cpu_weight:抵押到CPU资源的EOS数量;ram_bytes:购买的内存量,单位字节。

user_resources表的表名被指定为userres:

typedef eosio::multi_index< "userres"_n, user_resources > user_resources_table;

使用cleos get table命令查询userres表的示例如下:


cleos get table命令查询Multi-index表时,需要传递account、scope、table三个参数:

cleos get table [OPTIONS] account scope table

之前介绍的多索引数据表如global、global2、producers、voters等,使用的account和scope是相同的(都是eosio),即这些表只有一个scope;

但查询userres表时,每个EOS账户对应一个scope,主要是为了便于经常需要通过账户名查询数据的操作,因为EOS账户名也是唯一的。

当需要查询userres表的用户时,可以使用cleos get scope命令:


通过选项-t userres指定要查询的Multi-index数据表。

delegated_bandwidth

delegated_bandwidth表保存资源抵押记录和抵押关系,定义如下:


字段含义如下:

from:抵押EOS的账户;to:获得CPU/NET资源的账户;net_weight:抵押到网络资源的EOS数量;cpu_weight:抵押到CPU资源的EOS数量。

根据EOS规则,抵押EOS代币获取CPU/NET资源有两种方式:

stake:自己抵押EOS换取资源给自己用,即表中from和to字段的值相同;delegate:自己抵押EOS换取资源给别人用,即表中from和to字段的值不同。

delegated_bandwidth表的表名被指定为delband:

typedef eosio::multi_index< "delband"_n, delegated_bandwidth > del_bandwidth_table;

delband表和userres表类似,都是一个账户一个scope,使用cleos get table命令查询delband表的示例如下:


例子中eosio账户给eosio.assert、eosio.lost账户抵押了EOS,后两者获取CPU/NET资源的方式是delegate;guzdkmrtgage账户给自己抵押了EOS,获取CPU/NET资源的方式是stake。

refund_request

refund_request表记录CPU/NET资源的解抵押记录,定义如下:


字段含义如下:

owner:EOS账户名;request_time:请求时间;net_amount:解除抵押到网络资源的EOS数量;cpu_amount:解除抵押到计算资源的EOS数量。

解抵押后CPU/NET资源会被立即收回,但EOS代币变为可用(liquid)状态需要等待72小时,因此会失去72小时的资源可用性;

还有一个系统上的要求是全网投票率达到15%以上才允许解抵押,另外解抵押操作会写入新的数据到refund_request数据表,因此会消耗RAM。

refund_request表的表名被指定为refunds:

typedef eosio::multi_index< "refunds"_n, refund_request > refunds_table;

使用cleos get table命令查询时使用refunds,scope规则和userres、delband表相同。

下面是Jungle测试网上的refunds表查询示例:


REX相关的数据表

eosio.system.hpp还定义了REX资源交易所相关的数据表(结构体名,括号里为表名):

rex_pool(rexpool);rex_fund(rexfund);rex_balance(rexbal);rex_loan(cpuloan、netloan);rex_order(rexqueue)。

这些表在之前的文章:【EOSREX】REX的数据状态中有详细介绍。

eosio.system.hpp中接下来声明了系统合约类system_contract,放到下一篇文章中介绍。

更多内容

币圈信息站开发目录

EOS开发系列目录

—-

编译者/作者:松果

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

LOADING...
LOADING...