以太坊交易的可选字段里有一个几乎没人填的:访问列表。它随 EIP-2930 进入主网,用途是提前声明交易将碰哪些地址与存储槽,让 EVM 按热价收费。多年下来绝大多数交易仍然留空。EIP-7707 的诊断是价格错了:把每个存储键的预热成本降到 320 Gas、每个地址降到 512 Gas,让填列表重新变得划算。
盈亏账现在长什么样
冷槽读取收 2100 Gas,热槽只收 100。按现行价目,预热一个键再真的读一次,省下的 2000 要抵掉 1900 的预热费,净赚约 100;而列表里每多带一个地址固定收 2400。提案动机段算过这笔账:每个地址至少要带 24 个键才刚回本;如果列表里有一个键最终没被用到,浪费的 1900 会让打平点恶化到约 43 个键。普通转账与简单调用的键数远低于这个量级,理性钱包的选择就是不填——半休眠状态由此而来。
为什么客户端很在意
被浪费的不只是用户的 Gas。执行客户端里状态读取是最慢的环节之一,尤其冷访问。交易若声明了完整键集合,客户端可以在执行前并行预载这些数据,把磁盘与网络延迟藏到执行开始之前——提案把这套思路类比 CPU 指令流水线:不改变任何指令语义,只让取数与计算重叠。往远看,地址与键的显式声明还是并行执行的天然依赖提示:知道谁碰谁的数据,才知道哪些交易可以同时跑。这份提案的动机因此不止于省钱,还在给执行层性能演进铺一条数据通道。
降价会带来什么连锁
第一是刷价空间:预热变便宜后可能出现塞超大列表的畸形交易,降价必须与列表尺寸成本、区块 Gas 上限一起评估。第二是估算负担:钱包要生成准确列表,eth_createAccessList 这类接口的重要性上升;而列表与链上真实执行分支之间的对应本来就脆弱——前序交易改变状态导致你的交易走了另一条分支,多带的键就是冤枉钱。第三是收益分配:列表带来的收益一部分表现为全网执行效率、一部分表现为用户账单,两者不必等量,这是定价设计的取舍核心。
当前状态
截至本文写作时,EIP-7707 状态为停滞(Stagnant)——长期缺少讨论与更新的提案会被流程移入该状态,创建于 2024 年 5 月 12 日,声明依赖 EIP-2930。停滞不等于被否决,但意味着当前没有活跃推进者,参数也非最终值。提案给出的目标常数是 ACCESS_LIST_STORAGE_KEY_COST 320 与 ACCESS_LIST_ADDRESS_COST 512。
一笔小账
以一个典型 ERC-20 转账为例:它通常触及合约账户与收发双方存储槽,去重后大约三个地址、三到五个键。按现行价格,光是地址项就要付七千二百 Gas,而冷读收益最多每键两千出头——列表注定亏本。换到提案价格,三个地址约一千五百三十六,加上三五个键的预热费,与直接吃冷读罚金的路线接近打平甚至略优,前提是分支判断准确。这笔账解释了为什么钱包厂商更希望协议先改价、再由工具自动附带列表,而不是教每个用户手填参数。
快速问答
问:现在填访问列表能省吗? 答:按现行价目,除非交易对大量键各至少读一次,否则难有正收益;先用 eth_createAccessList 实测再决定是稳妥做法。 问:访问列表涉及安全授权吗? 答:不涉及。它只是性能提示,能访问什么由合约逻辑决定,列表写错只影响 Gas 结果。 另一个常被忽略的点:访问列表是提示不是授权,即使把大量无关键塞进列表,也不会多获得任何访问权限,只会多付预热费。 问:为什么当初定那么贵? 答:EIP-2930 时代主要考虑防止列表成为免费的状态预加载攻击面,高价是保守的自洽选择;后续硬件与客户端发展改变了这组权衡。
风险提示:本文为 Gas 机制科普,不构成投资建议;Gas 参数以官方规范和当期客户端实现为准。
发表评论
还没有评论,来说两句吧。
评论区为展示样式,提交不会被处理。