Why Your Crypto Transaction Is Stuck on Pending

Why Your Transaction Is Stuck on Pending And How to Fix It (Step-by-Step)

You clicked “Confirm”… and it’s been pending forever. This guide explains exactly why Ethereum (and L2) transactions get stuck, how to diagnose the cause in minutes, and the safest ways to speed up, cancel, or unstick them without creating bigger problems.

Beginner → Intermediate Troubleshooting • ~25–35 min read • Updated: 2025-11-13
TL;DR Most pending transactions are caused by: (1) your fee is too low for current network demand, (2) you have a nonce gap (an earlier tx is stuck, blocking later ones), (3) your wallet or RPC is out of sync, or (4) the transaction would revert even if mined. Fixes: Speed Up (replace with higher tip), Cancel (send 0 ETH to yourself with same nonce and higher fee), or Clear Nonce (replace the oldest pending tx first). Always verify status on an official explorer before doing anything.

1) How fees & nonces work (90-second refresher)

On Ethereum and most EVM chains, every account’s transactions are numbered with a nonce starting at 0. The network processes them in order. If nonce 12 is pending, then nonce 13 and above cannot be mined until 12 is mined or replaced. That’s how nonce locks happen.

Since EIP-1559, you set a maxFeePerGas (ceiling) and a maxPriorityFeePerGas (tip). Your actual price paid is roughly baseFee + priority. If you underbid, miners/validators ignore you until demand cools.

Pending Queue & EIP-1559 Fees Your account's nonce queue nonce 10 ✓ nonce 11 ✓ nonce 12 ⧗ nonce 13 (blocked) nonce 14 (blocked) EIP-1559 baseFee (algorithmic, burned) priority (tip to proposer) unused headroom refunded (if maxFee higher)
If nonce 12 is stuck, nonces 13+ cannot be included. Replacing the oldest pending tx with a higher fee frees the queue.

Takeaway: Always fix the oldest pending transaction first. Increasing the fee on a newer nonce does nothing while an older nonce is blocking the pipeline.

2) Diagnose in 5 minutes (checklist)

  1. Find your tx on an official explorer. Use Etherscan (Ethereum), Arbiscan (Arbitrum), BaseScan (Base), etc. Paste the hash from your wallet’s activity tab.
  2. Check current gas range. Compare your maxFee and priority to live suggestions (e.g., Gas Tracker). If your priority is below current, you’re likely underbidding.
  3. Look for “dropped & replaced.” If the explorer says “replaced,” your wallet may still show pending due to cache/RPC. Refresh, change RPC, or reimport account.
  4. Check your account nonce. On the explorer’s address page, note the “next nonce.” If your pending tx has a lower nonce, all later ones will queue behind it.
  5. Ask: would this tx revert? Swaps with too-tight slippage, approvals to bad routers, or insufficient token balances will never succeed, miners ignore them if underpriced; if mined, they may revert and still burn gas.
  6. Check RPC/Wallet health. If explorer shows a different state from your wallet, your RPC might be lagging. Switch RPC provider (Infura, Alchemy, Ankr, QuickNode) or toggle airplane mode to force refresh.

Heads-up: During extreme congestion (popular mints, airdrops), fees can spike for minutes to hours. Underpriced txs sit pending until the market calms or until you replace them.

3) Fixes by scenario (Speed Up, Cancel, Replace)

Scenario A: Underpriced fee

Symptom: Explorer shows pending, current tips are higher than your tip.

Fix: Speed Up (replace-by-fee) with same nonce and a higher priority: raise tip into the “Fast” range your explorer suggests. Don’t raise maxFee absurdly; set it to cover baseFee + tip comfortably.

Scenario B: Nonce lock

Symptom: Later txs stuck behind an older tx.

Fix: Replace the oldest pending tx with either a Speed Up or a Cancel (0-ETH to self, same nonce, higher fee). Once mined, the queue clears.

Scenario C: Likely revert

Symptom: Swap with unrealistic minOut; approval to a non-existent contract; insufficient token balance.

Fix: Cancel it with a same-nonce 0-ETH self-tx and higher fee. Then correct inputs and resubmit.

How to craft a Cancel tx (concept)
  • Recipient: your own address
  • Value: 0
  • Nonce: same nonce as the pending tx
  • Fees: set priority above current “Fast” suggestion; maxFee high enough to cover baseFee + tip

Most wallets expose a one-click Cancel button that constructs this for you. If not, use a custom nonce + custom gas settings.

Do not submit a new transaction with a higher nonce hoping it will “skip the line.” Ethereum enforces per-account order. You must fix or replace the oldest stuck nonce first.
Pro tip: If you don’t see Speed Up/Cancel options, enable “Advanced gas controls” and “Customize nonce” in your wallet settings (MetaMask & Rabby support this).

4) Wallet-specific guides

MetaMask (EIP-1559)

  1. Open the pending transaction → click Speed Up → choose a higher priority (or set custom tip) → confirm.
  2. If you need to cancel: open pending tx → Cancel. If not visible: Settings → Advanced → enable Customize transaction nonce. Send a new 0-ETH self-tx using the same nonce with a higher tip.
  3. Still stuck? Lock and unlock MetaMask; switch RPC; reinstall extension (seed backed up) to clear cache.

Docs: support.metamask.io

Rabby

  1. Open the pending item → Speed Up or Cancel with custom nonce.
  2. Rabby shows human-readable calldata and a simulate button—use it to check for potential revert before speeding up.

Docs: rabby.io

Coinbase Wallet

  1. Tap the pending tx → choose Accelerate (speed up) or Cancel (if exposed).
  2. If advanced controls are limited, import your seed into MetaMask/Rabby temporarily to perform a custom nonce cancel. Re-secure your seed afterward.

Docs: help.coinbase.com/wallet

Ledger + MetaMask

  1. Make sure Blind signing is enabled for contracts (Ledger Live settings) when replacing.
  2. Use MetaMask to construct Speed Up/Cancel; sign on Ledger; verify nonce and fees on-device before confirming.

Docs: support.ledger.com

5) Rollups & bridges: pending vs withdrawal delay

On Optimistic rollups (Base, Arbitrum, OP Mainnet), withdrawals to L1 can take days due to challenge windows. That’s not “pending” in the mempool, it’s an enforced delay by design. Deposits are typically fast; withdrawals wait for fraud-proof windows to pass.

Optimistic Rollup Withdrawal Timeline Initiate Withdraw (L2) Challenge Window (days) Prove on L1 Finalize & Claim
If the bridge UI shows a countdown, it’s expected behavior, not a mempool issue.

Use official bridges first: Base docs, Arbitrum docs, OP docs. Third-party bridges can offer “fast exits” by lending you funds on L1 immediately at a fee and smart-contract risk.

6) Account Abstraction (EIP-4337): pending UserOperations

With smart wallets using EIP-4337, you submit UserOperations to a bundler, which then posts them to an EntryPoint contract. If your UserOp is “pending,” the cause can be:

  • Paymaster issues: the gas sponsor is out of quota or rejects your policy, increase your own gas limit/fee or switch paymasters.
  • Simulation failure: the UserOp doesn’t pass validation (e.g., session policy), so bundlers won’t include it.
  • Bundler/RPC visibility: your wallet’s bundler is down. Switch provider or retry later.

Check your wallet’s activity and the EntryPoint logs; many AA wallets expose “why validation failed.” If in doubt, re-submit with a higher max fee or temporarily disable paymaster.

Learn more: EIP-4337.

7) Dev & power-user CLI recipes

Check nonce & pending status (ethers.js)

import { ethers } from "ethers";

const provider = new ethers.JsonRpcProvider(process.env.RPC_URL);
const wallet = new ethers.Wallet(process.env.PRIVATE_KEY, provider);

const main = async () => {
  const nonceLatest = await provider.getTransactionCount(wallet.address, "latest");
  const noncePending = await provider.getTransactionCount(wallet.address, "pending");
  console.log({ nonceLatest, noncePending }); // pending may be > latest if you have queued txs
};
main();

Replace (Speed Up) with higher tip (viem)

import { createWalletClient, http, parseEther } from "viem";
import { privateKeyToAccount } from "viem/accounts";
import { mainnet } from "viem/chains";

const account = privateKeyToAccount(process.env.PRIVATE_KEY);
const client = createWalletClient({ account, chain: mainnet, transport: http(process.env.RPC_URL) });

const replaceTx = async (nonce, to, data = "0x") => {
  const fee = await client.estimateFeesPerGas(); // EIP-1559 { maxFeePerGas, maxPriorityFeePerGas }
  // bump priority by ~1-2 gwei above suggested fast range (tune as needed)
  const maxPriorityFeePerGas = (fee.maxPriorityFeePerGas ?? 1n * 10n**9n) + 2n * 10n**9n;
  const maxFeePerGas = (fee.maxFeePerGas ?? 30n * 10n**9n) + 5n * 10n**9n;
  return client.sendTransaction({ to, data, value: 0n, nonce, maxPriorityFeePerGas, maxFeePerGas });
};

// Example: cancel self with same nonce
// await replaceTx(12, "0xYourAddressHere");

Foundry one-liner: cancel nonce with 0-ETH self-tx

# Replace & cancel nonce N
cast send 0xYourAddress --value 0 --nonce N \
  --priority-gas-price 3gwei --gas-price 0 \
  --eip1559 --max-fee-per-gas 40gwei --private-key $PRIVATE_KEY \
  --rpc-url $RPC_URL

Why “Dropped & Replaced” still looks pending in my wallet?

Your local wallet cache or RPC may not have updated. Force refresh: change RPC endpoint, reload the extension/mobile app, or reimport the account (seed securely backed up).

8) Prevention playbook

  • Use EIP-1559 smart settings. Let your wallet auto-suggest ranges, then nudge the tip slightly higher if you need fast inclusion.
  • Check gas before sending. Peek at the gas tracker or your L2’s explorer. During spikes, either wait or pay to cut the line.
  • Avoid multiple “send spams.” Don’t fire 5 swaps in a row, if nonce 1 stalls, nonces 2–5 are stuck too.
  • Simulate first. Many wallets/dapps simulate calls (tenderly, block explorers). If simulation fails, fix inputs before paying gas.
  • Keep RPC options handy. Add 2–3 reputable endpoints; if one lags, switch.
  • Learn the buttons. Practice Speed Up and Cancel with tiny amounts so you’re calm when fees spike for real.
  • For devs: implement nonceManager and backoff logic; don’t queue many nonces blindly.

9) FAQ (myths & edge cases)

“If I set a huge max fee, miners take it all.”

No. With EIP-1559 you pay baseFee + priority. The difference between your maxFee and the actual base fee is refunded. The tip goes to the proposer.

“Can I submit nonce 15 first to skip nonce 14?”

No. Per-account nonces must be mined in order. Replace or cancel nonce 14 first.

“Explorer says ‘Dropped & Replaced’, wallet still shows pending.”

It’s a local cache/RPC issue. Switch RPC, reload, or reimport. Trust the explorer.

“My L2 withdrawal is pending for days — is it stuck?”

Likely not. Optimistic rollups enforce a challenge window for security. That’s expected. Fast bridges can front liquidity in minutes (with added risk/fees).

“Does Speed Up always work?”

It works when you correctly target the oldest pending nonce with a meaningfully higher tip. If the tx would revert regardless, cancel it instead.

“Can I reclaim gas from a reverted transaction?”

No. Gas pays for computation. If it reverts, the chain still expended resources to reach that conclusion.

10) External docs & references

Core concepts

Wallets & troubleshooting

Rollups & bridges

Account Abstraction

Recap

  • Pending is usually fees (underbid), nonce order, RPC desync, or a tx that would revert.
  • Fix the oldest pending tx: Speed Up or Cancel with the same nonce and a higher tip.
  • Verify on an official explorer; don’t trust only the wallet UI.
  • On rollups, withdrawal delays are expected, not mempool pending.
  • Prevent repeats: simulate, watch gas, avoid spam queuing, and practice the buttons with tiny amounts.

Need hands-on help unblocking a specific transaction (hash, network, wallet)?

Get 1:1 Troubleshooting →