织梦CMS - 轻松建站从此开始!

我的网站

当前位置: 主页 > 竞争币

躲避子弹:以太坊状态问题(2)

时间:2021-05-21 16:48来源:未知 作者:admin 点击:
使用EXTCOEHASH(名义Gas消耗量是400)耗尽1000万gas Parity:约90秒 Geth:约70秒 使用EXTCODESIZE(名义Gas消耗量是700)消耗1000万gas Parity:约50秒 Geth:约38秒 (译者

使用EXTCOEHASH(名义Gas消耗量是400)耗尽1000万gas

Parity:约90秒

Geth:约70秒

使用EXTCODESIZE(名义Gas消耗量是700)消耗1000万gas

Parity:约50秒

Geth:约38秒

(译者注:此处的意思是,如果一个1000万gas的区块全用这两个操作码填满,则节点需要这么长时间才能处理完这个区块)

显而易见的是,EIP-1884确实减少了攻击的效果,但还是远远不够的。那时候离大阪Devcon已经很近了。在Devcon期间,关于这一问题的知识在主网的客户端开发者之间传开来。我们也会晤了Hubert和Mathias,还有Greg Markou(他来自Chainsafe团队,一直在做ETC的工作)。ETC区块链的开发者们也收到了这份报告。随着2019年接近尾声,我们发现,这问题比我们之前以为的还要棘手,恶意的事务可能导致出块时间延长到以分钟计。更难办的是,开发者社区已经对EIP-1884感到不满,它打破了一些合约,而且用户和矿工都希望提高区块的Gas Limit。此外,仅仅两个月之后,到了2019年12月,Partiy Ethereum就宣布要退出了,OpenEthereum项目接管了Parity客户端的代码维护工作。于是大家创建了一个新的客户端协作频道,Geth、Netheremind、OpenEthereum和Besu的开发者继续合作。

解决方案

我们意识到,只有双管齐下才能解决这个问题。一方面,我们要改进以太坊协议,也就是在协议层解决这个问题;最好是不要打破合约,也不要惩罚“善意”的行为,但又能防止攻击。另一方面,我们可以依靠软件工程,改变客户端内的数据模式和结构。

协议层工作

处理此类攻击的第一个思路是这个。在2020年2月,其正式版本作为EIP 2583发布。该提案背后的观念是增加一个惩罚措施,每次树查找导致miss(“未找到”)时就触发。不过,Peter找出了一个绕过它的办法——“shielded relay”攻击——使得本质上惩罚有了一个上限(约为800)(译者注:此处没有单位,疑为gas)。惩罚miss方法的问题在于,必须先有查找的过程,然后才能确定要不要实施惩罚。但如果剩余的gas已不足于实施惩罚,则(从协议的角度看)一个没有得到充分支付的消耗流程又已经执行了。即使这会导致抛出错误,这些状态读取也可以封装到嵌套调用中,使得外部调用者可以重复执行攻击而不必支付(完整的)惩罚。因此,这个EIP也被抛弃了,我们要寻找更好的替代方案。

Alexey Akhunov研究了Oil的概念——一种次级的“Gas”,但与Gas完全不同的是,它对执行层是不可见的,而且可能导致事务全局回滚(transaction-global revert)。

Martin提了一个类似的提案,称为“Karma”,在2020年5月。

虽然这许多方案都有进展,Vitalik Buterin提议仅仅提高Gas消耗量,并维护一个“访问清单”。在2020年8月,Martin和Vitalik开始迭代后来成为EIP-2929及其同伴EIP-2930的想法。EIP-2929在根本上解决了许多上面提到的问题。 (责任编辑:admin)

织梦二维码生成器
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
推荐内容