Wallets
Revoke token approvals, step by step
What an ERC-20 approval and a permit signature allow, how to set the allowance back to zero, and what a revoke does not undo.
An approval is a blank-ish check
An ERC-20 approval does not send your tokens. It records that some other address, the spender, may call transferFrom and pull up to a chosen amount. Decentralized exchanges use that so a swap contract can take the tokens you are selling. The same permission is what a drainer wants. The page that asked you to 'connect and sign' was often asking for an approval, a permit, or setApprovalForAll, not for a simple login.
The allowance lives in the token contract, in a mapping from your address to the spender. It stays there until a later transaction changes it, or until the spender uses it up. Closing the browser tab does not clear it. Disconnecting the site in the wallet does not clear it. Disconnect only stops that site from requesting new signatures. The old allowance is still on chain.
Unlimited approvals are common because routers ask for the maximum integer so you do not approve again on the next swap. Unlimited means the spender can pull the entire balance of that token, including tokens you receive later, until you revoke. A limited approval is smaller. It is not harmless if the amount is your whole balance.
Permit signatures and NFT operators
EIP-2612 added permit: a signed message that sets an allowance without a separate approval transaction. You pay no gas for the signature. The spender, or anyone who holds that signature, can submit it and receive the allowance. Drainers like permits because the wallet popup looks like a login. Read the wallet's typed data. If the fields include a spender and a value, it is an approval whether or not the page called it a signature check.
NFTs use a different switch. setApprovalForAll grants an operator the right to move every token in that collection from your address. One signature covers the collection, not one item. Revoking that operator is a separate call from an ERC-20 revoke. A token approval checker that only lists ERC-20 allowances will not show it.
This site's checker does not list your allowances. It does not connect a wallet. Paste a token address there only to read the contract you are about to trust with a new approval. The drainer note is the short version of why the signature is the theft. This page is the cleanup.
Where to read the list
On Ethereum, Etherscan publishes a token approval checker at etherscan.io/tokenapprovalchecker. Type that host yourself. The same company style of page exists on the explorers for BNB Chain, Base, Arbitrum, and Polygon. You paste the address that holds the tokens, or you connect a wallet. Connecting is a convenience. If you are already worried the browser is compromised, read the list by pasting the public address and send the revoke from a different device, or from a hardware wallet.
A public revoke site such as revoke.cash shows allowances and will build the transaction that sets them to zero. This guide has not audited that site. Treat it like any other web app that asks a wallet to sign: type the domain, check the transaction is a call to the token you expect, and reject anything that asks for a seed phrase. A link in the same chat that scammed you is the wrong way to open any of these tools.
The transaction you want, for an ERC-20, is approve with the spender set to the address you are removing and the amount set to zero. Some interfaces label it Revoke. The token contract is the 'to' address of the transaction. The spender is a parameter. If the wallet preview cannot show those fields, stop and use an interface that can, or a hardware wallet screen that shows the call.
USDT and other tokens that refuse a sloppy approve
Canonical Ethereum USDT, 0xdAC17F958D2ee523a2206206994597C13D831ec7, does not follow the later ERC-20 habit of letting you overwrite a non-zero allowance with another non-zero allowance in one call. If a revoke or a new approval fails, the usual reason on that contract is that the current allowance is already non-zero and the new amount is also non-zero. Set the allowance to zero first. Wait for that transaction. Then set the new amount if you still want the spender. That quirk is specific to that contract's approve. It is not a sign that the explorer is broken.
A failed revoke is not a successful revoke. Read the transaction status on the explorer. A pending transaction has not changed the allowance. A reverted transaction has not changed it either. The allowance function on the token, read from the contract tab, is the state that matters: your address, the spender, and the number that comes back.
Some tokens take a fee on transfer, or block transfers to the zero address, and still allow approve. Do not confuse a burn with a revoke. Sending tokens to the dead address moves the balance. It does not remove a spender. If the spender is already approved, they can pull what remains.
A worked sequence
You used a swap site once. The wallet asked you to approve a router. You confirmed. Months later the router is still approved for an unlimited amount of that token. Nothing bad has happened. The permission is still sitting there. The cleanup is one transaction per token-spender pair, plus gas.
Gas is the cost of the revoke. It is paid in the chain's native coin, to the network, not to the token project. If the address has no ETH on Ethereum, the revoke cannot be sent until you add a little. Do not buy that ETH from a stranger who offers to 'activate' the wallet. Buy or transfer it the ordinary way, then revoke.
If the drainer already pulled the tokens, a revoke stops a further pull of anything that arrives later. It does not return what left. Moving the remaining coins to a new address is still worth doing when the old address has a crowd of unlimited approvals you do not recognize. A new address has an empty allowance list. The old address keeps its list until you clear it.
- Write down the address that holds the tokens. You only need the public address.
- Open the explorer's approval checker by typing the host. Reject any page that asks for a seed phrase.
- For each spender you do not actively use, build a revoke: the token contract, that spender, amount zero.
- Read the wallet preview. The contract you are calling should be the token, not a random claim site.
- Send it. On Ethereum USDT, if a non-zero allowance will not change, set it to zero in its own transaction first.
- Reload the allowance. Zero means that spender can no longer pull that token. Other spenders, and other tokens, are separate rows.
- You revoked spenders you do not remember, not only the one a banner told you about.
- You checked setApprovalForAll if you hold NFTs in the same address.
- You did not type a seed phrase into the revoke site.
- You treated a permit you already signed as an allowance that may already be set. Revoke the resulting allowance.
- You did not pay a recovery service. A revoke is a public transaction you can send yourself.
- If the seed phrase was typed into a website, you are past the point where revoke is enough. Move funds to a new phrase. The old key can sign a new approval.
Solana is a different object
Solana tokens do not use the ERC-20 allowance mapping. An SPL token account can have a delegate, set with approve, who may transfer up to an amount. Revoke clears that delegate. Token accounts can also be closed by their close authority. Those are different rights from an Ethereum approval, and an Ethereum approval checker will not show them.
The habit is the same. Read the token account on a Solana explorer you typed yourself. If a delegate is set and you did not mean to set one, revoke it from a wallet you trust, such as the Phantom or Solflare profile's app, and confirm the transaction on the screen. A site that says it must hold the delegate 'so the airdrop can land' is asking for the ability to move the tokens.
Questions
Does disconnecting a site revoke its approval?
No. Disconnect stops the site from requesting new signatures in that browser. The allowance is stored in the token contract. Only a transaction that sets it back can remove it.
I revoked and the tokens are still missing. Did it fail?
A revoke does not pull tokens back. It stops a spender from taking more. If the transfer already confirmed, the tokens are in the spender's control. Check the transfer on the explorer before you pay anyone who claims they can reverse it.
Is an unlimited approval always a scam?
No. Many legitimate routers request the maximum so a later swap does not need another approval. The risk is that the spender can take the balance later. Limit the amount when the interface lets you, and revoke routers you no longer use.
The wallet warned me and I signed anyway. Now what?
Revoke that spender for every token you can see, from a tool you opened yourself. If the signature was a seed phrase, or the wallet you used is on a machine you no longer trust, create a new wallet and move the remaining funds. Do not reuse the phrase.
Will the checker on this site revoke for me?
No. The checker reads public risk data for a contract address. It never asks for a wallet connection, and it cannot change an allowance.