How to Revoke Token Approvals and Protect Your Crypto from Scams
Most people secure their seed phrase, enable two-factor authentication, and double-check URLs before connecting their wallet. Then they sign a routine transaction on a new decentralized exchange, a yield farm, or an NFT marketplace — and unknowingly give a smart contract unlimited access to every token of that type in their wallet, forever.
This isn't a theoretical risk. Malicious contracts, compromised frontends, and abandoned projects with vulnerable code have drained millions from wallets that approved tokens months or years earlier. The good news: you can revoke those permissions at any time, and doing so regularly is one of the most effective security habits you can build.
What Token Approvals Actually Are
When you interact with a decentralized application, you're often asked to sign two distinct types of transactions. The first is the action itself — a swap, a deposit, a mint. The second, which often appears first, is an approval.
An approval (technically an approve() call on an ERC-20 token contract) tells the token contract: "Allow this specific smart contract address to move up to X amount of my tokens on my behalf." Without this, the dApp's contract cannot pull tokens from your wallet to execute the trade or deposit you requested.
Here's the critical detail: most dApps request infinite approval (the maximum uint256 value) by default. This means a single signature grants that contract permission to spend your entire current and future balance of that token — USDC, WETH, LINK, whatever — until you explicitly revoke it.
It's not a bug. It's a design choice. Infinite approvals reduce friction. If every transaction required a fresh approval, you'd pay gas twice per interaction and sign twice as many pop-ups. For legitimate protocols, this is a reasonable UX tradeoff. For your security, it creates a persistent attack surface.
Why This Became the Default — And Why It Matters
Early DeFi protocols optimized for user retention. Every additional signature was a drop-off point. Infinite approvals became the industry standard because they made the experience feel seamless — approve once, interact freely forever.
The problem emerged as the ecosystem expanded. Today, a typical active wallet has interacted with dozens of contracts across multiple chains. Each approved contract represents a persistent key to your assets. If any of those contracts:
- Contains a vulnerability (reentrancy, access control flaws, oracle manipulation)
- Is upgraded maliciously by a compromised admin key
- Was always malicious but disguised as a legitimate tool
- Is abandoned and later exploited via a discovered vulnerability
...your approved tokens are at risk. The attacker doesn't need your seed phrase. They don't need to phish you. They just need to call transferFrom() on the token contract using the approval you signed months ago.
The Difference Between Approvals and Signatures
A common point of confusion: revoking approvals is not the same as revoking signatures.
Token approvals are on-chain permissions recorded in the token contract's storage. They persist until revoked or spent. You can view and revoke them at any time.
Signatures (like permit() signatures or EIP-712 messages) are off-chain cryptographic authorizations. Some allow gasless approvals. Others authorize specific actions like listing an NFT. These cannot be "revoked" in the same way — they expire based on their nonce or deadline, or they're single-use by design.
This article focuses on on-chain ERC-20 approvals, which are the persistent, revocable permissions that accumulate silently in your wallet.
How to Audit Your Existing Approvals
Before revoking anything, you need to see what you've approved. Several reputable tools scan your wallet across chains and surface every active allowance.
Revoke.cash
The most established option. Connect your wallet, select a chain, and you'll see a list of every token approval — the spender contract, the token, the allowance amount, and the risk level. It supports Ethereum, Polygon, Arbitrum, Optimism, Base, BNB Chain, Avalanche, Fantom, Gnosis, and more.
Features worth knowing:
- Risk labels (high/medium/low) based on contract verification and known exploits
- Batch revocation to save gas
- Browser extension for quick checks before signing
- Open source codebase
Etherscan Token Approval Checker
Built directly into Etherscan (and its sister explorers for other chains). Navigate to your address, click the "Token Approvals" tab. No wallet connection required — it reads public state. Useful for a quick read-only audit.
Zapper, DeBank, and Portfolio Trackers
Many portfolio dashboards now include approval management. Convenient if you already use them, but verify they're reading live on-chain data, not cached indexes.
Chain-Specific Explorers
Polygonscan, Arbiscan, Optimistic Etherscan, BscScan, Snowtrace — all have native approval checkers. If you're heavy on one chain, use its native explorer for the most reliable data.
How to Revoke Approvals — Step by Step
Revoking an approval is itself a transaction. You'll pay gas. The process is straightforward:
- Connect your wallet to a trusted revocation tool (Revoke.cash is the standard reference).
- Select the network where the approval exists.
- Review the list. Identify approvals you no longer need — old farms, defunct protocols, one-time mints, suspicious contracts.
- Click "Revoke" next to each approval, or use batch revocation for multiple items.
- Confirm the transaction in your wallet. Verify the function call is
approve(spender, 0)ordecreaseAllowance()— not a new infinite approval. - Wait for confirmation. The allowance now reads zero.
Gas consideration: On Ethereum mainnet, each revocation costs roughly 40,000–50,000 gas. At 20 gwei, that's ~$5–15 per revocation. Batch revocations save significantly. On L2s (Arbitrum, Optimism, Base), costs are cents. Plan accordingly — you don't need to revoke everything at once.
Which Approvals Should You Revoke?
Not every approval needs immediate revocation. Active positions on trusted protocols (Uniswap V3, Aave, Curve) require their approvals to function. Revoking them would break your positions.
Prioritize revoking:
- Approvals for contracts you no longer use
- Approvals for unaudited, experimental, or abandoned protocols
- Approvals from one-time interactions (NFT mints, airdrop claims, test transactions)
- Approvals labeled high-risk by your scanning tool
- Infinite approvals for tokens you hold in large amounts
When in doubt, revoke. You can always re-approve later when you return to the protocol. The gas cost of re-approving is identical to the cost of revoking.
Special Cases: NFT Approvals and Permit Signatures
ERC-721 and ERC-1155 NFTs have their own approval model: setApprovalForAll grants an operator (like OpenSea or Blur) permission to move all NFTs in a collection. This is separate from ERC-20 approvals and appears in the same tools under "NFT Approvals." Revoke these for marketplaces you no longer use.
Permit signatures (EIP-2612) allow gasless approvals. They're single-use by nonce and don't create persistent on-chain allowances. However, signing a malicious permit message can still drain your wallet if the signature is crafted to approve a specific spender. Never sign permit messages from untrusted sources.
Building a Sustainable Security Routine
Revoking approvals isn't a one-time cleanup. It's hygiene. Treat it like rotating passwords or reviewing connected apps on your Google account.
- Monthly audit: Spend ten minutes scanning your active wallets across chains. Revoke stale approvals.
- Post-interaction check: After trying a new protocol, verify the approval amount. If it's infinite and you only needed a specific amount, consider revoking and re-approving a precise amount (some tools support this).
- Use the Revoke.cash browser extension: It warns you before you sign an infinite approval, showing the spender and token.
- Separate wallets for separate risk tiers: A "main" wallet for long-term holds and trusted protocols. A "degen" wallet for experimental contracts. Never approve infinite allowances on your main wallet for unaudited protocols.
- Hardware wallet + revocation: Even with a Ledger or Trezor, approvals persist on-chain. The hardware wallet protects your keys — it doesn't auto-revoke permissions.
What Revocation Cannot Protect Against
Revoking approvals is powerful, but it's not a silver bullet.
- It doesn't recover funds already stolen.
- It doesn't protect against signatures you've already signed (permit messages, EIP-712 orders).
- It doesn't prevent you from signing a malicious approval in the future.
- It doesn't protect native tokens (ETH, MATIC, AVAX) — those don't use approvals. They're moved via direct transfers or
callwith value.
The only complete defense is transaction simulation (tools like Tenderly, Pocket Universe, or wallet-built previews) combined with skepticism. If a dApp requests an approval that doesn't match its stated function, don't sign.
Closing Thoughts
Token approvals are the invisible cords tying your wallet to every contract you've ever used. Most are benign. Some are time bombs. The difference isn't visible in your balance — it's visible only when you check.
Make revocation a habit, not a panic response. The tools are free, the process is standard, and the protection is real. In an ecosystem where code is law and immutability cuts both ways, managing your approvals is one of the few proactive defenses you fully control.