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

我的网站

当前位置: 主页 > 竞争币 > 以太坊

复盘柏林升级前以太坊一个显而易见的状态问题(2)

时间:2021-05-21 11:53来源:未知 作者:admin 点击:
消耗一千万 gas 的 EXTCODEHASH (400 gas) Parity: ~90s Geth: ~70s 消耗一千万 gas 的 EXTCODEHASH (700 gas) Parity : ~50s Geth : ~38s 显而易见,EIP-1884 的更改确实在降低该攻击的

消耗一千万 gas 的 EXTCODEHASH (400 gas)

  • Parity: ~90s

  • Geth: ~70s

消耗一千万 gas 的 EXTCODEHASH (700 gas)

  • Parity : ~50s

  • Geth : ~38s

显而易见,EIP-1884 的更改确实在降低该攻击的影响上起到了帮助,但还远远不够。

当时已经临近在大阪的开发者大会。在开发者大会上,这个问题的信息分享给了主网的客户端开发者。我们也和 Hubert、Mathias 以及 Greg Markou (来自 Chainsafe,当时也在进行一些 ETC 的工作) 见面了。ETC 的开发者也收到了这份报告。

随着 2019 年临近尾声,我们知道这个问题比之前预期的要严重,恶意交易可能将区块时间提升到分钟范围。更糟的是,开发者社区对 EIP-1884 感到不满,因为 EIP-1884 破坏了一些合约流程,而且用户和矿工都非常希望提高区块的 gas limit。

此外,仅两个月后的 2019 年 12 月,Parity Ethereum 宣布停止运维,而 OpenEthereum 接管了代码库的维护工作。

随后搭建了一个新的客户端协调频道,Geth、Nethermind、OpenEthereum 和 Besu 的开发者在此继续进行协作。

解决方案

我们意识到要解决这个问题,必须要双管齐下。一种方法是通过以太坊协议以某种方式在协议层解决该问题。最好不要破坏合约,并且避免波及「良好」行为,但仍要设法防止攻击。

第二种方式是通过软件工程来解决,修改客户端中的数据模型和结构。

协议层的工作

关于如何处理这些类型的攻击的第一个版本在这里。2020 年 2 月,正式发布为 EIP 2583。其理念是,每当一次 Trie 查找导致未命中时,施加一次罚款。

但是,Peter 找到了应对方法,即「shielded relay」攻击,可以有效地限制这种惩罚的上限 (约为 800)。

对未命中查询进行惩罚的问题在于,首先需要进行查找,以确定是否施加惩罚。但是如果剩余的 gas 不足以支付罚款,已执行了未付费的消耗。即使确实会导致抛出异常,也可以将这些状态读取包装到嵌套调用中,允许外部呼叫者继续重复攻击而无需支付 (全部) 罚款。

因为这个原因,这个 EIP 被放弃了,我们也在寻找更好的替代方案。

  • Alexey Akhunov 提出了 Oil 的概念,gas 的第二来源,但和 gas 在本质上不一样,因为它对执行层不可见,并可能导致事务全局回滚。
  • Martin 在 2020 年 5 月也撰写了一个类似的提案 (Gas And Karma)

在对这些不同机制进行迭代的同时,Vitalik Buterin 提议直接提高 gas 成本,并且保留访问列表。2020 年 8 月,Martin 和 Vitalik 开始完善 EIP-2929 及配套的 EIP-2930。

EIP-2929 有效地解决了许多之前的问题。

  • 与无条件提升 gas 成本的 EIP-1884 相比,EIP-2929 只提升了未访问部分的 gas 成本。这导致净成本提升了不足一个百分点。 (责任编辑:admin)
织梦二维码生成器
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
推荐内容