LayerZeroFault
EVM & JSON-RPC CODE: -32000-NONCE Reviewed & Verified:

JSON-RPC Error -32000: Nonce Too Low Stale Wallet State Fix

Verified by Victor Vance • Lead Technical Analyst & Systems Researcher
Quick Diagnostic Answer (Executive Summary) GSC Snippet Verified

JSON-RPC error -32000 "nonce too low" occurs when a transaction is submitted with a nonce value that has already been consumed by a confirmed transaction on-chain. EVM accounts enforce strictly increasing sequential nonces to guarantee transaction ordering. If your local wallet cache gets desynchronized from the actual blockchain state, it may attempt to re-use an old nonce. Reset your wallet account activity or query the latest on-chain nonce.

# Root Cause & Technical Architecture

Every EVM account maintains an on-chain nonce representing the number of transactions sent. When `eth_sendRawTransaction` is received, the node checks `tx.nonce < state.GetNonce(sender)`. If the submitted nonce is strictly less than the latest confirmed state count, the node immediately discards it and returns `revert -32000 nonce too low`. This commonly happens when switching between wallet interfaces or when an RPC node returns cached stale state.

# 4-Step Actionable Diagnostic Protocol

Step-by-Step Resolution
01

Fetch Current Confirmed On-Chain Nonce

Execute eth_getTransactionCount(account, "latest") directly on a fresh RPC node to find the current active nonce.

02

Reset MetaMask Account Activity Data

In MetaMask, go to Settings > Advanced > Clear activity tab data. This clears the local internal nonce counter without touching your secret recovery phrase.

03

Check for Pending Transactions via "pending" Block Tag

Query eth_getTransactionCount(account, "pending"). If pending count exceeds latest count, you have stuck transactions in the mempool.

04

Synchronize Parallel Backend Trading Scripts

If using automated trading bots or scripts, implement a centralized Redis atomic counter to prevent worker threads from reusing nonces.

# Diagnostic Verification Code / Command

typescript
sync-onchain-nonce.ts
// Fetch accurate nonce including pending transactions
import { createPublicClient, http } from 'viem';
import { mainnet } from 'viem/chains';

const client = createPublicClient({ chain: mainnet, transport: http() });

async function getAccurateNonce(address: `0x${string}`) {
  // Query pending state to account for unmined transactions
  const nextNonce = await client.getTransactionCount({
    address,
    blockTag: 'pending'
  });
  return nextNonce; // Safe to use for next transaction submission
}
Zero-Secrets Client Sandbox

Launch Derivation Path Inspector

Execute client-side cryptographic simulation and parameter checks safely in your browser via native WebCrypto without sending private keys or mnemonics over the wire.

Open Sandbox →
Comprehensive In-Depth Guide

Read Full Investigation & Recovery Workflow

Explore complete architectural diagrams, edge-case failure trees, and detailed post-mortem analysis in our verified deep guide.

Read Guide →

# Related Diagnostic Codes in EVM & JSON-RPC

Related Hex Statuses

# Frequently Asked Questions

FAQ Schema

Does clearing account data in MetaMask delete my coins?

No. Clearing activity tab data simply clears MetaMask's local transaction history cache and re-syncs nonces with the network.

Why did my nonce reset when I switched RPC providers?

Different RPC providers can have slight replication delays, leading a lagging node to report an outdated confirmed transaction count.

What happens to transactions sent with "nonce too high"?

Transactions with a nonce that is too high are held in the node "queued" pool until all preceding sequential nonces are mined.