Token Approval Risks: What You Are Really Signing
Every time you interact with a DeFi protocol, you grant token approvals. Many users have unlimited approvals active on contracts they used once. How to audit and revoke risky permissions.
Every time you interact with a DeFi protocol, you grant it permission to spend your tokens. Most users grant unlimited approvals without knowing it. Those approvals persist indefinitely. An exploit on the approved contract months later can drain your tokens - no new signature required. This article covers how approvals work, what unlimited approvals mean in practice, and how to audit and reduce your exposure.
How Token Approvals Work
ERC-20 tokens use a two-step model for DEX interactions. First, you approve the DEX contract to spend a specific amount of your token. Then, the DEX uses that allowance to execute the trade on your behalf. This design lets the DEX contract pull tokens from your wallet directly rather than requiring you to send tokens to the contract first - which enables atomic swaps and composable DeFi interactions.
The approval is stored in the token contract itself, not in the DEX. Calling the ERC-20 allowance(owner, spender)function returns the current approved amount for any address pair. You can check Etherscan's “Token Approvals” tab for your address to see all active approvals on any ERC-20 token you hold.
The approval does not expire automatically. It stays active until you revoke it or until it's consumed by a transaction that depletes the allowance. Unlimited approvals - the type most protocols request - never deplete from use.
Why Protocols Request Unlimited Approvals
Requesting an unlimited approval (the maximum uint256 value: 115,792,089,237,316,195,423,570,985,008,687,907,853,269,984,665,640,564,039,457,584,007,913,129,639,935) is a UX decision, not a security one. If the protocol only approved the exact amount for each swap, every future swap would require an additional approval transaction, costing extra gas and requiring two confirmations instead of one. Most protocols request unlimited approval once, then execute subsequent swaps without additional approvals.
This is fine for the protocol in normal operation. The problem is the residual approval. After you stop using a protocol, the unlimited approval to its contract remains active. If that contract is later exploited, upgraded with malicious code, or compromised through an admin key, the attacker can use your existing approval to transfer all tokens you hold - up to your current balance - without any action from you.
The Badger DAO Attack: $120M from Token Approvals
What setApprovalForAll Means for NFTs
NFTs use a different approval model. The ERC-721 and ERC-1155 standards include setApprovalForAll(operator, approved), which grants a contract permission to transfer any token from a given collection that you own - not just a specific token. This is used legitimately by NFT marketplaces (you approve OpenSea to transfer your NFTs when they sell).
Phishing sites exploit this. A malicious site presents a “mint” or “claim” transaction that is actually a setApprovalForAllcall granting the attacker's contract permission to transfer your entire NFT collection. Once approved, the attacker can transfer your NFTs instantly without further interaction from you. This is how most high-value NFT phishing drains work.
Your wallet will display the setApprovalForAll request. If you see this in a transaction from a site that claimed to be offering a mint or airdrop, reject it. Legitimate mints usemint() functions, not approval grants.
How to Audit Your Current Approvals
Three tools let you review and revoke token approvals across different chains:
Revoke.cash
The most widely used approval manager. Connect your wallet or paste your address (read-only mode requires no wallet connection). Revoke.cash shows all ERC-20 approvals and NFT approvals for your address on Ethereum mainnet and dozens of other chains. Each approval shows the spender contract, the approved amount, and a revoke button. The tool is open source (github.com/RevokeCash/revoke.cash).
Etherscan Token Approvals
Etherscan's “Token Approvals” page (etherscan.io/tokenapprovalchecker) shows all ERC-20 approvals for a given address on Ethereum. It's more limited than Revoke.cash (Ethereum only, no NFT approvals) but requires no additional tool installation and uses Etherscan's verified contract labels to help identify known spenders.
De.Fi Shield
De.Fi Shield (de.fi) provides approval management with risk scoring. It flags approvals to contracts that have been exploited or flagged by security researchers, adding context beyond the raw approval list. Useful for identifying historical approvals where the context isn't obvious from the contract address alone.
Revoking Approvals
Revocation is an on-chain transaction that sets the approved amount to zero. It costs gas - typically a small amount, but it's not free. If you have many approvals to revoke, batch revocation tools (available in Revoke.cash) let you revoke multiple approvals in a single transaction, reducing total gas cost.
Priority for revocation: unlimited approvals to contracts you no longer use, any approval to a contract that has been exploited or is otherwise flagged, and setApprovalForAllgrants to any contract you didn't knowingly authorize for your entire NFT collection.
Active approvals to protocols you use regularly (Uniswap, Aave, Curve, etc.) can be left in place if the amount is reasonable for your use. Revoking them means re-approving next time you use the protocol, which costs additional gas. The risk calculation depends on your assessment of the protocol's ongoing security.
EIP-2612 Permit: A Different Approval Model
Reducing Approval Risk Going Forward
When a protocol requests an unlimited approval, you can manually set a lower amount. MetaMask and Rabby both let you edit the approval amount before confirming. Setting the approval to exactly the amount needed for the current transaction means the approval is consumed in one use - subsequent transactions require new approvals, but your exposure window is minimal.
The gas cost of extra approvals is real. For protocols you use frequently with tokens you hold in small amounts, the risk of an ongoing unlimited approval may be acceptable. For large holdings or infrequent protocol use, setting exact-amount approvals is a meaningful risk reduction.
Rabby wallet automatically suggests limiting approvals and shows the implications of each approval request before you confirm. For active DeFi users, Rabby's pre-approval display reduces the likelihood of unknowingly granting excessive permissions.
Approval Hygiene Routine
setApprovalForAllgrants you don't recognize. This 15-minute monthly habit eliminates the largest category of DeFi losses that aren't direct exploits.