以太坊推迟 Glamsterdam 在 Hoodi 测试网的激活,警示已部署合约面临风险
要点速览
- •以太坊开发者暂停了 Glamsterdam 于 10 月 26 日在 Hoodi 测试网的激活,同时移除 Amsterdam 执行层和 Gloas 共识层两项分叉,并取消原计划 2 亿 gas 上限的提升。
- •EIP-8037 将新存储槽的状态成本从 20,000 gas 提高到 97,920 gas,新账户从 25,000 提高到 183,600,以减缓状态增长;其作者预计在 2 亿 gas 上限下,状态数据可能在一年内超过 650 GiB。
- •ChainSecurity 在 10 月 13 日的分析中警告,新规则可能引发 gas 不足恶意攻击,因为储备池或补回的 gas 可让失败处理程序永久记录失败调用;且当储备池为空时,一次冷存储写入所需的执行 gas 约为原来的九倍。
- •Hoodi 运营方必须在 10 月 26 日前更新执行层和共识层客户端,且发布说明须明确确认旧激活已被移除;以太坊基金会表示主网用户和 ETH 持有者无需采取行动。
- •新的 Hoodi 日期和主网激活日期均未确定,EIP-8037 的 Last Call 评审——即提案定稿前的最后窗口——将于 11 月 1 日结束。

由于担心已部署智能合约在升级后新 gas 定价规则下的表现,以太坊开发者已暂停 Glamsterdam 升级在 Hoodi 测试网的激活。以太坊基金会表示,该决定是在 All Core Devs Execution 第 248 次电话会议上做出的,并在其 10 月 22 日的公告中正式公布。
该决定的要点如下:
- 新存储槽的状态成本从 20,000 gas 提高到 97,920 gas。
- Hoodi 原计划的 2 亿 gas 上限提升也被取消。
- Glamsterdam 主网激活日期尚未确定。
- EIP-8037 的 Last Call 评审将于 11 月 1 日结束。
距主网之前的最后一个测试网步骤被搁置
Glamsterdam 原定于 10 月 26 日 17:42:48 UTC 在 Hoodi 激活。此次推迟同时移除了 Amsterdam 执行层和 Gloas 共识层两项激活——即升级的两个组成部分——以及原定同期将 Hoodi gas 上限提升至 2 亿的日程。这一变更在不回滚测试网历史的情况下改变了其未来配置,且尚未确定替代日期。
在上一次升级 Fusaka 期间,Hoodi 是主网分叉前第三个也是最后一个测试网,据 The Block 报道,基金会当时表示主网升级将在至少 30 天后进行。在那次推进过程中,最后一次测试网分叉是主网前的最后一个公开检查点。Glamsterdam 此前已通过在 Sepolia 上的 2 亿 gas 演练,当时的修复是将 Prysm 更新为验证者默认设置——属于客户端配置问题。而这一次的问题在于已部署合约的运行表现。基金会尚未确定 Glamsterdam 主网日期,并表示主网用户和 ETH 持有者无需采取行动。
抬高存储价格、削减部分写入执行 gas 的调整
EIP-8037 旨在减缓以太坊状态的增长,状态是每个节点必须存储的数据。其作者估计,截至 2026 年 1 月,该状态数据约为 390 Gi。他们估算,按现行定价,2 亿 gas 上限可能在不到一年内将其推过 650 GiB——即节点开始变慢的临界水平。他们的解决方案是对每字节新状态收取 1,530 gas,将新存储槽的状态成本从 20,000 gas 提高到 97,920,新账户的状态成本从 25,000 提高到 183,600。
为保持大型合约部署的可行性,该提案将 gas 划分为两个池。执行 gas 用于计算,状态 gas 用于新存储。交易提供的超过 16,777,216 的 gas 将进入一个单独的状态 gas 储备池,状态费用将优先从中扣除。该储备池会全额传递给每个子调用,且合约无法通过标准的 gasleft() 读取到它。
根据 ChainSecurity 使用 EIP-8037 和 EIP-8038 数据的测算,向新存储槽进行冷写入所需的执行 gas:
- 目前:22,100
- Glamsterdam,储备池支付 97,920 的状态费用:12,100
- Glamsterdam,储备池为空:110,020
换言之,同一笔冷写入,在储备池为空时所需的执行 gas 大约是储备池覆盖状态费用时的九倍。
gas 也可以在执行过程中回流。清除同一交易中较早创建的存储槽会立即补回最多 97,920 gas,而回滚的子调用可以退回其已支付的状态费用。因此,合约可见的 gas 余额可能在执行中途上升。该 EIP 本身警告称,以两次 gas 读数之差来衡量工作量的合约可能得到负值,而已按此设计部署的合约无法修复。
攻击者如何利用新规则
安全公司 ChainSecurity 在 10 月 13 日的分析中阐明了这一风险。合约通常会捕获失败的调用并记录结果,这让恶意调用者可以故意提供过少的 gas,使有效操作失败,而合约仍有足够 gas 保存该失败记录。这种技术被称为 gas 不足恶意攻击,它可能永久阻止重试或清除用户的索赔。
对于依赖失败处理程序本身耗尽 gas 的合约:
- 第 1 步: 攻击者发送一笔 gas 过少的调用。
- 第 2 步: 目标操作耗尽 gas。
- 目前: 处理程序也随之耗尽 gas,一切回滚,用户可以重试。
- Glamsterdam: 储备池或补回的 gas 使处理程序得以完成并永久保存失败记录。
在调用失败后检查剩余 gas 的合约,可能因补回的 gas 或回滚的中间调用将余额推回阈值之上而被欺骗。固定的 gas 预算也可能不足,因为 EIP-8038 提高了触及现有状态的成本:对现有热槽的首次修改从 2,900 gas 上升到 10,100 gas。
并非所有防御手段都会失效。ChainSecurity 表示,只要预算按新价格覆盖所有执行路径且不依赖储备池,调用前检查仍能保证所请求的 gas足额送达。该公司建议完全不要依赖调用后的 gas 检查。基金会的公告仅提及 EIP-8037,未引用该公司的分析,而后者同样涵盖 EIP-8038。
运营方和开发者需要做什么
Hoodi 运营方必须在 10 月 26 日之前更新执行层和共识层客户端,且所使用的版本发布说明必须明确确认旧激活已被移除。原公告中的版本表不构成确认。截至 10 月 23 日,基金会已列出两个客户端的更新版本,并表示其他客户端一经确认即会添加。
验证者必须同时更新信标节点和验证者客户端,运行外部区块构建基础设施的用户应遵循其提供商的说明。应用团队应停止按原日期安排 Hoodi 测试。
对于合约开发者而言,ChainSecurity 的检查清单从每一个允许执行在失败后继续的调用入手,内容包括:追踪完整调用路径(包括代理合约);查找在同一交易中设置和清除的存储槽以及会回滚的中间调用;重新核对固定预算;以及强制子调用失败并比较两种规则集下的结果。在可能的情况下,调用失败应回滚整个操作。根据该 EIP,钱包和节点软件也必须针对双池模型更新 gas 估算。
接下来的决定权在核心开发者手中。EIP-8037 的 Last Call 评审——即该提案在以太坊流程中定稿前的最后评审窗口——将于 11 月 1 日结束,调查可能导致规范变更,新的 Hoodi 日期将在未来的电话会议上确定。
本文仅供参考,不构成财务或投资建议。以太坊升级时间表和技术规范在测试期间可能发生变化。
来源:Coindoo