LOADING...
LOADING...
LOADING...
当前位置: 玩币族首页 > 区块链资讯 > 【EOS源码分析】33 - eosio.system.hpp合约类system_contract分析

【EOS源码分析】33 - eosio.system.hpp合约类system_contract分析

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


上一篇文章介绍了eosio.system合约类system_contract的基类native所在的头文件native.hpp,这篇文章回到eosio.system.hpp,介绍其中声明的合约类system_contract。

system_contract

system_contract类继承自native类,是EOS系统合约的实现类,system_contract首先声明了一系列私有成员变量:


都是前几篇文章介绍过的Multi-index表对象实例,只有rammarket还没有介绍过,它是exchange_state表结构的表名,exchange_state是使用Bancor算法的市场抽象,目前用于RAM交易市场,后续再细讲这部分内容。

然后是公有成员变量的定义和初始化:


static表示这些变量是类的成员变量,而不是属于某个具体对象;

constexpr类型便于编译器验证变量的值是否是一个常量表达式,声明为constexpr的变量一定是一个常量,而且必须用常量表达式初始化。

这里定义的常量主要是一些EOS系统账户名和用于RAM交易市场和Bancor算法的代币符号,下面回顾一下EOS系统账户名的含义:

eosio(根账户,部署系统合约的账户)eosio.token(管理EOS通证的账户)eosio.ram(RAM交易管理账户)eosio.ramfee(RAM交易手续费管理账户)eosio.stake(抵押的EOS管理账户)eosio.bpay(节点出块奖励的代管账户,EOS每年增发5%的20%的25%会先转到这个账户)eosio.vpay(节点获得投票奖励的代管账户,EOS每年增发5%的20%的75%会先转到这个账户)eosio.names(短账户名竞拍管理账户)eosio.saving(增发EOS临时存放账户,EOS每年增发5%的80%放在此账户)eosio.rex(CPU/NET资源交易所管理账户)eosio.null(不需要权限的账户)eosio.prods(自动管理的代表21个超级节点的账户)eosio.msig(多重签名管理账户)

eosio.system Action

system_contract类中接下来声明了公有和私有的成员函数,这些公有的成员函数就是eosio.system合约的Action:


REX资源交易所相关的Action在之前的几篇文章【EOSREX】源码分析、【EOSREX】REX深入研究、【EOSREX】REX的数据状态、【EOSREX】REX相关的cleos命令中介绍过,点击链接可查看。

这里简要介绍其他Action的主要功能:

init:初始化EOSIO系统相关功能,主要是RAM市场和REX资源交易所,需要_self的操作权限,即只有系统账户才能调用此Action,普通用户无法调用;onblock:更新区块生产信息和短账户名拍卖信息,在producer_pay.cpp中实现,同样需要_self的操作权限;setalimits:设置账户的资源使用上限,包括RAM/CPU/NET,需要_self的操作权限;setacctram:设置账户的RAM使用上限,需要_self的操作权限;setacctnet:设置账户的网络资源使用上限,需要_self的操作权限;setacctcpu:设置账户的计算资源使用上限,需要_self的操作权限;activate:激活新的协议特征,用于EOSIO v1.8.x共识协议升级,需要_self的操作权限;delegatebw:抵押EOS到CPU/NET资源;undelegatebw:解抵押EOS到CPU/NET资源;buyram:购买内存资源,单位是EOS;buyrambytes:购买内存资源,单位是字节;sellram:出售内存资源;refund:解抵押CPU/NET资源的前置条件,即72小时后退还EOS的限制,和undelegatebw一起构成完整的解抵押流程;regproducer:注册成为区块生产者;unregprod:取消区块生产者的注册;setram:设置EOS区块链的内存总量,只能增加,需要_self的操作权限(目前RAM总量133GB左右,合约代码支持扩展到1PB,即1048576GB);setramrate:设置RAM总量线性扩容时每个区块的RAM增长量,需要_self的操作权限(目前每产生一个区块RAM总量增加1KB,通过微调实现每年64GB的扩容速度);voteproducer:为区块生产者投票;regproxy:注册成为投票代理;setparams:设置EOS区块链的全局参数,需要_self的操作权限;claimrewards:区块生产者领取出块奖励;setpriv:设置账户是否为特权账户,需要_self的操作权限;rmvproducer:移除无效的区块生产者,需要_self的操作权限;updtrevision:更新全局参数revision,存于global2表中,需要_self的操作权限;bidname:竞拍短账户名;bidrefund:竞拍短账户名退款。

system_contract类中声明的私有成员函数的主要作用是被以上Action调用,后续介绍一些Action的业务实现细节时,再与其函数定义一起介绍。

更多内容

币圈信息站开发目录

EOS开发系列目录

—-

编译者/作者:松果

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

LOADING...
LOADING...