上线前四天急刹车:以太坊因 gas 机制风险推迟 Glamsterdam 测试
摘要: 以太坊基金会 10 月 22 日确认,原定于 10 月 26 日在 Hoodi 测试网激活的 Glamsterdam 升级被推迟,新时间未定。安全公司 ChainSecurity 预警,EIP-8037 与 EIP-8038 的 gas 计费改动可能改变既有合约失败路径的行为,核心开发者决定投入更多时间调查。此次推迟未设定主网激活日期,12 月主网上线窗口随之失去前置触发点。
以太坊主网下一次硬分叉的关键一次公共测试被按下了暂停键。以太坊基金会在 10 月 22 日发布的公告中确认,原定于 10 月 26 日 17:42:48 UTC 在 Hoodi 测试网激活的 Glamsterdam 升级已被推迟,新的激活时间尚未确定。这意味着开发者失去了一次在接近主网环境中验证升级的关键机会,原本被市场视为 12 月主网上线候选窗口的时间表也随之失去触发点。
这次推迟并非技术故障或客户端漏洞,而是安全审计方对升级中两项 gas 计费机制改动发出的预警。瑞士区块链安全公司 ChainSecurity 在 10 月 13 日的分析中指出,EIP-8037 与 EIP-8038 会改变以太坊对状态创建和状态访问的 gas 收取方式,导致“即使合约代码不做任何修改,曾经会回滚(revert)的失败路径现在可能执行完成”。在核心开发者看来,这种对既有智能合约行为假设的改写,值得在测试网上投入更多时间验证,而不是冒险推进。
一次被取消的测试,打乱的是主网节奏
以太坊基金会在公告中明确,核心开发者在 10 月 22 日举行的 All Core Developers Execution 第 248 次会议(ACDE #248)上决定推迟 Hoodi 上的 Glamsterdam 激活,以便进一步调查 EIP-8037 与主网既有智能合约的交互。公告强调,此次更新仅撤销原定的 Amsterdam 执行层激活、Gloas 共识层激活,以及原本会同步将 Hoodi gas 上限提升至 2 亿的调度;Hoodi 的链历史不会被回滚,但 10 月 26 日的激活时点已从配置中移除,且没有替代的激活 epoch 或时间戳。
对测试网运营者而言,这是一次需要立即响应的配置变更。基金会要求运行 Hoodi 节点或验证者的团队检查执行层与共识层客户端,确保配置已反映推迟决定;任何仍按旧时间调度 Glamsterdam 的软件或自定义网络配置都需要更新。在执行层客户端中,Besu 26.10.1 已发布并移除了该激活;共识层方面,Lodestar v1.50.1 也已跟进。基金会同时提醒,不能把此前公告中的客户端版本表当作“已包含推迟”的确认,必须以各客户端团队的发布说明为准。
对主网用户和 ETH 持有者来说,这次公告不产生任何操作要求。基金会明确表示,这则公告只涉及 Hoodi 测试网,并未设定 Glamsterdam 的主网激活日期。但节奏上的影响是真实的:在 10 月 6 日 Sepolia 测试网已完成激活后,Hoodi 本是最后一次面向公众的大规模测试,开发者曾将 12 月初作为主网上线的候选窗口进行讨论,而这次测试的取消使主网时间表的确定失去了前置触发条件。
问题出在 gas 机制,而不是某一行代码
ChainSecurity 在 10 月 13 日的分析文章《Glamsterdam Hard Fork: When Spent Gas Comes Back》中把问题讲得很清楚:Glamsterdam 改变的是一次失败调用之后会发生什么。EIP-8037 将状态创建的 gas 收费从执行 gas 中剥离,引入独立的“状态 gas 储备池”(state-gas reservoir);EIP-8038 则重新定价状态访问。两项改动叠加后,失败处理程序可用的 gas 余额会发生变化,原本因为 gas 不足而回滚的路径可能获得足够的 gas 执行完成。
这听起来抽象,却触及大量现有合约的核心安全假设。许多合约会捕获外部调用失败,以便记录失败、继续批量操作或选择备选方案。但合约必须区分“逻辑错误导致的失败”和“单纯 gas 不足(OOG)导致的失败”——后者可能是恶意调用者故意只提供过少 gas 的“gas 不足攻击”(insufficient gas griefing)。为识别这种情况,开发者常用三类方法:调用前检查 gas 预算是否可转发;调用后用剩余 gas 判断是否被克扣;或者依赖“失败处理本身也会因 gas 不足而回滚”这一隐含假设。
ChainSecurity 指出,后两类方法恰恰建立在 Glamsterdam 正在改写的假设之上。由于状态储备池会随调用完整传递,而 GAS 操作码只报告执行 gas 余额,一个很小的 gasleft() 数值不再意味着没有足够 gas 完成状态创建。更关键的是,当被调用方回滚或 OOG 时,其使用的储备池 gas 会恢复到调用入口时的值并返还给调用方的失败处理程序。结果是:原本会被回滚的失败处理,现在可能顺利完成,进而把一次可以重试的操作变成永久性失败,或记录下错误的结果。
ChainSecurity 在分析中给出了具体数字:对一个初始值和当前值都为零的存储槽执行写入,Osaka 规则下收费 20,000(热槽)或 22,100(冷槽)gas;Glamsterdam 下执行收费降至 10,100 或 12,100,但状态创建收费为 97,920 gas(64 字节 × 1,530 gas/字节)。总价格上升,可从执行 gas 支付的金额却因储备池兜底而下降——这正是失败处理行为可能改变的根源。安全公司据此建议开发者重新审视失败路径,优先让调用失败向上传播使整笔操作回滚,而不是仅凭剩余 gas 做出不可逆决定。
以太坊升级机制的保守一面
这次推迟反映的是以太坊升级流程中保守的一面。Glamsterdam 由执行层的 Amsterdam 与共识层的 Gloas 组成,其总体规范为 EIP-7773,内容包括将提议者-构建者分离(proposer-builder separation)写入协议、引入区块级访问列表以提升并行执行能力,以及把测试网 gas 上限推向 2 亿。这些改动越接近协议底层,对既有合约行为假设的扰动就越难在测试阶段被完全覆盖。
从时间线看,Glamsterdam 原定的上半年主网目标已被推迟,10 月 6 日先在 Sepolia 激活,Hoodi 激活时间由基金会在 10 月 16 日公布,却在 10 月 22 日——距离计划激活仅剩四天——被撤销。研究公司 Protocol Watch 创始人 Christine D. Kim 率先在社交平台 X 上披露了取消消息,并提醒受影响的 Hoodi 节点运营者回退到旧版本软件或安装移除了该激活的执行客户端。随后基金会在官方博客中确认,该决定源于 ACDE #248 会议上的讨论。
对生态而言,这次推迟的直接影响是测试窗口后移:应用开发者不应再围绕 10 月 26 日的激活安排 Hoodi 测试,节点运营者必须更新配置,而主网上线时间要等到新的测试顺利完成并重新公告。对安全团队来说,ChainSecurity 的预警提供了一个清晰的审计清单:重点检查那些在调用失败后继续执行、依赖 gasleft() 做判断、或在失败处理中写入新存储槽的合约。对普通用户而言,这次事件更像一次机制层面的提醒——以太坊的升级节奏并不由市场期待驱动,当安全审计方对既有合约的兼容性提出质疑时,开发者宁愿推迟测试,也不会让主网承担不可逆的风险。

English
评论(0)
Oh! no
您是否确认要删除该条评论吗?