RIP-7712

Multi-dimensional nonces for smart contract accounts in RIP-7560 transactions

RIP-7712 introduces a two-dimensional nonce mechanism for native Account Abstraction (RIP-7560) transactions. It enables Smart Contract Accounts to define their own transaction sequencing logic, making complex and parallelized workflows possible — especially when multiple signers or execution threads are involved.


🧱 What It Adds

  • Two-dimensional nonces: (nonceKey, nonceSequence) pairs replace the traditional sequential nonce

  • NonceManager contract: Precompiled helper for validating and incrementing nonces

  • Enhanced parallelism: Accounts can manage multiple nonce threads (e.g., for multisig vs routine ops)


🔗 Relation to Other Standards

Spec
Relation

RIP-7560

RIP-7712 extends its native transaction type

ERC-4337

Smart wallets already use custom nonces per validator

EIP-7702

Revocation relies on legacy nonce; 7712 adds caveats

ERC-6900 / 7579

Can map plugins to separate nonceKey lanes


🤔 Why It Matters

  • Avoids nonce collisions across independent actions

  • Enables parallel UX flows like multisig vs automation

  • Powers plugin-specific channels for modular accounts


⚙️ How It Works

RIP-7712 introduces a nonceKey alongside the usual nonceSequence. Each nonceKey acts like an independent thread:

mapping(address => mapping(uint256 => uint256)) public nonce;

A NonceManager precompile handles validation and incrementing:

  • nonceKey = 0: Uses legacy nonce (for EOAs and simple flows)

  • nonceKey > 0: Uses the two-dimensional scheme

  • Bundlers or builders must call the precompile to validate the pair


🤖 Example Use Cases

  • Threshold multisig vs user-level automation

  • Plugin-specific nonces for fee payment, voting, recovery

  • Delegated session key lanes (e.g. game moves, subscriptions)

  • Atomic batch ops with concurrent replay protection


⚠️ Caveats

  • EIP-7702 revocations use the legacy nonce — applications must align nonceKey = 0 for clean compatibility

  • Some tooling (e.g. eth_getTransactionCount) may not support multi-key logic

  • Wallets must expose nonce lanes clearly to avoid replay errors


💬 Discussion

Last updated