Arbitrum上ERC-4337触发AA95 out of gas错误求助
ERC-4337 AA95 Out-of-Gas 问题排查(Arbitrum网络)
核心原因解析
AA95错误不是只和callGasLimit挂钩,它覆盖了ERC-4337账户抽象交易的全流程gas消耗,以下是你没命中的关键环节:
- 验证阶段gas超支:未精简代码时,你的钱包
validateUserOp函数(签名验证、账户逻辑)可能存在冗余计算,比如多余循环、复杂哈希操作,这部分消耗的是verificationGasLimit而非callGasLimit,调后者自然没用。 - Arbitrum特殊gas模型:Arbitrum的gas费用=L1数据费+L2执行费,未精简的calldata会大幅拉高L1数据费,而ERC-4337的
preVerificationGas需要覆盖这部分成本——如果preVerificationGas设得不够,哪怕callGasLimit充足,也会触发AA95。 - Paymaster额外消耗:如果用了paymaster,其
validatePaymasterUserOp和postOp函数也会占gas,未精简代码时这部分可能超出了预留额度。
可参考的排查依据
- ERC-4337官方规范:重点看Gas Limits章节,明确
preVerificationGas、verificationGasLimit、callGasLimit各自的覆盖范围。 - Arbitrum官方文档:查看L2 Gas模型说明,了解L1数据费对ERC-4337交易gas估算的影响。
- 主流ERC-4337钱包(如Safe Account Abstraction)的技术文档:里面有针对不同链的gas配置最佳实践。
精简后成功的逻辑
精简操作直接砍掉了两个关键gas消耗点:
- 减少了
validateUserOp或目标合约执行阶段的L2计算量,降低了verificationGasLimit或callGasLimit的实际需求。 - 缩短calldata长度,大幅降低L1数据费,让原本不足的
preVerificationGas能覆盖实际成本,避免了整体gas溢出。
后续排查建议
- 单独测试
validateUserOp函数的gas消耗,确认是否超出verificationGasLimit设置值。 - 用Arbitrum的gas估算工具,计算未精简calldata对应的L1数据费,把
preVerificationGas调整到能覆盖该费用+基础验证gas的水平。 - 若使用paymaster,检查其
validatePaymasterUserOp函数的gas消耗,确保预留足够额度。
内容的提问来源于stack exchange,提问作者local darede
相关产品推荐
相关产品推荐

