源代码解读 [EOS 源码分析] 30 - eosio.system.hpp 中资源相关的 Multi-index 表

Admin · 2019年12月21日 · 95 次阅读
本帖已被设为精华帖!

EOS 源码分析系列文章,由技术作者松果撰写。为帮助更多开发者了解,特获授权转载至此。感谢松果兄支持。

img

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

user_resources

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

img

字段含义如下:

  • 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表的示例如下:

img

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命令:

img

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

delegated_bandwidth

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

img

字段含义如下:

  • 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表的示例如下:

img

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

refund_request

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

img

字段含义如下:

  • 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表查询示例:

img

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

共收到 0 条回复
Admin 将本帖设为了精华贴 12月21日 17:49
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册