eosio.system合约

阅读更多
eosio.system智能合约可以进行很多系统级别的操作,system合约的所有人是eosio帐户.通过eosio.msig多签名,参与者为所有的生产者,执行的操作是setcode将eosio账户的code设置为./fast.refund/eosio.system/eosio.system.wast.生产者参与审批提案,通过后执行提案,执行成功以后,system合约即被处理完毕.
1.用户抵押Token,从而获得投票给区块生产者,通过抵押Token还可以获得社区提案(worker proPoSal)的权利
2.设置代理,把自己掌握的投票权移交给其他用户
3.抵押Token,从而获得相应的网络带宽,存储空间,运算能力

native.cpp:对创建的新账户进行可行性验证.在创建新用户时调用此类,用来约束新账户的命名.
1.在账户创建的时候不可以包含special的字符,同时规定账户的名称在12个字符以内,防止账户重复
2.新账户必须包含最少数量的代币(在系统参数中设置),因此,此方法将从接收器newaccount中执行内联buyram操作,购买ram的费用相当于当前新账户创建费用的金额

delegeate_bandwith.cpp:主要是与资源相关的东西
1.delegatebw(account_name from,account_name receiver,asset stake_net_quantity,asset stake_cpu_quantity,bool transfer):是用来通过抵押Token来获取网络和CPU资源
a.其中account_name from:是Token的抵押者
b.account_name receiver:是Token的接收者(表示抵押获取的资源作用在这个账号上)
c.asset stake_net_quantity:网络资源所应抵押代币的数量
d.asset state_cpu_quantity:CPU资源所应抵押代币的数量
e.transfer:指的是交易进行的状态

2.undelegatebw(account_name from,account_name receiver,asset stake_net_quantity,asset stake_cpu_quantity,bool transfer):是用来取消抵押,释放网络和CPU资源,收回代币,对应的参数与上面的相同,但是一旦account_name from取消抵押后,其会失去投票权,解除抵押之后,资源会马上释放,同时投票权重也相应消失

3.buyram(account_name payer,account_name receiver,asset quant):取消抵押之后,代币需要等待一定时间才能回到账号里,buyram是用来购买指定价值内存时调用的
a.account_name payer:是购买者
b.account_name receiver:是内存接收者
c.quant:是用来购买内存所用的代币

4.buyrambytes(account_name payer,account_name receiver,uint32_t bytes):购买指定大小的内存,支付的EOS会以当前市场价格计算

5.sellram(account_name account,int64_t bytes):出售不需要的存储资源

6.refund:函数在通过undelegatebw函数解除抵押后调用,作用是把抵押的代币(Token)退回账户,退回账户大约有三天的等待期

voting.cpp:主要包含与投票相关的action
1.regproducer(const account_name producer,const eosio::public_key& producer_key,const std::string& url,uint16_t location):用来注册生产者,也就是EOSIO中的超级节点候选人
a.url:候选节点的网站地址
b.location:候选节点的地理位置

2.unregprod(const account_name producer):取消成为候选人账户的注册

3.voteproducer(const account_name voter_name,const account_name proxy,const std::vector& producers):对帐户进行投票
a.代理模式:将投票权重委托给一个代理人,让他帮忙投票
b.直接投票:一个帐户可以投给一个或者多个生产者,最多30个

4.regproxy(const account_name proxy,bool isproxy):注册成为投票代理人,代理人接受其他用户的委托.需要注册的是: 已经使用了代理的投票者,不能注册成为投票代理人

5.update_elected_producers:就是用这个函数来选出EOSIO项目中的21个超级节点,这里是根据投票数由高到低选出21个区块生产者,并在一定的时间间隔内更新这些数据

producer_pay.cpp:用来计算生产者节点收益的相关代码
1.onblock:用来计算一些遗漏的区块,更新指定生产者的区块信息
2.claimrewards:用来计算生产者生产的区块数量,计算每个块的收益,计算根据生产者的生产时间,计算每秒收益,计算生产者从每次投票中获得的收益等, 综合以上的收益来计算出生产者的总收益

测试步骤:
1.首先注册账号,同时启动节点与主网同步区块
2.注册账号成为候选人参加竞选
3.再次抵押自己的代币来获取资源的投票的权重,目的是增加自己的话语权用来投票给自己
4.最后当自己获得足够多的票数时,等待一定的时间之后就可以成为出块人了,也就是EOSIO中的超级节点

你可能感兴趣的:(eosio.system合约)