EIP-7702批量交易只用一个Nonce:卡单怎么处理

 / 
1

EIP-7702 批量交易的 nonce 机制和普通交易完全不同,你的钱包 nonce 不会因为批量交易而递增,但授权(authorization)里有一个独立的 nonce。所以"卡单"后的处理方式也和普通交易不一样——你不能简单地用一笔 0 ETH 转账来"顶"掉卡住的交易,因为 EIP-7702 的 nonce 走的是另一套逻辑。

欧易OKX交易所
全球领先的加密货币平台,适合新手与进阶交易者
新手福利:注册即享20% 交易手续费减免!

步骤 1:确认是哪种"卡单"

先判断你的交易卡在哪一层,这决定了处理路径。

  • 情况 A:交易还在内存池里未上链,钱包显示"pending" 这种情况和普通交易卡单类似。因为 EIP-7702 交易有一个 authorization_list,系统在处理这个列表时先检查授权 nonce,再执行交易内容。如果你之前签过一个授权,里面用的 nonce 和你当前钱包的 nonce 对不上,这笔交易就会被节点拒绝,根本进不了内存池。

  • 情况 B:交易已经上链,但批量操作中的某个子操作失败了 EIP-7702 批量交易是原子性的——子操作要么全部成功,要么全部失败并回滚,不会出现"部分成功"的中间状态。如果整笔交易状态是 Fail,那所有操作都没生效,需要重新发起。

高危风险:EIP-7702 授权一旦签署并上链,委托关系是持久的,直到你主动撤销或覆盖。如果你误签了恶意授权,攻击者可以在无需你再次签名的情况下,通过 Bundler 批量执行盗币操作。一次错误的签名就可能导致账户被远程"接管",私钥泄露都不是必要条件。

步骤 2:情况 A 的处理——检查授权 nonce 是否匹配

如果交易被节点拒绝,最常见的原因是授权 nonce 没算对。

  • 怎么做:EIP-7702 规范规定,授权列表在交易执行部分开始之前处理,但在发送者 nonce 递增之后。所以如果你用同一个 EOA 地址既签署授权又发送交易(非赞助模式),授权消息里的 nonce 必须是当前账户 nonce + 1

  • 完成标准:用区块浏览器查一下你地址的当前 nonce,然后重新生成授权签名,确保 nonce = 当前 nonce + 1。如果你的钱包工具(如 viem)支持 executor: 'self' 参数,它会自动处理这个逻辑。

步骤 3:情况 B 的处理——批量交易失败后重新发起

如果交易已经上链但状态是 Fail,不需要处理 nonce 问题,因为这笔交易的 nonce 已经被消耗了。

  • 怎么做:直接在钱包里重新发起批量交易。注意检查失败原因——可能是 Gas 设置太低,也可能是子操作里的某个合约调用条件不满足(比如代币余额不足)。

  • 完成标准:新交易在区块浏览器上显示 Success,且所有子操作都执行完成。

常见失败原因

  • 授权 nonce 可重用导致混淆:根据 EIP-7702 的测试网实现,授权 nonce 可以被重用,不会像普通交易 nonce 那样强制递增。这意味着你之前签过的授权,换了不同的交易内容仍然可能被节点接受,造成意想不到的执行结果。

  • 普通"加速/取消"方法失效:在 MetaMask 里用"加快速度"或"取消"交易的操作不适用于 EIP-7702 授权卡单,因为问题出在授权 nonce 验证阶段,交易根本还没到执行环节。

欧易OKX交易所
全球领先的加密货币平台,适合新手与进阶交易者
新手福利:注册即享20% 交易手续费减免!

操作完成后

  • 校验方式:去区块浏览器查交易哈希,确认状态为 Success。同时检查钱包地址是否被委托给了某个合约地址——如果有意外的委托关系,用 revoke.cash 或钱包内置的授权管理功能撤掉它。

  • 下一步动作:如果你发现地址有非预期的 EIP-7702 委托,立即将剩余资产转移到新地址。委托状态是持久的,攻击者随时可以通过 Bundler 远程触发批量盗币。撤委托只需要发一笔 0x04 类型交易,把 delegate_address 设为 0x0000...0000 即可。