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成本对照实操清单
- 固定以太坊chainId和区块标识,准备完整调用对象
- 调用eth_createAccessList并保存accessList、gasUsed、error
- 对列表去重,核对每个地址和32字节storage key
- 在同一区块状态比较有无列表的eth_estimateGas
- 广播前重新检查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核验方法。模拟依赖指定区块状态。列表生成成功不保证未来状态、余额或费用仍满足执行,签名前必须重新估算。
发表评论
还没有评论,来说两句吧。
评论区为展示样式,提交不会被处理。