Glamsterdam 将重写应用成本账本:新增状态与执行预算必须分开
以太坊推迟 Glamsterdam 分叉进程。开发者需要重新验证首次使用成本、代付计费与失败恢复,不能只调高 gas 上限。

以太坊基金会 11 月 6 日宣布因兼容性问题延后 Glamsterdam 硬分叉进程,Hoodi 分叉须等待问题解决。这并非主网升级完成的公告。基金会说明
对产品经理而言,风险同时落在成本和业务正确性上。过去能完成的新用户操作,可能超过旧预算;过去会整体回滚的失败操作,可能留下永久失败记录。单纯把所有 gas 预算乘上一个系数,既无法准确报价,也无法证明资金或消息处理流程仍然安全。以下分析依据截至 11 月 7 日读取的提案与测试说明,具体参数和规范仍可能修改。
用户付的钱与区块装下的工作量
EIP-8037 拟把新增状态单独计量,交易仍由用户为执行 gas 与状态 gas 的合计买单,但区块容量及下一块基础费的计算看两个累计维度中较大的一个。它不是为每个维度建立独立竞价市场,也不意味着状态存储免费。其目的在于让长期状态增长受到约束,同时减少它与执行工作争用单一计数器的影响。EIP-8037
这个区别会改变运营仪表盘的含义。应用收取或补贴的交易费用,与网络还有多少执行空间,不再能用同一个累计数字解释。若团队把交易回执的累计 gas 直接当作区块拥堵程度,可能误读容量;提案明确区分回执累计支付量与区块 gas 指标。由此推导,代付服务应分别追踪支出、操作成功率和资源使用,而不是仅以“每块用了多少 gas”决定补贴策略。
新增状态定价体现的经济选择,是把节点长期保留数据的负担更多归给创建者。它可能改善扩容的可持续性,却会把一部分成本集中到部署和首次使用环节。能容纳更多执行工作,与每个用户操作更便宜,是两个需要分别验证的结果。
首次用户不能套用老用户的报价
在当前草案中,一个原本为零的冷存储槽写成非零,状态部分为 64×1,530,即 97,920 gas;加上 2,100 的访问和 10,000 的写入部分,总计 110,020。这个数字只是一笔特定写操作的模型成本,不是整笔转账价格,也不是所有应用统一涨价的倍数。EIP-8037、EIP-8038
例如,同一个代币转账入口,给已有余额地址更新余额,与给首次持币地址建立新的余额槽,可能走不同状态路径。分析上,按“成功交易平均成本”提供固定新客补贴会掩盖这种差异。团队应把首次领取、首次授权、首次部署钱包与重复操作分组回放,再观察业务利润是否足以覆盖最昂贵的合法路径。
只避免新增槽也不够。EIP-8038 同时调整访问和写入成本,更新已有状态仍可能更贵。批处理可摊薄部分开销,但依赖更多外部账户、代理或失败重试时,实际节省须由完整调用路径证明,不能仅凭交易数量下降下结论。EIP-8038
gasleft() 不再是一张完整账单
EIP-8037 的 reservoir 模型把部分预算留给状态创建;GAS 操作码,也就是 Solidity 的 gasleft(),只报告 gas_left,不包含 reservoir。状态创建被撤销时还可能发生即时回填。用前后两次 gasleft() 相减,因而不能稳定代表用户承担的全部成本,读数也不能被简单视为始终递减。EIP-8037
这直接关系到中继商、代付方与链上收费合约。若收费逻辑把这个差值当作支出凭证,可能少算状态成本,或在读数回升时触发算术问题。更稳妥的工程方向是把经用户同意的收费规则、可验证的执行结果和链下对账分开设计;封顶可以限制损失,但无法把错误计量变成正确计量。官方审计清单已把基于 gasleft() 差值收费列为检查重点。不变量清单
最昂贵的错误可能发生在失败之后
更隐蔽的问题是,目标调用失败后,外层合约还能做什么。根据 EIP-8037 的回填规则,我们推导出一个需要测试的假设场景:状态 gas 回填或 reservoir 可能使某些失败处理程序继续完成。假设一个流程曾靠“剩余 gas 不够写失败记录”而整体回滚,升级后可能变成目标没有执行、任务却被标记永久完成。这里需要证明的是重试权仍在,而非仅仅证明函数没有报错。安全分析
因此,发布前的关键测试应从业务结局倒推:故意压低子调用预算,再检查领取权、消息状态、nonce 和重试入口。对于必须捕获失败的批处理,恢复路径应明确存在;不能仅从剩余 gas 或空的回滚数据推断失败原因。上述分析并不声称所有捕获失败的合约都有漏洞,风险取决于完整路径与状态。
临时锁也值得单独审视。仅在一笔交易内使用的标志,可评估 EIP-1153 的 transient storage;它在交易结束后丢弃,适合部分跨调用临时状态。但迁移仍要核对代理上下文、回滚行为和重入保护,不应把持久余额或跨交易权限搬过去。EIP-1153
把验收条件从费用改成结果
可执行的准备工作,是固定一个测试规范版本,分别覆盖新旧账户、新旧存储槽、充足与不足的状态预算、成功与回滚路径,并同时检查合约、机器人和 RPC 周边组件。官方资料明确提醒链下部分也可能受影响;只重跑合约单元测试并不充分。官方审计仓库
产品端则需要把可调整的预算、代付上限和异常恢复责任写清楚。预算留余量是防止正常用户卡住的措施,业务状态可恢复才是防止错误永久化的保障。Glamsterdam 延期给团队留下的实际窗口,是把“历史上花过多少 gas”的经验值,改造成对成本和失败结果都可验证的约束。是否通过这些测试,应先于任何对更低费用或更高吞吐的承诺。
内容仅供参考,不构成投资、法律、税务或财务建议。