大家好,我是DEXEOS公司的首席技术官Lecko。
最近,“blocktwitter”账号在EOS网络上连续进行交易,导致EOS上的去中心化应用不能正常运行。由于Blocktwitter,EOS网络的CPU限制迅速下降。此外,EOS Knights和EOS dice用户使用它们都有困难。
因此,我们想找出发生这种情况的原因,以及解决“CPU限制”问题的方案。
首先,让我们看看EOSIO软件如何计算特定帐户的CPU最大限制。之后,我们将解释blocktwitter案例的解决方案。
你可能已经尝试过使用区块链浏览器查看你有多少CPU/网络资源。但是,正如你所看到的,每当你刷新浏览器时,即使你没有更改抵押额,最大CPU容量也会一直变化。.......2.....
为什么会这样呢?!
我们找不到合适的解释,所以我们决定自己查看代码,看看到底发生了什么。
下面是用于估计CPU最大限制的EOSIO算法。
变量。
- window_size(窗口大小) = 24x60x60x1000/500(固定值)
- that is 2x24x60x60
-即2x24x60x60
- virtual_capacity _in_window(窗口中的虚拟容量)
= virtual_cpu_limit(虚拟CPU限制) x window_size(窗口大小)
= virtual_cpu_limit(虚拟CPU限制) x 2x24x60x60
3. user_weight(用户权重) = 用户抵押用于CPU的EOS数量
- all_user_weight(所有用户权重) = 每位用户抵押用于CPU的EOS数量
Equation.
等式
CPU의 Max Limit (CPU的最大限制) = (virtual_cpu_capacity_in_window (窗口中的虚拟CPU容量) x user_weight (用户权重))/ all_user_weight (所有用户权重)
= virtual_cpu_limit(虚拟CPU限制) x 2x24x60x60 x user_weight(用户权重) / all_user_weight(所有用户权重)
= virtual_cpu_limit(虚拟CPU限制) x 172800 x
(“我为CPU抵押的钱数”/“每位用户为CPU抵押的钱数”的比值)
因此,如果总抵押额和你的抵押额都不变,那么“virtual_cpu_limit(虚拟CPU限制)”就是CPU最大限制变化的原因。
计算virtual_cpu_limit(虚拟CPU限制)
你可以在这里检查当前的virtual_block_cpu_limit(虚拟区块CPU限制):
https://api.eosnewyork.io/v1/chain/get_info
如果进行刷新,你可以看到值的变化.........
现在我们知道了为什么最大CPU限制不断变化的原因。那是因为"virtual_cpu_limit(虚拟CPU限制)"不断变化
在生成每个块时计算“virtual_cpu_limit(虚拟CPU限制)”。下面是对算法的解释:
查找每个区块中应该包含的所有交易资源的总和。
计算平均资源使用量。
- 如果平均值大于20,000微秒(0.02秒)= >
- 平均值=平均值x 99/100(平均值减少)
- 如果平均值小于20,000微秒(0.02秒)= >
- 平均值=平均值x 1000/999(平均值增加)
-
选择平均值或200K之间较大的一个
- 从步骤3中选择的一个数字或200M 之间选择一个较小的数字 => 变成新的“virtual_cpu_limit(虚拟CPU限制)”
- (换句话说,virtual_cpu_limit的范围是最小20K到最大20 M)
-
现在我们知道为什么blocktwitter的交易使我们的CPU上限下降了。
- 如果平均值大于20,000微秒(0.02秒)
- =>平均值=平均值x 99/100(平均值减少)
换句话说,如果一个区块中包含的所有交易的总和超过0.02秒,那么下一个区块的CPU最大限制将继续减少。
(相反,如果所有交易的总和低于0.02秒,下一个块的CPU最大限制就会增加。)
顺便说一下,0.02秒的准确时间源自哪里呢?
0.02秒的标准时间是通过使用max_block_cpu_usage和target_block_cpu_usage_pct的全局配置值计算而来。
标准时间= 最大区块CPU使用 x 目标区块CPU使用百分比/10,000
目前,max_block_cpu_usage(最大区块CPU使用)设置为200,000,target_block_cpu_usage_pct(目标区块CPU使用百分比)设置为1,000。因此,
200,000 x 1,000 / 10,000 = 20,000微秒;也就是0.02秒。
这个全局配置数量可以增加或减少。
因此,对于blocktwitter案例,实际上有一个简单的解决方案。然而,缺乏对EOSIO软件的理解导致了一个问题。
对于这种问题,仍然有很多文档需要创建。
此外,不仅区块生产商需要获得有关EOSIO软件的更多专业知识,而且每个人都需要分享并并从“blocktwitter”这样的案例中学习。
很明显,随着时间的推移,问题将继续出现,但EOS将基于社区力量找到解决方案。
(作者:Lecko - DEXEOS,部分纠错源自Aeriel - EOSEOUL)
评论
0 条评论
请登录写评论。