JSON-RPC Error -32000: Nonce Too Low Stale Wallet State Fix
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 ResolutionFetch Current Confirmed On-Chain Nonce
Execute eth_getTransactionCount(account, "latest") directly on a fresh RPC node to find the current active nonce.
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.
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.
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// 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
} 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.
Read Full Investigation & Recovery Workflow
Explore complete architectural diagrams, edge-case failure trees, and detailed post-mortem analysis in our verified deep guide.
# Related Diagnostic Codes in EVM & JSON-RPC
Related Hex StatusesJSON-RPC Error -32000: Insufficient Funds for Gas * Price + Value
Fix JSON-RPC error -32000 insufficient funds for gas * price + value. Resolve native token balance shortages, fee estimation surges, and gas caps.
JSON-RPC Error -32000: Replacement Transaction Underpriced Fix
Fix JSON-RPC error -32000 replacement transaction underpriced. Apply mandatory 10%+ maxPriorityFeePerGas bump on same nonce to replace stuck mempool txs.
JSON-RPC Error -32603: Internal JSON-RPC Error in Web3 Wallets
Fix JSON-RPC error -32603 Internal JSON-RPC error. Resolve EVM execution reverts, contract call simulation failures, and RPC endpoint rate limits.
# Frequently Asked Questions
FAQ SchemaDoes 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.