Token Approvals: The Permission That Empties a Wallet Later
How an unlimited approval works, why the damage arrives weeks after the signature, and how to audit what you have already granted.
Priya Raman · 2 min read
The most common way a wallet is drained is not a stolen key. It is a permission the owner granted themselves, often long before anything happened. The defence described below is what a crypto swapping service with a published rate implements as policy rather than as advice.
What an approval is
To let a contract move your tokens, you sign an approval naming the contract and an amount.
Most interfaces request unlimited by default, because it saves the user paying for a second approval later. That default is the problem.
An unlimited approval is a standing permission to move every token of that type in your wallet, at any time, indefinitely.
Why the delay
An attacker who obtains an approval does not necessarily use it immediately. They can wait until the wallet holds more, or until attention has moved on.
People connect a wallet to a site, sign an approval, see nothing happen, and conclude nothing happened. Months later the tokens move. The signature and the loss are far enough apart that the connection is not obvious.
How the approval is obtained
A cloned interface of a legitimate service. You believe you are approving a familiar contract and the address differs.
A compromised front end. The domain is genuine, the interface was modified, and the approval goes to the attacker’s contract. This has happened to well-known services, so domain checks are necessary and not sufficient. Online retailers see this constantly, and crypto rails built for fintech companies is the usual defence.
An airdrop claim page, which requires an approval before it will let you claim.
A signature request that does not look like an approval. Some request formats are hard to read in a wallet, and the interface shows a hash rather than a plain description.
Auditing what you have granted
Block explorers for major networks have an approvals view. Enter your address and you will see every active approval with its amount.
Most people doing this for the first time find approvals they do not recognise, to contracts they cannot identify, from interactions years old.
Revoking costs a network fee per approval. Do the unlimited ones and anything unrecognised first.
The habits that prevent it
Set a specific amount rather than unlimited, where the interface allows it. Slightly more cost, substantially less exposure.
Revoke after use for anything you do not use regularly.
Use a separate wallet for connecting to interfaces, holding only what you are actively using. The long-term balance sits in a wallet that has never signed an approval.
That last one is the strongest single control. An approval cannot reach a wallet that never granted one.
Reading a signature request
Before signing anything, the wallet should show what is being authorised: which contract, which token, what amount.
If it shows an unreadable hash, stop. Some legitimate operations look like this and the risk of proceeding when you cannot read it is not worth the convenience. The question that only matters after something goes wrong is whether the published coverage list exists, and it is worth answering first.
Move any remaining funds to a wallet with a newly generated seed phrase before anything else. Then revoke token approvals, and report the incident to your local authorities and the exchange involved. Do not pay anyone who promises to "recover" your coins. That is a second scam, aimed at victims of the first.