eth_createAccessList如何生成访问列表? 图 1
eth_createAccessList如何生成访问列表? · 图 1

eth_createAccessList在指定以太坊区块状态上模拟调用,返回地址与存储槽列表、gasUsed和可能的执行error。它使用以太坊区块号或区块标签,也不保证生成列表一定省Gas。

本文只回答RPC如何生成、如何比较Gas以及为何模拟不等于可广播;与EIP-2930机制概览形成互补。

故障与停止条件

误判正确处置
给以太坊RPC加入其他链的上下文参数保留原始证据,停止外推并按本文步骤复核
看到accessList非空就宣称一定节省Gas保留原始证据,停止外推并按本文步骤复核
忽略响应error,只复制列表继续发交易保留原始证据,停止外推并按本文步骤复核

请求与响应骨架

{"method":"eth_createAccessList","params":[
  {"from":"0x...","to":"0x...","value":"0x0","data":"0x..."},
  "0x12ab34"
]}

响应中的accessList由若干address + storageKeys[]组成,gasUsed是这次模拟口径,error则说明执行路径本身可能回滚。区块参数应使用固定区块号或哈希语义;用latest做两次比较时,状态变化会破坏对照。

访问列表每个地址和storage key都有固有成本。验收时在同一状态、同一from/to/value/data下,分别估算无列表和带列表交易:既比较执行冷访问节省,也加回列表编码与内在Gas。生成器给出非最小列表时,总Gas可能反而更高。

一手规范给出的结论

请求与响应字段

eth_createAccessList接收交易调用对象和可选区块参数,返回accessList、gasUsed,并可能返回执行error。

访问列表生成流程

节点通过模拟发现交易访问的地址与存储槽;生成列表本身有地址和存储键的固有Gas成本,因此不保证总Gas一定下降。

Gas成本对照

结果基于指定区块状态和节点实现,模拟成功不保证广播时状态、nonce、余额或base fee仍满足执行条件。

Gas成本对照实操清单

  1. 固定以太坊chainId和区块标识,准备完整调用对象
  2. 调用eth_createAccessList并保存accessList、gasUsed、error
  3. 对列表去重,核对每个地址和32字节storage key
  4. 在同一区块状态比较有无列表的eth_estimateGas
  5. 广播前重新检查nonce、余额、base fee与合约状态

把模拟边界写进回归测试

回归用例先准备一份黄金样本:对象、网络、版本和预期结果均已知。脚本完成“固定以太坊chainId和区块标识,准备完整调用对象”后只保存原始数据,再由独立模块执行“调用eth_createAccessList并保存accessList、gasUsed、error”。黄金样本的作用是发现实现变化,不代表其他对象天然安全;测试报告必须注明它覆盖的具体范围。

负向用例至少两条。第一条构造“给以太坊RPC加入其他链的上下文参数”,第二条构造“看到accessList非空就宣称一定节省Gas”。两条用例分别运行,禁止同时改变多个字段。合格实现会保留原始错误并停止在对应层级;自动切换网络、猜测未知字段或引用旧缓存都应让用例失败。

状态用例在动作前取得请求与响应字段快照,执行“对列表去重,核对每个地址和32字节storage key”后再次取证,并对照访问列表生成流程和Gas成本对照。如果状态由节点视图、缓存或索引延迟造成,结果应注明观察来源。A时点和B时点必须各自保留,不能只存一条被覆盖的最终记录。

发布前由人工检查结果页是否同时显示原始字段、推导规则、单位或版本以及三态结论。触发“忽略响应error,只复制列表继续发交易”时,系统必须建议“在同一区块状态比较有无列表的eth_estimateGas”并停止自动动作。回归记录由此覆盖正常、错误、状态变化和人工接管四条路径。

来源、增量与风险边界

来源本文用途
Ethereum Execution APIs正式接口、字段与规范语义
EIP-2930实现路径、兼容性或安全边界

本文资料读取于2026-07-20。不同客户端生成的非最小访问列表可能不同,应用应保存区块标识并比较有无access list的估算结果。

站内相邻主题可继续阅读:Gas估算边界RPC核验方法。模拟依赖指定区块状态。列表生成成功不保证未来状态、余额或费用仍满足执行,签名前必须重新估算。