Understanding Token Approvals in DeFi
A token approval is a standing, on-chain permission that lets a smart contract move a specific token out of your wallet, and it stays active until you explicitly revoke it. That means an approval you granted years ago can still be live today, including for contracts that have since been upgraded, abandoned, or compromised. This article explains why unlimited approvals are a standing risk, how to audit and revoke the ones you no longer need, and how signed intents keep new approvals from piling up in the first place.
TL;DR
- A token approval is a standing on-chain permission that survives indefinitely.
- 60% of approval transactions are unlimited, leaving 22% of users at high risk.
- Approvals don't expire when you disconnect your wallet or stop using a protocol.
- Auditing and revoking old approvals is sound hygiene, but it treats the symptom.
- Scoped, expiring EIP-2612 signatures keep your approval count from growing with each trade.
What a token approval actually grants
When you approve a token for a protocol, you're calling the ERC-20 approve() function. That function registers a specific address (the spender) as permitted to transfer tokens out of your wallet. Per the Ethereum ERC-20 standard, the approve function "allows spender to withdraw from your account multiple times, up to the value amount."
"Multiple times" is the operative phrase. You're not authorizing a single transaction. You're delegating a capability the spender can exercise at any point in the future, without asking again.
The permission sits on-chain until you explicitly revoke it. The spender needs no further action from you.
Why unlimited approvals are the risk hiding in your wallet
You control the approval amount, but most protocols don't give you that choice. They request the maximum possible value, known as an unlimited approval. This avoids a new approval transaction every time you interact. The convenience saves gas. The trade-off is that the protocol can pull your entire balance of that token at any time.
Unlimited approvals account for 60% of all analyzed transactions (15.2 million out of 25.4 million), and the same dataset found 22% of users carry a high risk of token theft from excessive allowances.
Exploiting an unlimited approval is relatively straightforward once the permission is granted. Fireblocks' 2025 report documents the consequence: "the attacker no longer requires any further interaction with you in order to drain these funds." The contract can pull your tokens weeks or months later. Nothing you do triggers it.
Approvals don't expire: the permissions you forgot you gave
Closing your browser or disconnecting a wallet doesn't kill an approval. Because the permission lives on-chain, not in your active session, it survives even if you never visit the dApp again.
That gap matters because users rarely revisit their approval list. Just 17.6% of DeFi scam victims regularly checked their token approvals after being exploited, according to a 2025 Georgia Tech study. Twenty-six percent took no action at all.
A wallet active for two or three years likely carries dozens of standing approvals. Many point to contracts that have been upgraded or abandoned. Per the CoW Protocol SDK, a compromised approved contract puts all your tokens at risk. The protocol doesn't need to be running for the approval to remain exploitable.
How to audit and revoke approvals you no longer need
Auditing approvals shrinks your attack surface. It won't stop new permissions from accumulating, but it closes the doors you've already left open:
- Connect your wallet to Revoke.cash or Etherscan's token approval checker. Both scan your address and show every spender contract with a standing allowance, the approved amount, and the last activity date.
- Assess which approvals are still doing work. If you rely on an approval for a recurring position or active limit order, leave it. If you haven't touched the protocol in months, treat that entry as a liability.
- Revoke everything else. Each revocation sets the approved amount to zero via an on-chain transaction. On Ethereum mainnet the gas cost can be meaningful; on L2s it drops substantially.
Auditing and revoking approvals is a sound habit and part of any solid DeFi security routine. But it's maintenance, not prevention. Revoke today, and the list starts rebuilding the moment you interact with a new protocol.
Approve once, then trade with signed intents instead of per-trade permissions
The structural problem with legacy approvals
Every time you interact with a new protocol using the legacy approve() model, you add another entry to your approval ledger. After a year of active DeFi use, that ledger holds approvals to contracts that may have changed hands or been patched. Some have accumulated years of unreviewed code changes. Revocation clears entries; it doesn't stop new ones from forming.
How EIP-2612 changes the model
By using EIP-2612, you grant one on-chain approval to a shared contract. After that, every individual trade is authorized through a gasless off-chain signature. Each signature is scoped to a token, an amount, and an expiry. The EIP-2612 contract validates the signature and executes the transfer.
The result: your on-chain approval count stops growing with each new protocol interaction. EIP-2612 is now the default approval layer for most major DEX and wallet flows, per a 2026 industry guide. It cuts both gas costs and the risk of deceptive signature requests for ERC-20 spends.
CoW Swap's implementation
CoW Swap builds on this model through its gasless approvals feature. For over 150 tokens, the approval and swap run in a single flow. EIP-2612 removes the separate on-chain approval transaction. You sign once, and the intent goes to competing solvers who settle the trade. The scoped permission expires after the trade rather than sitting open indefinitely.
The honest trade-off
Signature-based flows reduce the number of on-chain approvals, but they introduce a different risk. An off-chain EIP-2612 signature that looks like a routine wallet pop-up can grant a scoped but real permission if you sign something malicious. Off-chain messages are also harder for most wallets to display in readable form, which means the social engineering risk shifts rather than disappears. EIP-2612 creates a smaller attack surface than unlimited on-chain approvals, but reading what you sign remains non-negotiable.
Why gasless, off-chain orders reduce your total on-chain permissions
Because trades route through signed intents, your on-chain approval count stays flat. It doesn't climb with each new protocol you touch. You aren't granting a new spender contract access to your tokens every time you try a new pool or protocol.
CoW Hooks extend this further. Pre-hooks let you bundle a scoped approval directly with your swap intent, so the approval and trade happen atomically in one operation. Per CoW Hooks documentation, pre-hooks sign approvals before a trade and post-hooks handle bridging or staking afterward. All of it runs within a single intent. Nothing lingers.
There's also a monitoring benefit. Because every DeFi action, including approvals, appears on-chain, a shorter approval list is a more legible one. A suspicious contract call is easier to catch when you're reviewing 4 active approvals than when you're scanning through 40.
Trade with fewer on-chain permissions on CoW Swap
For individual traders
CoW Swap applies this intent-based model to over 150 tokens through EIP-2612. The first time you trade a supported token, you sign an off-chain message instead of submitting an on-chain approval transaction. That permission is scoped to the trade and expires once it settles. No standing unlimited allowance accumulates on the protocol's contract.
For tokens not yet covered by gasless approvals, CoW Protocol routes to the vault relayer contract. That's a single shared endpoint, not a new spender contract per protocol. Your approval list stays shorter over time either way.
For DAOs and treasury holders
As a DAO or treasury holder, you face the same approval risks as retail traders, but at a scale where a single misstep affects much more. CoW's Milkman contract - a Yearn-built contract funded through the CoW DAO Grants program - addresses a risk unique to your organization. A governance vote to sell $20 million in treasury tokens is public before it executes, which invites front-running.
Milkman uses delayed execution: the trade is approved once, then executes only when price conditions are met, preventing bots from acting on a known intent. Aave and ENS have together moved over $20M through Milkman", per CoW Protocol's documentation.
ENS executed a $15 million treasury swap via CoW Swap. The selection criteria included minimal slippage and MEV protection, both properties of the intent-based, solver-competition model. No expanded on-chain approval footprint was required to execute at that scale.
Why a shorter approval list is safer by default
Only 0.2% of users approve exact amounts and revoke promptly after every trade, so the more useful target is a trading workflow that makes the problem smaller by default. Every time you use scoped, expiring signatures instead of standing on-chain allowances, your approval list stays flat instead of accumulating open permissions. That is the structural fix: a workflow that rarely needs revocation in the first place.
FAQs about defi token approvals
Does disconnecting my wallet revoke token approvals?
No, disconnecting your wallet only terminates the active session between your interface and the dApp. Because token approvals are recorded on-chain in the smart contract's state, the permission remains active and exploitable until you submit a specific revocation transaction to the blockchain.
What happens to my limit orders if I revoke an approval?
Revoking an approval for a specific token will cause any active limit orders or recurring positions relying on that token to fail. The protocol’s smart contract will no longer have the required permission to pull funds from your wallet when your price target is hit, effectively canceling the trade's ability to execute.
How do I tell if a EIP-2612 signature request is malicious?
Legitimate EIP-2612 requests use the EIP-712 standard to show human-readable details, including the specific token, exact amount, and an expiration timestamp. If a wallet prompt shows a raw, unreadable hex string or requests an unlimited duration for a single trade, it is likely a phishing attempt designed to drain your assets.
Which tokens does CoW Swap support for gasless approvals?
CoW Swap supports over 150 tokens for gasless approvals, including major assets like DAI, GNO, and various liquid staking tokens. For tokens that do not support the EIP-2612 permit standard, the protocol routes through a vault relayer to minimize the number of unique spender contracts you must approve.
Is it worth the gas cost to revoke an approval for a small balance?
If the gas cost to revoke exceeds the value of the tokens at risk, it may not make economic sense to revoke immediately. However, since unlimited approvals cover your entire future balance of that token, you should revoke any permission to a compromised or unverified contract regardless of your current holdings to protect future deposits.

