最后更新:
EIP-8037,标题为“状态创建 Gas 成本增加”,是一项拟议的 以太坊 核心协议变更,旨在提高并标准化链上状态创建的 Gas 成本,同时将这些成本与普通执行成本分开核算。该提案由 Maria Silva、Carlos Perez、Jochem Brouwer、Ansgar Dietrichs、Łukasz Rozmej、Anders Elowsson、Francesco D’Amato、Dragan Rakita、Paweł Bylica、Spencer Taylor-Brown 和 Gary Rong 于 2025 年 10 月 1 日创建,旨在随着 区块 Gas 限制的提高来限制状态增长,同时允许更高的交易吞吐量和更大规模的合约部署。截至 2026 年 10 月 24 日,EIP 仓库将其状态列为“最后征集(Last Call)”,截止日期为 2026 年 11 月 1 日,而官方规范表示其正处于同行评审过程中。[1][2][3]
以太坊 对增加持久状态的操作收费,但 EIP-8037 认为现有的成本并不一致。该提案对比了合约部署(每新增字节约 200 Gas)与创建存储槽(每新增字节约 313 Gas)。它还指出,部署数据库中已存在的字节码可能与部署新字节码的成本相同,尽管客户端并不存储重复代码。该提案旨在根据这些操作增加的状态量来定价。[1][2]
该提案的依据是 以太坊 状态数据库的预期增长。报告显示,2026 年 1 月 Geth 节点 的状态数据库约为 390 GiB。在 Gas 限制从 3000 万增加到 6000 万后,据报道每日平均新增状态从约 105 MiB 上升到 326 MiB,即每年约 116 GiB。该提案将这种变化描述为非线性的,可能与用户行为的一次性转变有关。将增加后的速率外推到 2 亿 Gas 限制,预计年状态增长约为 387 GiB;在这种外推下,一个起始约为 390 GiB 的状态数据库将在不到一年的时间内超过 650 GiB。[1][4]
EIP-8037 引入了每状态字节成本 (CPSB),用于计算新状态的费用。规范将 CPSB 列为每字节 1,530 Gas,校准目标是在 1.5 亿 Gas 的参考 区块 Gas 限制下,实现每年 120 GiB 的平均状态增长。其状态大小参数为:存储集分配 64 字节,新账户分配 120 字节,授权基准分配 23 字节。它还设置了每次调用最多 16 个系统存储操作,以及 4,294,967,295 (2³²−1) 的最大总交易 Gas 限制。[1][2]
该提案的设计在开发过程中发生了变化。早期的草案根据区块 Gas 限制动态计算 CPSB,使用量化公式旨在实现 100 GiB 的年状态增长目标。2026 年 5 月 4 日合并的修订版将该方案替换为 1,174 的固定 CPSB,基于 9600 万 Gas 参考限制下的 100 GiB 年度目标。目前的 EIP 规范列出了不同的 CPSB 值和校准,同时保留了根据创建的状态量分配成本的通用方法。[5][6][1]
根据规范提出的时间表,CREATE 和 CREATE2 对新账户和部署代码的每个字节收取状态 Gas;它们还会产生执行 Gas 成本,包括代码哈希费用。CALL 和 SELFDESTRUCT 在创建新账户时产生状态 Gas,而 SSTORE 为新存储槽收取状态 Gas。EIP-7702 账户委托也将状态创建与执行成本分开:创建空账户和记录授权基准以状态 Gas 定价,而相关的执行工作仍保留在执行 Gas 中。一些访问和账户写入成本由 EIP-8038 定义或更新,其数值在提案中尚未最终确定。[1][4]
核心的核算变化是将 执行 Gas (execution-gas) 和 状态 Gas (state-gas) 作为两个独立的维度进行跟踪。用户为两者付费,但 EIP-7825 引入的交易 Gas 限制适用于执行 Gas;状态 Gas 由交易的 Gas 容限单独限制。在区块层面,客户端跟踪每种资源的累计使用情况。区块的 gas_used 取两者总和中的较大值,该瓶颈维度决定了区块是否已满以及如何调整下一个区块的基础费用。EIP-7623 下的 Calldata Gas 下限适用于执行 Gas,因此状态 Gas 不能满足该要求。[1][2]
该提案使用状态 Gas 储备池来支持交易内的这种分离。状态创建费用在消耗剩余执行 Gas 之前先从储备池中扣除,而普通操作成本使用执行 Gas。该提案认为,独立计量将防止常规交易 Gas 上限像单一共享限制那样限制大型部署。它也承认了一种权衡:区块构建者需要平衡两个资源维度,这可能有利于更复杂的构建者并增加中心化压力。对于许多用途,更简单的策略(如填充区块直到其中一个维度耗尽)被描述为是切合实际的。[1][4]
EIP-8037 警告说,[GAS](https://iq.wiki/wiki/gas) 操作码可能会在某些操作后报告 [gas](https://iq.wiki/wiki/gas)_left 增加。因此,通过减去连续的 GAS 读取值来估算工作的合约可能会计算出负差值,导致检查算术(checked arithmetic)回滚或未检查算术(unchecked arithmetic)溢出。规范讨论了在同一交易中从零设置然后清除的存储槽:状态 Gas 补充可以将 Gas 返回给 gas_left。当调用帧合并时返回状态 Gas 可以将这种影响延伸到调用边界之外。[1][4]
该提案还指出了 ERC-4337 交易捆绑包的风险。由于 GAS 暴露了 gas_left 但不暴露状态 Gas 储备池,捆绑器和 EntryPoint 实现无法仅凭 gasleft() 的差异可靠地归因所有状态 Gas 成本。捆绑包中的用户操作共享交易储备池,因此一个操作的状态 Gas 退款可能会补贴另一个操作的费用,而不会出现在任何一个操作测得的 Gas 差异中。提案表示,捆绑器和 EntryPoint 实现必须明确核算状态 Gas 的收费和退款。[1][4]
截至 2026 年 10 月 24 日,EIP 仓库将 EIP-8037 列为“最后征集”,截止日期为 2026 年 11 月 1 日。官方规范称该 EIP 正在进行同行评审。[1][2]
2026 年 10 月 13 日,安全公司 ChainSecurity 发布了涉及 EIP-8037 和 EIP-8038 的担忧分析。它警告说,在那些利用剩余 Gas 来区分真正的操作失败与因 Gas 不足而导致失败(从而符合重试条件)的合约中,存在“Gas 不足骚扰(insufficient-gas griefing)”风险。在拟议的规则下,失败的外部调用可能会比之前的规则向调用者返回更多的 Gas,从而可能改变现有检查的结果。ChainSecurity 表示,受影响的应用程序可能会将失败的操作视为最终结果、删除用户的申领或阻止重试;它指出捆绑交易和付款是相关的案例。该公司报告称在活跃合约中发现了 13 个此类模式的例子,并表示在公开披露之前正与受影响的团队进行机密合作。[7]
EIP-8037 被包含在计划中的 Glamsterdam 升级中。2026 年 10 月 6 日,Glamsterdam 在 Sepolia 测试网 上激活,并提高了 Gas 限制。该升级还将 EIP-8038 与 EIP-8037 归为一组,并包含了计划中的变更,如内置提议者-构建者分离(ePBS),这将把 区块 提议者和 区块 构建者的分离移入协议中,以及区块级访问列表,用于识别区块将访问的数据,以便客户端可以并行执行某些工作。[7]
以太坊 开发人员原定于 UTC 时间 2026 年 10 月 26 日 17:42:48 激活 Glamsterdam 的 Hoodi 测试网,但在 ChainSecurity 发现问题后于 10 月 22 日取消。此次取消还移除了计划中的 Amsterdam 执行层和 Gloas 共识层升级的激活,并撤回了将 Hoodi 的 Gas 限制提高到 2 亿的提议。这一变化影响的是未来的 Hoodi 配置,而非测试网上已记录的区块;Sepolia 的激活不受影响。截至 10 月 24 日,尚未确定 Hoodi 或 主网 的更换日期。开发人员曾讨论过 2026 年 12 月 1 日、8 日和 9 日作为可能的 主网 日期,但均未确认。取消旨在进一步调查 EIP-8037 和 EIP-8038 将如何与主网上已运行的合约互动;主网继续保持不变运行。[7][8]
一份单独的执行测试框架计划描述了测试 EIP-8037 Gas 模型的准备工作。它要求通过 Gas 成本计算传递区块 Gas 限制上下文,针对状态 Gas 模型调整基准测试,并处理那些硬编码 Gas 限制已根据早期成本校准的静态测试。该计划提议在 3000 万、6000 万和 1.2 亿的区块 Gas 限制下进行测试,并配合测试和持续集成变更;这是一份实施计划,而非所有这些变更都已落地的证据。[9]
EIP-8037 也被列为一个活跃的无状态共识(Stateless Consensus)协议变更项目。其规范在 CC0 协议下发布,放弃了版权及相关权利。[3][1][10]