Token Already Approved? Why DApps Still Ask for Approval: Checking Allowance, Spender, and Permit2

 / 
3

The object you approved before is likely not the contract of the DApp you are currently using. In the Permit2 flow, you approve the Permit2 intermediary contract, and each transaction requires an additional off-chain signature. If this signature is missing, expired, or rejected, the DApp will prompt you for approval again.

OKX Exchange
A leading global cryptocurrency platform,suitable for both beginners and experienced traders.
New user benefit: 20% off trading fees upon registration!!

First, identify which type of approval you are dealing with

There are two models for on-chain token approvals, which determine why you are repeatedly asked to approve.

Traditional model: Direct approval to the DApp's contract. You confirm an approve transaction in your wallet, granting a token allowance to the DApp's spender address. This approval is recorded on-chain. As long as the allowance is not used up or revoked, the same contract of the same DApp will not require you to approve again. This usually applies if you are using an older version of Uniswap's interface or some DApps that have not integrated Permit2.

Permit2 model: Approval to an intermediary contract, with a signature required for each transaction. This is the flow currently used by Uniswap, PancakeSwap, and many aggregators. You first need to make an on-chain transaction to approve a token allowance to the Permit2 contract (usually a fixed canonical contract address). After that, for each actual swap, you no longer need an on-chain approval. Instead, you sign an off-chain Permit2 message specifying the amount to be used for this transaction, the spender, and the expiration time.

If you have already approved Permit2, but the DApp still asks you to "approve," first check whether the popup is an on-chain transaction or a signature request. If it is a signature, it means you are already in the Permit2 flow, and the issue likely lies with the signature itself.

Several real reasons why you are asked to "approve again"

You previously approved Permit2, but this transaction requires a valid Permit2 signature. Permit2 signatures are not permanently valid. Uniswap's documentation clearly states that if you obtained a Permit2 signature with an earlier quote and later initiate a swap with a new quote, the old signature may have expired, especially when using the UniswapX route where signatures have a shorter validity period. The DApp needs you to sign a new message that matches the current transaction. In this case, the "approval" prompt is essentially asking for a signature, not asking you to spend gas on another on-chain approval.

You modified the amount during the signature step, causing the process to fail. This is a specific issue documented in Superform's help center: In the Permit2 flow, the first step requires you to make an on-chain approval of unlimited allowance to the Permit2 contract. If you manually reduce the unlimited allowance in the wallet popup, the DApp will consider the approval invalid and ask you to re-approve until you accept the default unlimited allowance.

You previously approved a different spender, not the contract used by the current DApp. Token approval is a combination of "token + spender." Approving Uniswap's Universal Router does not mean that 1inch or another aggregator can use that allowance. Even for the same DApp, if it upgrades its contract address, the old approval is not inherited by the new contract. When the DApp detects that the current spender does not have sufficient allowance, it will prompt a new approval request.

The old allowance has been used up. If you chose an exact amount for your first approval (for example, 500 USDC), the allowance goes to zero after it is used. The next transaction will require a new approval. An unlimited allowance avoids this issue, but it comes at the cost of taking on unlimited risk.

The DApp did not correctly check existing approvals. Argent's support documentation mentions that sometimes DApps do not correctly detect existing token allowances and still prompt for approval. This is uncommon, but if you have confirmed on-chain that there is sufficient allowance for the correct spender, you can try reopening the DApp in an incognito window to avoid errors caused by caching.

How to check what you have actually approved

Method 1: Check on-chain records using a block explorer. Paste your wallet address into the block explorer for the corresponding chain (Etherscan for Ethereum, BscScan for BSC) and look at the token approvals or ERC-20 approvals page. If you are using Permit2, checking the regular approvals page might not show all the information, because Permit2 records the relationship between specific spenders and allowances in its own contract. You need to call the Permit2's allowance(user, token, spender) method to read the specific values.

Method 2: Use Revoke.cash or MetaMask Portfolio's Spending Caps page. MetaMask Portfolio provides a Spending Caps tab on supported networks, allowing you to view and revoke existing allowances directly. Revoke.cash is also a commonly used third-party tool that lists approvals on your address. However, note that its listing of Permit2 approvals might show an unlimited allowance to the Permit2 contract. This is how Permit2 works and does not necessarily mean risk is out of control, because the actual allowance each DApp can use is still limited by the internal records of Permit2.

How to judge if an approval is "unnecessary": If the spender is a DApp contract you no longer use, or the allowance is unlimited and you no longer plan to interact with that DApp, consider revoking it. Revoking is simply sending an on-chain transaction to set the corresponding allowance to 0.

What happens if the Permit2 signature is rejected or skipped

The Permit2 signature is off-chain and does not consume gas, but it is the key to whether the transaction can be executed. If you reject the signature in your wallet, or the DApp's /swap request does not include a valid signature, the swap will fail. Uniswap's documentation lists "skipping the Permit2 signature step" as a common misunderstanding: In the classic flow, you can swap directly after approval. But in the Permit2 flow, approval only gives the Permit2 contract a base allowance. The actual transaction still requires the message you sign to specify how much to use this time.

If you see a "signature request" instead of an "approval transaction" in MetaMask, carefully read the content in the popup. Newer versions of MetaMask have improved the readability of Permit and Permit2 signatures, displaying clearer approval information. If the signature request looks suspicious—for example, it comes from a website you don't recognize, or it asks for approval of a token you did not intend to trade—just reject it.

When to revoke and when not to

Permit2's design includes some built-in protection: signatures have a time limit, nonces prevent reuse, and the on-chain unlimited approval to the Permit2 contract is shared infrastructure. Multiple protocols reuse the same approval, reducing the number of repeated approvals. If your operations complete normally without errors, you usually do not need to do anything extra.

Situations that require proactive checking include: you signed an approval on a website but no longer use it; or you visited a dubious website and signed something. The latter case requires special vigilance, because the hallmark of Permit2 phishing attacks is tricking users into signing an off-chain message. Users think it is just a "login confirmation," but in reality, they have authorized an asset transfer. Because there is no on-chain transaction record, users often do not notice immediately. To check, see if any unfamiliar spender has been granted an allowance on Revoke.cash or a block explorer.

Check before you act: Before confirming any approval or signature, check whether the spender address shown in the wallet popup matches the contract address officially published by the DApp. The canonical contract address for Permit2 is public, but the actual spender called by the DApp (such as Universal Router) varies. Do not confirm if they do not match.

OKX Exchange
A leading global cryptocurrency platform,suitable for both beginners and experienced traders.
New user benefit: 20% off trading fees upon registration!!

References

  1. Superform Help Center·Can't proceed with the transaction after signing the approval, page published or updated: 2025-12-10; checked: 2026-09-26.
  2. Uniswap Developers·Permit2 Approval, page published or updated: 2026-09-02; checked: 2026-09-26.
  3. PancakeSwap Developer·Introduction, page published or updated: 2026-06-22; checked: 2026-09-26.
  4. Argent Support·Pre-authorization on Ethereum in WalletConnect, page published or updated: 2025-04-13; checked: 2026-09-26.
  5. MetaMask·What are token approvals | How crypto permissions work and how to revoke them, page published or updated: 2026-07-09; checked: 2026-09-26.
  6. ShapeShift·Approvals & Allowances, page published or updated: 2025-10-15; checked: 2026-09-26.
  7. Uniswap Developers·Allowance Transfer, page published or updated: 2026-08-24; checked: 2026-09-26.
  8. PancakeSwap Developer·Revoking Permit2 approval, page published or updated: 2026-04-23; checked: 2026-09-26.
  9. MetaMask Help Center·How to manage spending caps in MetaMask Portfolio, page undated; checked: 2026-09-26.
  10. Foresight News·Permit2 related news, page published or updated: 2024-10-13; checked: 2026-09-26.