Token Approvals and Wallet Hygiene
Why old approvals are standing risk, revoking them, and using separate hot/cold wallets.
Before this guide, read Phishing and Social Engineering Defense.
Every time you use a token on a DeFi app — swapping on a DEX, depositing into a lending pool, listing an NFT — you first sign an "approval" that grants the app's smart contract permission to move that token out of your wallet. Those permissions don't expire when you're done. They accumulate silently for years, and each one is a standing door into your wallet that opens if the approved contract ever turns malicious or gets exploited. Wallet hygiene is the routine of granting approvals narrowly, revoking them regularly, and separating wallets so no single mistake can reach everything you own.
Why Approvals Exist at All
On Ethereum-style chains, tokens are smart contracts that track balances. A DEX can't simply take your USDC when you swap — token standards require that you first call approve, authorizing a specific contract (the "spender") to transfer up to a specific amount of a specific token on your behalf. The app's contract then uses that allowance to pull tokens during the swap.
This is sensible design: it lets contracts compose without holding your funds. The trouble is in two defaults that emerged for convenience:
- Unlimited amounts. Many apps request an effectively infinite allowance so you never have to approve that token again. One signature, and the contract can move any amount of that token from your wallet, forever, without further permission.
- No expiry. An approval persists until you explicitly revoke it or it's fully consumed. The DEX you tried once in 2023 may still hold an unlimited allowance on your USDT today.
For NFTs, the equivalent — setApprovalForAll — is even broader: it grants a contract control over every NFT in a collection, current and future, in a single signature.
Why Old Approvals Are Standing Risk
An approval is a live capability, not a historical record. Whether it's dangerous depends entirely on the contract holding it — and that can change after you signed.
- Protocol exploits. If a contract you approved is hacked, attackers can often use its permissions to pull tokens straight from every wallet that ever granted an allowance — not just funds deposited in the protocol. Several multi-million-dollar incidents have worked exactly this way: users who had merely interacted with a protocol months earlier lost tokens sitting "safely" in their own wallets.
- Malicious approvals you granted yourself. Drainer sites disguise approval requests as claims, mints, or verifications. The theft doesn't need to happen at signing time — the attacker can wait, then sweep the wallet whenever it's worth it.
- Upgradeable and abandoned contracts. Some contracts can be upgraded by their admins; an approval to today's honest code can become an approval to tomorrow's malicious code, whether through a rug pull or a compromised admin key. Abandoned projects stop patching, making old exploits permanent.
The compounding factor is invisibility. Your wallet interface shows balances, not allowances. A wallet can display 50,000 USDC while five forgotten contracts each hold the right to take it. Most people have no idea what they've approved — which is precisely why routine review matters.
Auditing and Revoking Approvals
Every approval and revocation is on-chain, so this is fixable in an afternoon.
Finding them. Approval-management tools — Revoke.cash is the best-known independent one, and Etherscan and several wallets have built-in approval checkers — read the chain and list every active allowance for your address: which token, which spender contract, what amount, and when granted. Expect a long list if you've used DeFi for a while; dozens of active approvals is normal for an active address.
Prioritizing. You don't need to revoke everything. Triage by risk:
- Unlimited approvals to anything you don't actively use — revoke first.
- Approvals to unknown or unverifiable contracts — if you can't remember granting it or can't identify the project, revoke.
setApprovalForAllon NFT collections for marketplaces you no longer use.- Large-amount approvals on stablecoins and blue-chip tokens, since those are what drainers monetize most easily.
An active allowance to a protocol you use weekly is a reasonable convenience trade; the same allowance to something you touched once is pure downside.
The mechanics and cost. Revoking means sending a transaction that sets the allowance to zero, so each revocation costs gas — on Ethereum mainnet typically anywhere from well under a dollar to a few dollars depending on congestion, and fractions of a cent on most layer 2s. Note each token-spender pair is a separate revocation. If a wallet holds many risky approvals but little value, migrating assets to a fresh wallet can be cheaper than revoking everything.
Going forward. When an app requests an approval, prefer a custom amount matching what you're actually transacting instead of the unlimited default — most wallets let you edit the requested allowance before signing. You'll pay for an extra approval next time; that's the price of a smaller blast radius. Newer token mechanisms (such as Permit2-style signatures with expirations) narrow this problem, but the audit-and-revoke habit remains necessary for everything else.
Wallet Segmentation: Don't Keep It All Behind One Door
Approval hygiene reduces the risk per wallet. Segmentation caps the damage when hygiene fails. The standard structure uses three tiers:
- Vault (cold). A hardware-wallet address that holds long-term funds and does almost nothing: receive, hold, occasionally send to your own hot wallet. It signs no dApp approvals, ever. Because it never interacts with contracts, the entire approval attack surface simply doesn't apply to it.
- Daily hot wallet. A software or hardware-backed wallet holding a working balance — think of it like the cash in your pocket versus your savings account. It interacts with established protocols you use regularly and gets its approvals reviewed on a schedule.
- Burner. A wallet for the risky frontier: new mints, unaudited protocols, airdrop claims, anything you were linked to. Fund it with only what the specific interaction requires — if a mint costs 0.05 ETH, send 0.06. When a burner signs something malicious, you lose the contents of the burner, not your holdings.
The discipline that makes this work: value flows downhill only. Vault funds the hot wallet, the hot wallet funds burners, and nothing risky ever gets signed by the tiers above. Note that segmentation means separate seed phrases (or at least consciously separated accounts) — ten addresses derived from one seed are one wallet the moment that seed leaks.
A Maintenance Routine That Sticks
Hygiene fails when it depends on remembering. Tie it to triggers instead:
- Quarterly: run your addresses through an approval checker and clear the risky list. Put it on the same calendar reminder as other financial chores.
- After any incident or scare: signed something odd, visited a site that felt wrong, saw a drainer warning — audit that wallet the same day.
- After finishing with a protocol: closed your last position on a platform? Revoke its approvals while you're thinking about it.
- Before moving large value into a wallet: audit first, fund second.
Fifteen minutes a quarter is the entire cost. Compared to the alternative — discovering that a protocol you used two years ago was exploited last night — it's one of the best-priced pieces of insurance in crypto.
Key Takeaways
- Token approvals are standing, non-expiring permissions for contracts to move your tokens; unlimited approvals from years ago remain live doors into your wallet.
- Exploited, upgraded, or malicious contracts can drain tokens from every wallet that ever approved them — the risk exists even when your funds never left your address.
- Audit allowances with an approval checker and revoke by priority: unlimited amounts, unknown contracts, and NFT
setApprovalForAllgrants first. - Prefer exact-amount approvals over unlimited defaults; a little extra gas buys a much smaller blast radius.
- Segment into vault, daily, and burner wallets with value flowing only downward, so one bad signature can never reach everything.
Educational content, not financial advice. Read the full disclaimer.
Glossary terms in this guide
2FA Done Right for Crypto