【导读】团队24小时工作,致力于我们的EOS.IO软件做到最好。在GitHub上应用程序的代码结构上,可以看到有一些重大的改进,因为在上次的更新中我们实现了许多功能。
EOSIO BIOS
计算机的BIOS内置于硬件中,是启动操作系统之前计算机加载的第一个内容。本周,我们继续用操作系统比喻,使处理EOS.IO区块链的启动过程尽可能简单。我们的区块链现在以一个非常简单的初始状态启动:
一个独立帐户(eosio.system)
一个独立的私有密钥
一个独立的块生产者
这个初始帐户就像Linux系统上的root帐户一样,除非将其授权给更高级别的操作系统的智能合约之后,否则它具有无限的权力。在这个初始状态,@ eosio.system帐户将上传操作系统的智能合约,该合约执行以下操作:
1. 投票,网络带宽,CPU带宽,内存和存储的staking。
2. 生产者和代理投票创建。
您可以将此初始状态视为胚胎干细胞,它能将已EOSIO为基础的区块链使用到任意数量的用例以及治理结构中,所有的这些都可以在不需要任何硬分叉的情况下进行更新和调整。
我们从这种方法中获得了许多好处,因为它使得EOSIO核心软件更简单,更容易测试。
动态块生产者数量
EOSIO区块链现在支持动态的区块生产者数量,可以通过对@ eosio.system智能合约简单更新进行更改。默认情况下仍然是21个生产者,但这不再是硬编码的。
采用动态数量的主要原因是对于许多私有区块链来说,21个生产者是小题大做。企业使用私有区块链可能更喜欢只有几个生产者,而测试网络或许只需要一个生产者。
测量
从历史上看,我们已经指出每个交易最多有1ms的运行时间,这由块生产者主观地进行测量。我们意识到一些交易可能需要50ms才能运行,同时也希望通过物质奖励来激励开发者设计运行时间小于50us的交易,以提高效率。在我们的原始模型下,所有交易都使用相同的CPU,无论是50us还是1ms,这意味着没有诱因再优化到1ms以下。
因为运行时间是主观的,并且可以根据在同一台计算机上运行的其他活动而变化,所以不可能产生客观和可重复的运行时间计量。
我们意识到,在不增加成本的情况下,可以将现有基于时间的费率限制器进行修改,以对所执行的WASM指令数目进行客观估计。这与以太坊如何测量gas消耗量相似。通过这个新的客观测量,我们可以评估限制(rate limit)CPU,就像我们评估限制带宽一样。
块生产者对cpu使用率使用”动态超额认购(dynamic oversubscription)”算法,与他们对网络带宽使用的算法相同。这意味着,当网络具有空闲的CPU容量时,用户可以获得更多的每staked CPU(cpu-per-staked)代币,这比他们在完全使用的情况下得到的要多。
除了CPU指令计数之外,块生产者仍将实现主观运行时间限制。这种主观限制可以保护网络免受那些滥用计量算法人员的影响,这些人使用最耗时的操作而不是较省时的操作。
分离CPU和网络带宽
在之前的更新中,我们表示将会分离出的RAM,存储和带宽(可以认为CPU /网络都是带宽的一部分)。我们意识到,像Steem这样的一些应用程序可能具有较高的网络带宽(用于发布文章)和较低的CPU带宽,而其他应用程序可能具有较低的网络带宽(交换订单),但较高的CPU带宽(订单撮合)。这意味着不存在一种适合所有情况的方法。
为了简单起见,用户界面仍然可以将这些东西捆绑在一起,供普通用户使用; 然而,权限用户现在有更多的价格灵活性。
交易压缩
在为c ++ STL库添加支持的过程中,我们注意到智能合约可能会变得相当大(50kb),因此会消耗大量的网络带宽。可以想象,更复杂的合约可能会超过200kb。我们也意识到许多应用程序(如Steem)将非常多可压缩的内容捆绑在交易中。
我们增加了对zlib压缩交易的支持,这些交易可以为智能合约上传减少60%或更多的带宽使用,而对于类似Steem的内容则可能更高。
网络更新
P2P网络团队一直在忙着更新代码,以提高性能和稳定性。本周他们在以下方面取得了重大进展:
1. 块—块广播只包含交易ID而不是重新传输块中的所有交易。这将使带宽使用减少近50%。
2. 大信息支持—广播巨大信息(如50kb智能合约)的网络协议与小信息(如200字节传输)的不同。
结论
我们的开发团队正在努力使EOSIO成为迄今为止最高效、最通用、最灵活的平台。