• 全部
  • 产业
  • Web 3.0
  • DAO
  • DeFi
  • 符文
  • 空投再质押
  • 以太坊
  • Meme
  • 比特币L2
  • 以太坊L2
  • 研报
  • 头条
  • 投资

免责声明:内容不构成买卖依据,投资有风险,入市需谨慎!

以太坊的Glamsterdam延迟揭示了智能合约Gas风险

2026-10-23 18:00:51
收藏

以太坊推迟Glamsterdam升级,暴露智能合约Gas风险

以太坊推迟了原定于10月26日在Hoodi测试网上激活的Glamsterdam升级,并取消了该测试网计划中的2亿Gas上限提升。EIP-8037将执行Gas与状态创建Gas分离,这可能会改变已部署合约处理失败调用的方式。ChainSecurity发现了13个需要调查的真实案例,目前正进行负责任的信息披露。开发者应审查依赖Gas的检查机制、固定Gas配额以及永久更新合约记录的外部调用。

Glamsterdam延期引发的EVM兼容性问题

以太坊推迟Glamsterdam升级的行为暴露出以太坊虚拟机(EVM)中的一个兼容性问题:那些依赖Gas耗尽来拒绝不安全交易的智能合约,在拟议的状态创建成本变更下,其行为可能会发生变化。

以太坊基金会于10月22日宣布,Glamsterdam将不再于10月26日在Hoodi测试网上激活。开发人员也撤回了将Hoodi Gas上限提升至2亿的計劃。这一决定是在第248届所有核心开发者执行会议(All Core Developers Execution meeting #248)上,针对EIP-8037与现有主网合约之间的相互作用提出担忧后做出的。

ChainSecurity确定了13个可能受影响的真实合约示例。为了协调负责任的信息披露,这些项目尚未公开命名。该兼容性问题涉及那些将Gas可用性解释为外部操作成功、安全失败或耗尽分配资源的证据的合约。

EIP-8037引入两种独立的Gas记账池

EIP-8037改变了以太坊对创建持久化区块链状态成本的记账方式。根据该提案,交易包含两个记账组成部分:执行Gas和状态Gas储备金。

  • 执行Gas:支付EVM计算和其他与执行相关的操作费用。
  • 状态Gas:涵盖与创建持久化区块链数据相关的额外费用,包括新的存储分配。

状态Gas储备金最初持有超过执行Gas上限的交易Gas预算部分。状态创建费用首先从该储备金中扣除,当储备金无法覆盖所需金额时,才使用执行Gas。

这种区分影响了Solidity中的gasleft()函数。底层的GAS Opcode报告的是剩余的执行Gas,而不是独立的状态Gas储备金。在EIP-150下,外部调用通常不能转发超过可用执行Gas约63/64的部分。EIP-8037将此限制应用于执行Gas,而状态Gas储备金则单独传递给子调用。

因此,一个合约可能在剩余执行Gas有限的情况下,仍保留大量的状态创建能力。

特性 Pool 01: 执行Gas Pool 02: 状态Gas储备金
用途 支付EVM计算、指令和执行相关操作。 涵盖创建持久化区块链状态的额外费用。
GAS Opcode 报告 gas_left 不包含
调用转发限制 适用于可用的执行Gas 储备金Gas与执行Gas分开传递给子调用

重要性:合约可能在剩余执行Gas有限的同时,仍拥有状态Gas容量。这两种余额在外部调用和回滚(Revert)期间表现不同。

为何失败的调用可能导致不同的合约记录

尝试外部操作的合约在该操作失败时可能会继续执行。考虑一个批处理应用程序,它记录尝试付款或其他操作是否不成功。以下简化的Solidity风格示例说明了相关模式:

// 故障记录模式
mapping(uint256 => bool) public failed;

function process(...) external {
    (bool ok, ) = target.call(data);
    if (!ok) failed[id] = true;
}

风险:不成功的后续外部调用可能会导致永久性的失败记录。如果重试逻辑依赖于该记录,资金不足的操作可能变得无法重试。

注意:这是说明性伪代码,并非经过验证的攻击向量或生产就绪合约。外部调用可能失败,但周围的事务仍在继续。如果合约永久标记该操作为失败,单独的重试机制随后可能会拒绝合法尝试。

一些实现历史上曾依赖不足的剩余Gas来防止故障处理器完成昂贵的存储操作。在这些情况下,整个事务将会回滚。然而,EIP-8037连同EIP-8038改变了这些存储操作的成本分布。根据ChainSecurity的技术分析,当状态Gas储备金覆盖单独的状态创建费用时,创建新的存储槽在执行Gas方面变得显著便宜。结果可能导致不同的事务结果:外部操作失败,但调用者保留足够的执行Gas以永久记录该失败。

这是否可利用取决于周围的合约逻辑,包括重试规则、会计检查以及谁可以影响外部调用的Gas可用性。

兼容性问题背后的存储成本变化

在现有的Osaka Gas调度方案下,写入一个新的“暖”存储槽(warm storage slot)大约消耗20,000 Gas。拟议的Glamsterdam规则将成本拆分为执行部分和单独的状态创建费用。执行部分降至10,100 Gas,而状态创建产生额外的97,920状态Gas。

这些金额不能简单地相加并与之前的执行Gas成本进行比较,因为这两个池具有不同的记账规则。

存储槽创建成本比较 现有规则 (Osaka) 拟议规则 (Glamsterdam)
暖存储槽写入 20,000 Gas -
执行部分 N/A 10,100 Gas
单独状态费用 无 97,920 State Gas

安全含义:如果状态Gas储备金覆盖了状态创建费用,故障处理器可能需要比之前规则更少的执行Gas来写入永久记录。

拟议的规则还改变了当状态创建被撤销时Gas的恢复方式。EIP-8037使用后进先出(LIFO)的填充机制。当符合条件的状态创建费用被撤销时,会计系统可以补充之前用于这些费用的执行Gas,任何剩余金额返回到储备金中。在符合条件的情况下,gasleft()报告的量在执行过程中可能会增加。正常的REVERT和异常的Gas耗尽停止并不具有相同的后果; reverted的状态更改可以恢复适用的Gas会计,而异常停止会消耗受影响调用帧的执行Gas。开发者必须检查实际的调用路径,而不是假设每个失败的操作都会将Gas返还给调用者。

开发者应审查的三种合约模式

兼容风险集中在利用Gas测量做出决策或在外部调用失败后继续执行的合约中。以下三种模式值得特别关注:

  1. 依赖Gas的故障检测:检查 gasleft() < beforeCall / 64。剩余的执行Gas可能无法可靠地识别外部调用是否耗尽了其资源。
  2. 固定Gas配额:例如 target.call{gas: 100000}(data)。当存储和状态访问成本发生变化时,硬编码的Gas预算可能变得不足。
  3. 永久性失败记录:例如 if (!ok) permanentlyFailed[id] = true;。如果没有适当的保障措施,失败的调用不应自动禁用重试或取消财务索赔。

这些是用于代码审查的说明性Solidity模式,并非确认每种实现中都存在漏洞。开发者应将代理合同、中间合同以及任何重试或提款逻辑一起审查这些模式。测试应涵盖Gas不足导致的失败、新存储分配、存储清除、中间合同回滚以及具有不同状态Gas储备金余额的交易。在Osaka和拟议的Glamsterdam规则下比较相同场景,可以发现意外改变的执行结果。

Glamsterdam的扩展效益面临兼容性考验

Glamsterdam旨在通过协调执行和共识变更来支持更高的以太坊Layer-1容量。其更广泛的路线图包括EIP-7732(引入固定的提议者-构建者分离)和EIP-7928(引入区块级访问列表)。EIP-8037解决的是一个单独的扩展约束:持久化区块链状态给网络参与者带来了长期存储成本。

通过独立核算状态创建,以太坊旨在支持更大的执行容量,同时防止持久状态的增长变得不成比例地廉价。困难在于保持与已经依赖既定Gas行为的合约的兼容性。即使合约代码和接口保持不变,执行成本的变化也会影响金融应用逻辑。

Hoodi的延期给了核心开发人员时间,以便在决定是否保留、修改或推迟拟议的Gas规则之前,调查受影响的模式。以太坊基金会的修订公告指示Hoodi节点运营商更新其执行和共识客户端,以防止取消的激活。目前尚未公布新的Hoodi激活日期或Glamsterdam主网时间表。由于测试网的推迟,以太坊主网用户无需采取任何行动。

以太坊必须解决故障处理风险

这些发现并未确立今天影响以太坊的广泛漏洞。它们指出了一个兼容风险,如果拟议的规则在没有充分缓解措施的情况下激活,该风险可能会变得相关。仅改变Gas阈值可能还不够。嵌套调用、 reverted的状态创建和独立的Gas会计可以改变操作失败后剩余的执行Gas数量。

对于应用开发人员来说,更安全的方法是避免将gasleft()视为外部调用失败原因的确定性证据,并在财务操作无法完成时保留恢复路径。Glamsterdam的下一个技术里程碑是证明其新的Gas模型保留了现有合约执行路径的安全性,而不仅仅是设定另一个激活日期。

免责声明:

本网站、超链接、相关应用程序、论坛、博客等媒体账户以及其他平台和用户发布的所有内容均来源于第三方平台及平台用户。百亿财经对于网站及其内容不作任何类型的保证,网站所有区块链相关数据以及其他内容资料仅供用户学习及研究之用,不构成任何投资、法律等其他领域的建议和依据。百亿财经用户以及其他第三方平台在本网站发布的任何内容均由其个人负责,与百亿财经无关。百亿财经不对任何因使用本网站信息而导致的任何损失负责。您需谨慎使用相关数据及内容,并自行承担所带来的一切风险。强烈建议您独自对内容进行研究、审查、分析和验证。

展开阅读全文
更多新闻
自选
我的自选
查看全部
市值 价格 24h%