Token Approve is the standard mechanism ERC20 tokens use to interact with smart contracts, but it is also the single biggest DeFi attack vector of 2024-2026. This article walks through how Approve works and how to revoke it. The bottom line up front: every DeFi interaction can leave behind an Approve residue, leaving old approvals unrevoked lets risk quietly accumulate, and auditing with Revoke.cash every month and revoking unnecessary approvals should be a standard habit for any DeFi user. For your everyday primary/backup account setup, register a main account through the Binance Official Site, install the Official Binance App on Android, and iPhone users switching to an overseas Apple ID should check the iOS install guide.
I. How the Approve Mechanism Works
The two-sided mechanism of ERC20 tokens:
The ERC20 token standard defines two ways to move tokens:
- transfer: the user sends tokens themselves (you send USDC to someone else)
- transferFrom: a contract moves tokens on your behalf (a smart contract pulls USDC out of your account)
transferFrom requires an Approve first:
Step 1: the user calls approve(spender, amount) on the USDC contract
- spender = the contract address
- amount = the approved amount
Step 2: the contract calls transferFrom(user, recipient, amount)
- this only succeeds within the approved amount
For example, using Uniswap:
Step 1: the user Approves the Uniswap Router to pull USDC (a one-time Approve for 1000 USDC)
Step 2: the user starts a USDC → ETH swap on Uniswap
Step 3: the Uniswap Router calls USDC.transferFrom to pull the USDC
Step 4: the Uniswap Router sends the user the corresponding amount of ETH
Approve is the underlying mechanism behind every DeFi interaction with an ERC20 token.
Q: Do you have to re-Approve for every interaction?
No. An Approve is persistent:
- Once you Approve 1000 USDC to Uniswap, that 1000 USDC allowance stays in place permanently
- You can trade on Uniswap repeatedly, and as long as you stay under 1000 USDC you never need to re-Approve
- The Approve only ends when you manually Revoke it or it gets used up
This is the root of accumulated Approve risk: leave approvals unrevoked long enough and a huge pile of old approvals builds up.
II. The Two Types of Approve
Limited Approval:
- You approve a specific amount (e.g. 1000 USDC)
- The contract can pull at most 1000 USDC
- Once it's used up, you need to Approve again
Unlimited Approval (MaxUint256):
- You approve an amount of 2^256-1 (effectively unlimited)
- The contract can pull an unlimited amount
- You never need to Approve again
Why unlimited approvals exist:
- Gas optimization: you only need to Approve once (saving $50-200 in gas)
- User experience: avoids having to Approve on every interaction
- DApp defaults: Uniswap, SushiSwap, and others default to unlimited Approve
The risk of unlimited approvals:
- If a protocol gets hacked, the tokens in your wallet can be drained without limit
- After approving a phishing contract, all of your remaining assets can be swept out
- It's easy to overlook (most users never actively check)
A real case:
In December 2024, a user had granted Unlimited USDC approval to Uniswap back in 2022. In December 2024, that same wallet received a deposit of 50,000 USDC — two hours later a malicious contract (a fake router disguised as Uniswap V3) called transferFrom and drained the entire balance. A post-mortem found the phishing contract had exploited the user's old, forgotten Approve.
Q: Should you choose limited or unlimited approvals?
The safety-first camp (recommended): manually Approve the exact amount needed for each interaction
- Pros: high security, any single loss is capped
- Cons: gas is spent every time ($5-30)
The convenience camp: default to unlimited approvals
- Pros: saves gas and lets one Approve last indefinitely
- Cons: losses can be severe if the protocol gets hacked
Common strategy:
- Large token balances (>$10,000): use limited approvals and revoke as soon as you're done
- Small token balances (<$10,000): unlimited approvals plus regular audits
III. Common Forms of Approve Attacks
Form 1: Phishing-site Approve attacks
A phishing site mimics a real interface, and once you connect your wallet it has you sign an Approve transaction:
- On the surface: it claims to "verify your wallet" or "claim an airdrop"
- In reality: it Approves USDC / USDT / WETH to a malicious contract
- What follows: the malicious contract calls transferFrom to drain all the approved tokens
Form 2: Permit signature attacks
EIP-2612 introduced the permit function, which lets approvals happen entirely through a signature (no on-chain transaction):
- You sign a Permit message
- The contract uses that signature to call permit + transferFrom
- Your tokens get pulled from your wallet (with no prior Approve needed)
Why Permit attacks are dangerous:
- Signing costs no gas (nothing goes on-chain)
- Wallets don't display Permit requests very clearly
- Users may assume it's a "harmless signature"
Form 3: A protocol you approved years ago gets hacked
An old Approve on a compromised protocol:
- You Approved some DeFi protocol two years ago
- The protocol gets taken over by an attacker (leaked private key / hijacked contract upgrade)
- The attacker calls transferFrom through the protocol and pulls out everything you ever approved
Form 4: Malicious token drainers
A phishing site bundles multiple approvals into a single signature:
- One signature request contains approvals for several tokens — USDC, USDT, WETH
- You can't easily tell what's actually being approved
- A single signature ends up approving multiple tokens at once
Q: Is Permit more dangerous than Approve?
Yes, Permit is significantly more dangerous:
| Dimension |
Approve |
Permit |
| On-chain |
Yes |
No (signature only) |
| Costs gas |
Yes |
No |
| Wallet readability |
Fairly clear |
Not intuitive |
| How to revoke |
An on-chain Revoke transaction |
Cannot be revoked (requires changing the contract nonce) |
| User vigilance |
High |
Low |
Always carefully check the token, amount, and recipient of any Permit signature.
IV. A Deep Dive Into Revoking Approvals
The leading revoke tools:
Revoke.cash (the most widely used, recommended):
- Site: revoke.cash
- Supported chains: Ethereum plus the major EVM chains
- How it works: connect your wallet → view your list of approvals → click Revoke
Etherscan Token Approval:
- Site: etherscan.io/tokenapprovalchecker
- Ethereum mainnet only
- Shows approval details
Solscan Approval (Solana):
- Site: solscan.io/account-token-approval
- Solana only
- Revokes SPL token approvals
Steps to use Revoke.cash:
1. Go to revoke.cash
2. Click "Connect Wallet" (MetaMask / Rabby)
3. Your approvals load automatically, grouped by token / protocol
4. Review the list:
- Token name (USDC, USDT, WETH, etc.)
- Approved spender (contract address + known protocol name)
- Approved amount (a specific figure, or Unlimited)
- Risk rating (red = high risk, green = a known protocol)
5. Click "Revoke" on any approval that looks suspicious
6. Sign in the MetaMask pop-up and pay gas
7. Wait for it to confirm on-chain (5-30 seconds)
The gas cost of a Revoke:
| Chain |
Cost per revoke |
| Ethereum mainnet |
$5-30 |
| Polygon |
<$0.01 |
| Arbitrum / Optimism / Base |
$0.1-1 |
| BNB Chain |
$0.05-0.30 |
| Solana |
<$0.01 |
Q: Does revoking an Approve cost gas?
Yes. A Revoke is an on-chain transaction, so it costs gas. But:
- Ethereum mainnet gas is relatively high ($5-30 per transaction)
- L2s and other chains have extremely low gas
Optimization tips:
- Revoke during low-congestion windows (late at night / weekends)
- Batch several revokes together to save time
- Prioritize revoking the highest-risk approvals first
V. A Standard Process for Auditing Approvals Regularly
Audit frequency:
| User type |
Suggested frequency |
| Active DeFi user (5+ interactions per week) |
Monthly |
| Moderate DeFi user (5-20 interactions per month) |
Every 3 months |
| Low-frequency DeFi user (<5 interactions per month) |
Every 6 months |
Audit steps:
Step 1: Connect your wallet to Revoke.cash
Step 2: Sort your approvals by risk
Rank by risk level:
- High risk: Unlimited approvals to unknown contracts
- Medium risk: Unlimited approvals to known protocols
- Low risk: Limited approvals to known protocols
Step 3: Revoke anything unnecessary
Guidelines for what to revoke:
- Revoke every approval to an unknown contract
- Revoke approvals to protocols you no longer use (e.g. no interaction in the past year)
- Keep approvals for protocols you actively rely on (e.g. Uniswap, Aave)
Step 4: Keep a record of the approvals you keep
Record for each approval you retain:
- Protocol name
- Contract address
- Approved amount
- What it's used for
Step 5: Verify after every audit
- After revoking, Revoke.cash should no longer list that approval
- Double check on Etherscan that allowance(user, spender) = 0
Q: Before revoking, how do you know whether a protocol is "known" and safe?
Ways to check:
- Protocol name: the label Revoke.cash shows (e.g. "Uniswap V3 Router")
- Contract address: search Etherscan to see whether the contract is verified and belongs to a mainstream protocol
- The protocol's DefiLlama page: check its TVL and how long it's been operating
- Official documentation: the contract address the project team has published
Any unrecognizable contract with an Unlimited approval is high risk — revoke it immediately.
VI. Managing Approvals Across Different Chains
Ethereum mainnet and EVM-compatible chains:
- Same mechanism: the ERC20 standard plus Approve / transferFrom
- Tools: Revoke.cash works everywhere
- Gas cost: Ethereum mainnet is the priciest, L2s / Polygon / BSC are cheap
Solana:
- A different mechanism: SPL tokens use a "token account" model
- No Approve / transferFrom: Solana instead relies on "signature-based authorization"
- Revoke tools: the built-in Revoke feature in Solscan / Phantom
Bitcoin:
- No smart contracts: BTC has no need for Approve
- Layer-2 networks like Lightning / Liquid: use a different mechanism entirely
Move-based chains (Sui / Aptos):
- A different mechanism: the Object model
- Requires a different revoke logic
Q: Is there Approve-style risk on Solana?
Yes. Solana's "signature-based authorization" carries similar risk:
- A phishing site has you sign a "Token Approval"
- Once signed, a malicious contract can pull your tokens
- Revoking has to be done through Solscan or your wallet directly
Common Solana phishing lures:
- "Free NFT Mint" pages
- "Solana airdrop" claim pages
- Fake copies of Jupiter / Raydium
The defensive principles are the same as on Ethereum.
VII. Best Practices for Managing Approvals
1. Approve a specific amount every time
Adjust the Approve prompt in MetaMask:
- When signing an Approve in MetaMask, change the default Unlimited to a specific amount
- For example: if you're trading 100 USDC, Approve exactly 100 USDC — not Unlimited
2. Separate your main wallet from your active wallet
- Main wallet (80% of assets): never Approve any contract
- Secondary wallet (20% of assets): everyday DeFi interactions
- Farming wallet (<1% of assets): high-risk experiments
3. Revoke stale protocol approvals
Audit every month:
- Revoke approvals for protocols you haven't touched in 6 months
- Revoke approvals for protocols that have been discontinued
- Revoke approvals tied to any suspicious domain (even ones that seemed legitimate at the time)
4. Watch out for "bundled signatures"
- Multiple Approve calls packed into one transaction
- Hard for you to tell what's actually being approved
- One signature can compromise everything at once
5. Use a signature-decoding tool
- Rabby Wallet: shows the real effect of a signature before you sign it
- Pocket Universe: paid, gives detailed decoding
- Wallet Guard: warns about phishing sites and risky signatures
Q: Can you revoke every Approve at once?
There's no "revoke everything" button:
- Each Approve is its own separate on-chain transaction
- You have to revoke them one by one
- Multiple revokes can be packed close together in time (but they're still separate transactions)
Some tools offer a batch "queue":
- Revoke.cash: select multiple approvals → sign each in sequence → each confirms on-chain
- Every single one still costs gas
VIII. A Special Case: NFT Approvals
NFTs have their own Approve mechanism too:
- setApprovalForAll: authorizes a contract to manage every NFT you hold in a given collection
- For example: listing an NFT on OpenSea requires setApprovalForAll to the OpenSea contract
The risk with NFT approvals:
- It's unlimited by nature: setApprovalForAll is "unlimited authorization over every NFT in that collection"
- If the marketplace gets hacked: after an OpenSea / Blur hack, every user's NFTs become withdrawable
- Phishing scenario: fake OpenSea / Blur sites trick users into calling setApprovalForAll
A real case:
In May 2024, a user signed setApprovalForAll on a fake OpenSea site, granting a malicious contract control over their BAYC NFT. The BAYC was immediately transferred to the attacker's address, a loss of roughly $120,000.
Revoking an NFT approval:
- Supported by Revoke.cash
- Supported by the Etherscan Token Approval Checker
- The process is similar to revoking an ERC20 Approve
Q: Do you have to approve to sell an NFT on OpenSea / Blur?
Yes. The major NFT marketplaces all require authorization before you can list:
- OpenSea: setApprovalForAll to the OpenSea contract
- Blur: setApprovalForAll to the Blur contract
- Magic Eden: setApprovalForAll to the Magic Eden contract
The safer habit:
- Revoke setApprovalForAll immediately after every sale
- Re-approve the next time you list something
- Inconvenient, but safer
IX. Frequently Asked Questions
Q: What's the minimum gas cost for a single Approve?
Standard Approve gas cost on Ethereum mainnet:
- A basic Approve: roughly 46,000 gas
- At a gas price of 30 Gwei: roughly $5
On L2s / Polygon / BSC an Approve usually costs under $1.
Q: Can a revoked Approve be reactivated?
No, not directly. Once revoked it's as if you'd never approved anything — you have to Approve again from scratch:
- Sign again, submit on-chain, and pay gas again
Q: Do all ERC20 tokens require Approve?
Yes. Every standard ERC20 token follows the Approve mechanism:
- Stablecoins like USDC / USDT / WETH / DAI
- Governance tokens like UNI / LINK / AAVE
- Any project's own token
Exceptions:
- ETH (Ethereum's native coin): no Approve needed (a direct transfer)
- BTC: no Approve needed (no smart contracts)
- Solana SPL: a different mechanism entirely ("signature-based authorization")
Q: Does an Approve lock up your tokens?
No. Approve does not lock tokens:
- Approve only "permits" a contract to withdraw them
- The tokens stay in your wallet and remain usable as normal
- You can transfer the tokens out at any time, even with an active Approve
An Approve is similar to a "credit card limit": you're giving a merchant a spending limit, but the money is still sitting in your own bank account.
Q: How do you revoke a Permit signature?
A Permit signature can't be directly "revoked," but there are indirect workarounds:
- Change the contract nonce: call the contract's incrementNonce function to invalidate the Permit
- Stop using that wallet: Permits have an expiration time and lapse automatically once expired
- Create a new wallet: move all your assets over entirely
The real key to Permit safety is prevention: read carefully before signing every Permit request.
Q: Is USDT approval risk the same as USDC?
Broadly similar, but with some differences in the details:
- USDT: you must call approve(spender, 0) before you can call approve(spender, X) — the standard ERC20 doesn't require this extra step
- USDC: a standard ERC20, plus Permit support (EIP-2612)
- DAI: earlier versions support Permit with their own unique implementation
Q: Can you look up a wallet's full approval history?
Yes:
- Etherscan: on the address page → "Token Txns" → filter for Approve
- Revoke.cash: shows currently active approvals (it does not show ones you've already revoked)
- DeBank: gives an address profile plus approval history
Q: Does revoking an Approve take effect immediately?
Yes. Once the Revoke confirms on-chain it takes effect right away:
- allowance(user, spender) drops to 0 on-chain immediately
- The contract can no longer call transferFrom
- The change propagates across the network (5-30 seconds)
Q: Can you revoke approvals across multiple wallets at once?
No. Every wallet is independent:
- Each wallet has to be connected to Revoke.cash separately
- Its list of approvals has to be audited separately
- Its approvals have to be revoked separately
For users with multiple wallets: audit each wallet separately every month.
Data Sources
- The ERC20 standard (EIP-20)
- The EIP-2612 Permit standard
- Revoke.cash documentation
- SlowMist's compiled Approve phishing case studies
- Chainalysis on-chain incident analysis
Risk disclaimer: This article is an independent third-party summary and does not constitute investment advice. Approve remains the leading attack vector in DeFi, and regular auditing and revoking are basic security practices. All data is as of April 2026.