而我们也并不期望预编译合约 原因在于, 此外,我们还需要一个事实来解释这次分裂,你可能也猜到了,就是 「柏林」 硬分叉(也正是这次硬分叉使这个问题浮出水面):它改变了 EVM 中 Gas 消耗量的计量方法。 在 EIP-2929 实施后,如果你在一笔交易中对同一个存储槽多次执行状态存储操作,第一次执行会消耗更多 Gas,后续执行的消耗会更少。这种重定价理论上能更准确地反映当前的客户端访问存储项的成本 …… 而且,要知道,在所有客户端的执行中,这些数据通常都换存在更便宜的硬件层中。 现在我们终于找到了 OpenEthereum 在区块 #12244294 处发生的 Bug:该客户端包含了所有已实现的预编译,作为 EIP-2929 访问清单的一部分。(译者注:此处应为 「EIP-2930」) 因为 EIP-2537 在大部分客户端中都已经实现就绪了(而且一度有人提议要把它包含在 「柏林」 升级里面!),OpenEthereum 对所有访问了 但网络的绝大部分活跃客户端都不是这样实现 EIP-2929 的,它们只会给访问了已激活预编译合约的交易提供 gas 折扣 —— 而 EIP-2537 属于还未激活的预编译合约!所以,OpenEthereum 客户端对该交易消耗了多少 Gas 的计算与网络中其他客户端发生了分歧。 所幸,@mhswende 很快找出了该 bug,而 @sorpaas 出力修复了该 bug。 还有很多东西可说,我也预期会有比我更能观察到全貌人来撰写更好的时候报告。 我能说的只是,这个 bug 彰显了硬分叉的内在风险,以及持续致力于建设更有弹性的基础设施的重要性。 依赖于 OpenEthereum 客户端的单客户端系统在今天停机了一段时间,因为客户端无法在问题区块出现后与网络保持同步。Etherscan 自身也因此停机。 庆幸的是,这个 bug 没有严重到导致重大的链分叉,但这样的可能性并不是不存在。我们可以利用多客户端实现来提升抗性 —— 多客户端本身就是我们以太坊生态的一大长处 —— 并推动您的基础设施提供商也这样做。 我们已经看到,2021 年的普及速度已经前所未有地快,而且前景非常光明。我们要从这个事故中吸取教训,一起打造更好的以太坊。 来源链接:twitter.com (责任编辑:admin) |