事故事后分析:op-geth<>op-reth Gas 退款不匹配

  • oplabs
  • 发布于 2025-04-21 14:51
  • 阅读 17

OP Mainnet 上由于 Geth 和 Reth 客户端在 EIP-7702 gas 退款逻辑实现上存在差异,导致 gas 计算不一致,造成链分裂。具体原因是 Reth 正确实现了 EIP-7702 规范,而 Geth 的实现方式存在问题。通过更新 op-reth 版本和对遗留空账户进行处理,问题已得到解决。

事件概要

geth 和 reth 以太坊客户端实现在 EIP-7702 的 gas 退款逻辑上的不匹配,导致 OP Mainnet 上的 gas 核算不一致,从而导致 op-geth 和 op-reth 之间的链分裂。

用户资产是安全的,这个问题只影响运行 op-reth 的 OP Main网节点运营商。

事件详情

区块哈希:0xf45b336f9025585fbb560553dd4d0c5b80e8d2af535d4866a676eef9602d2020

区块高度:136526192

交易: 0x069b50862f84162d865886ded03e0d631b5e8f5b0d5d6716fd21036ef7bd5217

差异源于每个客户端在交易处理过程中处理退款的方式。具体来说:

op-geth 处理了 23 个账户的 EIP-7702 非空账户退款。

op-reth 处理了 22 个账户的 EIP-7702 非空账户退款。

这导致 gasUsed 相差 12,500,导致客户端对链的看法不一致。

Reth 正确地实现了 EIP-7702 规范,检查账户是否“空”(根据 EIP-161 的定义),而 geth 的 EIP-7702 预执行检查的实现检查了账户是否存在于状态中。这种差异不会影响以太坊主网,因为根据 EIP-161(包含在 Spurious Dragon 硬分叉中),空账户无法持久保存在状态中,并且所有已知的空账户已通过 https://etherscan.io/tx/0xf955834bfa097458a9cf6b719705a443d32e7f43f20b9b0294098c205b4bcc3d 从状态中清除。

根本原因分析

该问题追溯到 2021 年 11 月 regenesis 之前来自 Optimistic Virtual Machine (OVM) 的遗留空帐户,并通过 Bedrock 迁移保留下来。确定了四个已知的空帐户:

0x44D61821a42C175894707bEbB46B81535eB68Dd0

0x640e7cc27b750144ED08bA09515F3416A988B6a3

0xB34F9785E71B3903389A880C175E9c912520c1c6

0xbe5A1359666a15144e10A3A6081653339ba2BD9D

这些帐户是先前部署的 OVM_ProxyEOA 合约,nonce 为零,在迁移后仍然为空。

采取的立即行动

团队验证了在 Superchain Registry 的 genesis 文件中没有分配额外的空帐户。

与 L1 核心开发人员沟通,并就 L1 客户端更新其逻辑以匹配 geth 中的逻辑达成一致。

为了 OP Mainnet 的缘故,op-geth 逻辑已被接受为规范,并且 op-reth 逻辑已在 v1.4.7 版本中进行了相应更新。

执行了专门的 node-iterator script 以执行彻底检查,以查找任何其他空帐户。

向 OP Mainnet 上剩余的“空但存在”的帐户发送了 1 wei,地址为 https://optimistic.etherscan.io/tx/0xc62d459b6d3aaa771d835ef677937961874ccae3ef94d5fbf6954ff07f27a48d,将它们移动到非“空”状态。

OP Mainnet 节点运营商后续步骤

更新 op-reth:运行 OP Mainnet 的 op-reth 节点运营商应至少更新到 op-reth 版本 v1.4.7

节点运营商应首先尝试使用 op-reth stage unwind --datadir <path_to_datadir> --chain optimism to-block 136526191 将其链回退到链分裂之前的区块。如果这不起作用,则需要完全重新同步。

致谢

我们感谢随叫随到的团队对该问题的快速调查和解决。

以下团队成员提供了宝贵的支持:Adrian Sutton、Ben Clabby、Zach Howard 和 Protolambda。

特别感谢 Ithaca 的 Dan Cline (rjected),他与我们一起熬夜诊断问题,以及 Ithaca 和 Geth 团队在第二天早上做出的快速响应。

iframe

  • 原文链接: oplabs.notion.site/Incid...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
oplabs
oplabs
江湖只有他的大名,没有他的介绍。