Quick overview
If you have a transaction stuck in MetaMask (a "metamask pending transaction"), there are three reliable ways to proceed: use the built-in Speed Up, use the built-in Cancel, or manually replace the transaction by reusing the same nonce with higher gas. I use all three regularly. What I've learned is that each method has trade-offs depending on whether the original tx is a simple ETH transfer or a contract interaction.
This guide shows step-by-step instructions for each approach, explains why they work (under the hood), and describes how I tested them so you can reproduce the same results on a testnet before trying on mainnet.
Why transactions get stuck (quick primer)
Short version: miners/validators prioritize transactions with higher effective gas payment (EIP-1559: base fee + priority fee). If your tip is too low relative to the current base fee and network demand, miners might ignore your transaction and leave it pending. Another cause: a nonce gap — earlier pending transactions block later ones because nonces must be processed in order.
A nonce (transaction counter) is assigned per account and must be unique. If transaction #5 is stuck, transaction #6 will sit in Pending until #5 is confirmed or replaced. That’s why canceling or replacing the earliest stuck transaction is often the fastest fix.
Built‑in fixes in MetaMask: Speed Up vs Cancel
MetaMask offers two easy buttons when you tap a pending transaction in Activity: Speed Up and Cancel. They both create a new transaction with the same nonce. The difference is in intent.
Speed up transaction (MetaMask)
What it does: resends the same transaction (same to/value/data) but with a higher gas offer so miners pick it up faster.
Step-by-step (extension):
- Open MetaMask extension and click the account with the pending tx.
- Go to Activity and find the pending transaction.
- Click "Speed Up".
- Adjust the gas settings (you can pick a higher tip / max fee) and confirm.
Step-by-step (mobile):
- Open the MetaMask app → Activity → pending tx.
- Tap "Speed Up" and slide or edit the gas price.
- Confirm the transaction.
Notes: Speed Up is effectively "resend transaction metamask". It keeps the same payload so it’s safe for simple transfers and most contract calls. But if the original depended on off-chain state, double-check the logic before resending.
MetaMask cancel transaction
What it does: sends a new 0 ETH transaction to your own address (or a minimal replacement) with the same nonce and usually a higher gas offer to replace the original. If the cancel is confirmed first, the original pending transaction becomes invalid.
Step-by-step (both extension and mobile):
- Find the pending transaction in Activity.
- Tap "Cancel".
- Confirm the gas settings and submit.
Limitations: Cancel works best for simple ETH transfers. If the stuck tx is a contract interaction (for example a token swap), a cancel may not always block side effects if the original ultimately confirms first.

Manual replace with custom nonce (advanced)
If the built-in buttons don't appear or you want full control, you can replace a stuck transaction by setting the same nonce manually.
- Enable custom nonce: MetaMask → Settings → Advanced → turn on "Customize transaction nonce".
- Find the stuck tx's nonce (open the transaction details in MetaMask or look it up on the block explorer for your network).
- Create a new transaction: simplest is 0 ETH sent to your own address. In the Confirm screen, go to Advanced and set the nonce equal to the stuck tx's nonce.
- Increase gas fees (make the priority fee and/or max fee higher than the original). Then confirm.
Why this works: the new transaction uses the same nonce but offers more gas, so the network will accept whichever replacement arrives first in a block. This is essentially how "nonce metamask cancel" works under the hood.
Caveat: manual replacement requires care with gas parameters under EIP-1559 (set both maxPriorityFee and maxFee sufficiently high). And if you get the nonce wrong, you could create more pending transactions.
How I tested these steps (replicable methodology)
I like to test on a public Ethereum testnet first (pick a current testnet like Sepolia or Goerli). Here’s exactly what I did so you can repeat it:
- Create a fresh MetaMask account (extension on Chrome and the mobile app on Android). Follow create-metamask-wallet if you need setup help.
- Switch to a testnet and fund the account from a faucet with a small amount of test ETH.
- Intentionally send a transaction with a low priority fee (edit Advanced gas settings to a lower tip) so it stays pending.
- Wait a few blocks to confirm it remains pending. Then try the built-in Speed Up first. Record whether the replacement mined and how many blocks it took.
- Repeat by creating a pending transaction again, then use Cancel. Observe results.
- For manual testing, enable custom nonce, find the pending tx nonce in the block explorer, and submit a 0 ETH tx to yourself with that nonce and a higher fee.
I repeated the steps across the extension and mobile app. The behavior matched: Speed Up and manual replace are functionally the same (resend with a higher fee). Cancel sends a different payload (0 ETH to self) but still replaces by nonce.
When cancel or replace fails — troubleshooting
- Insufficient funds to pay the replacement gas — check balance before sending.
- The original tx was already mined (too late to replace).
- The replacement used a lower effective gas than the original — it won’t replace.
- You used the wrong nonce when doing a manual replace — double-check it on the block explorer.
- RPC node hiccups — try switching networks or change your RPC endpoint in Settings → Networks.
If you have multiple pending transactions blocked by an earlier stuck nonce, clear the earliest one first.
Quick comparison: Speed Up vs Cancel vs Manual Replace
| Method |
What it sends |
Pros |
Cons |
When to use |
| Speed Up |
Same tx, higher gas |
Simple UI, keeps same payload |
Not available for some tx types |
When you want same action to happen faster |
| Cancel |
0 ETH to self (replacement) |
Quick way to invalidate a pending simple tx |
Might not stop complex contract effects |
When you just want to stop a simple transfer |
| Manual Replace |
Any tx with same nonce and higher gas |
Full control over nonce and gas |
Advanced, risk of mistakes |
When built-in buttons aren’t available or you need custom control |
Best practices to avoid stuck transactions
- Preview recommended gas tips before sending. See gas-fees-eip1559-and-l2 for deeper reading.
- For new dApps, do a tiny test transaction first. And if you interact with contracts, double-check the data you’re signing.
- Keep a small ETH buffer to pay replacement gas if something gets stuck.
- If you’re unsure, practice on a testnet first.
FAQ
Q: Is it safe to cancel a pending transaction in MetaMask?
A: If the tx is still pending, yes — canceling submits a replacement with the same nonce. But if the original confirms first, the cancel is moot. For contract calls, double-check side effects.
Q: How do I check the nonce for my address?
A: Open the pending tx details in MetaMask and view "Nonce" or search your address on a block explorer to see the nonce column.
Q: What if my cancel also gets stuck?
A: Resend another replacement with the same nonce and a higher gas offer. If problems persist, switch RPC endpoints or consult troubleshooting.
Q: Can I resend transaction MetaMask if the UI buttons aren’t present?
A: Yes. Enable custom nonce in Settings → Advanced and submit a replacement transaction manually.
Q: What happens if I lose my phone while a transaction is pending?
A: Losing a device doesn’t affect transactions on-chain — they remain pending until mined or replaced. But you should protect your seed phrase (see backup-and-recovery-seed-phrase).
Conclusion and next steps
Stuck transactions are annoying, but they’re solvable. Use Speed Up when you want the same action to finish faster. Use Cancel to invalidate a simple pending transfer. Use manual nonce replacement when you need full control. I recommend practicing these steps on a testnet first so you understand how nonce and gas interact.
If you want a deeper refresher on gas mechanics and how EIP‑1559 changes fee behavior, check the gas guide: Gas fees, EIP‑1559, and L2. And if you often work from both phone and browser, read about syncing mobile and desktop: sync-mobile-desktop.
Try these steps with a tiny test transaction and you’ll get the hang of it quickly. Good luck, and stay cautious with contract approvals (see token-approvals-and-revoke if you need to clean up allowances).