【eos不定期更新的日常】系统合约最近升级了什么?
简介
最近实在太懒惰了,再勤快点写篇eos最近的动向为大家充充电。所谓币圈一日,人间一年,eos主网上线不知不觉已经三个月了,其中有很多bug亟待block.one解决。最近一次的系统合约升级,就有效的解决了好几个系统问题。
升级流程
之前,我在写eosio.msig提案合约的时候,顺嘴提了一句eosio账户的权限,已经被21个超级节点所控制了。再跟大家复习下,目前,eosio账户被eosio.prods账户控制,而eosio.prods账户被21个超级节点的出块账户控制,由于eos的超级节点是实时选举的,这个控制权也是实时变动的。
eosio账户权限 eosio.prods账户权限那么,如果系统合约需要升级,也需要走eosio.multisig提案合约,取得21个节点中的15个节点的批准,才能升级系统合约。但是,官方文档给出了更加简单的合约升级方法:构造交易、离线签名、最后集齐15个超级节点的签名,再一次性广播重新部署系统合约,详见文档。这种方式多用于交易所冷钱包,之后,也会为大家介绍交易所冷钱包一般怎么发交易的。
一般,主网上如果有重大更新需要21个超级节点授权,都会以提案的方式发布在主网上,大家可以去eos authority上查看block.one对主网的最新提案。
升级内容
升级内容原文详见release note v1.3.0。下面,我将为大家简单说一下升级内容。
eosio.token合约更新
eosio.token合约新增了open方法。作用是:可以允许用户自己花费ram为自己或者其他账户建表。这个表用于储存特定token的信息。传参如下:
open方法实现细节- owner:为哪个账户建表
- symbol:token的符号
- ram_payer:支付ram的账户
如果发现owner账户下,没有符号为symbol的token,则会为它创建一个余额为0的新表。
大家肯定会问,这个功能有什么用?在eosio.token合约升级之前,建表的规则是:账户A转账一定数量的token给账户B,如果账户B中没有该token的表,自动消耗账户A的ram为账户B建表,每次建表ram的消耗大约在0.22KB左右。
大家应该看出问题了吧,ram资源在eos中是一次性的资源,消耗完了得买,之前ram价格还炒成了天价。这样的特性,对于交易所提币,以及基于eos空投的项目方而言,是非常不友好的,增加了非常大的成本。
当新的eosio.token合约生效后,新用户如果希望获得糖果或者仅使用eos转账功能,都需要其他账户帮忙购买ram并建表。对于空投的项目方来说,成本大大降低,大家也更有意愿在eos上发币和构建项目。
eosio.msig合约更新
eosio.msig合约新增了invalidate方法。这个方法的详细实现,我在上一篇【eos全家桶系列】eos系统合约介绍 — 提案合约eosio.msig (下)已经有了详细的介绍,大家可以看看。这个方法简单来说作用是:如果账户A发生了权限移交,则新权限的获取者可以执行invalidate方法,让旧权限通过但尚未执行的提案失效,防止权限被改回去。详细的使用场景见issue和博文。
eosio.system合约更新
1. 新增表结构 abihash,用于展示,当调用eosio.system合约的setabi方法后,最近变更的合约的hash。
2. 修改了投票收益的算法,让节点收益更加合理。这部分的更新详见EOS Spark的文章,这里就不再赘述。
后记
今天,为大家简要介绍了eos的系统合约的升级内容。之后,我也会在介绍eos大框架的同时,时不时插入一点最近的热点和新闻,希望能为大家充值点信仰。