给冷状态划一条总截止线:EIP-8296 的一次性分层与可归档冷集 图 1
给冷状态划一条总截止线:EIP-8296 的一次性分层与可归档冷集 · 图 1

状态越来越冷,可改一笔旧数据还是老价钱

以太坊的全局状态只增不减:每一个新账户、每一个被写过的存储槽都会永久留在状态树里。绝大多数状态是写了一次就再没人碰的冷数据,可节点照样要为它们维持工作集,而协议对「改一个上个月刚写的槽」和「改一个五年前写过一次的槽」收一样的钱。此前已经有两条提案在解决这件事:EIP-8188 给每个账户和存储槽记一笔最后写入区块号,见 给每段状态记一笔最后写入时间:EIP-8188 的 last_written_block 元数据;EIP-8295 在此基础上按写入年龄划分周期、分期定价,见 长期没人写的状态更贵:EIP-8295 按账龄给状态写入定价。2026 年 6 月 10 日提交的 EIP-8296 走的是另一条路:不分期、不滚动,只划一条总截止线。截至按 EIPs 仓库原文核验时,它处于 Draft 草案状态,从未上链。

给冷状态划一条总截止线:EIP-8296 的一次性分层与可归档冷集 图 2
给冷状态划一条总截止线:EIP-8296 的一次性分层与可归档冷集 · 图 2

规格只有一条线:CUTOFF_BLOCK

EIP-8296 的核心机制简单到只有一行判断:每个账户或存储槽读取 EIP-8188 定义的 last_written_block 字段,只要这个区块号低于 CUTOFF_BLOCK,该状态就是非活跃(Inactive),否则是活跃(Active)。截止线本身是个 TBD 常数,作者明确说它由社会共识选定,相当于社区某天一起决定「这条线以下的状态都算老古董」。定价上只有两处变化:对非活跃账户的写入要加收 INACTIVE_ACCOUNT_WRITE_SURCHARGE,对非活跃存储槽的写入要加收 INACTIVE_STORAGE_WRITE_SURCHARGE,两个值也都是 TBD 且必须大于零。原文特别强调附加费是叠在正常 Gas 之上、不是替换正常费用,读取则完全不受影响,非活跃状态也继续留在状态树里——不需要驱逐机制,也不需要复活机制,这是它和状态租金类老提案最大的区别。

每类操作对哪些叶子收费

原文用一张表逐项列出了附加费的落点,值得逐条读:改一个已存在的存储槽,收该槽一份,同时因为 SSTORE 要重算存储根,容器账户也吃一份账户级附加费;从写一个新槽(零到非零)或清掉一个槽,新槽或旧槽本身都算创建或豁免对象,只收容器账户那份。带价值的转账对发送方和接收方各按各自档位收费,刚创建的新接收合约豁免;nonce 递增收那个账户;CREATECREATE2 只收创建者,新合约的账户、代码和构造函数写入的槽全部算创建豁免。还有一条容易忽略的时序规则:档位按操作开始时字段的值判定,写入随即把 last_written_block 刷成当前区块,所以同一叶子每个区块最多被收一次附加费。7702 授权也要收费——被写入委托指示器的账户按账户级附加费计入固有 Gas。

一条固定线买到的额外好处:冷集可以归档

这篇提案真正的差异化卖点在动机部分。因为截止线一次性、永久固定,非活跃集合在激活那一刻就锁死了,可以被完整序列化成不可变的文件。如果各家客户端约定同一种文件格式,这些文件在节点之间可以互换:热数据库丢掉冷集,改存文件,同步时从任何 Peer 或镜像直接下载,不必重新推导。这正是以太坊已经在用 era 文件分发区块历史的做法,只不过对象换成了状态。账龄分期的路线做不到这一点——周期边界每过一段就前移一次,冷集是滚动变化的,没法一劳永逸打包。两条路线的分歧本质上是「一台服务器扛热数据加文件柜存冷数据」和「永远按年龄渐进定价」的哲学之争,而 8296 赌的是前者对普通节点的硬盘更友好。

普通钱包用户会感到什么

把机制翻译回日常:第一,一个多年没用过的地址如果余额被顺手动了一次(比如接收转账导致余额字段更新),在规则生效后将按非活跃账户收费,发送方的钱包界面会显示比预期略高的 Gas,多出的部分就来自这里;第二,你持有的老 NFT、早年 DAO 的存储被重新写入时同理,费用上涨落在交易发起者头上,而不是持有者被罚款;第三,永远别把「没人动过我的地址」理解为「动它免费」——冷数据恰恰因为冷,改动它才要先付一笔唤醒费。这些都要等提案被纳入某次升级才会成立,现网仍是统一价。

风险提示

本文涉及的提案状态与参数按 EIPs 官方仓库原文核验,均未生效且参数值多为待定,请以仓库当前内容为准。理解状态定价有助于解释 Gas 波动,但不构成任何投资建议;链上操作不可逆,签名前请核对费用与目标地址。