ERC-20 Approval Fees: Why Uniswap Asks You to Confirm Twice
The two-pop-up question
Here's a genuinely confusing moment for anyone's first DeFi transaction: you go to swap a token on Uniswap, and instead of one confirmation you get two. The first says "Approve" and the second says "Swap." Most people either blindly approve both or freeze up, wondering if they're about to get scammed. Neither reaction is quite right.
The approval is normal, it's necessary, and it costs gas every time. It's also one of the most important things to understand in DeFi — both because it's money and because it's the single biggest security lever you control. Let me explain what it is and what it actually costs.
What an approval actually is
ERC-20 tokens (USDC, UNI, nearly everything) follow a rule: your tokens can only move when you send them. A smart contract like Uniswap can't just reach into your wallet and take your USDC to complete your swap — it needs permission first. The approval transaction is you signing that permission: "I allow the Uniswap contract to move up to X amount of this token."
That's why it's separate from the swap and why it comes first. Once you've approved, the swap contract can pull the funds and complete the trade in one go. Each new token you trade with a new contract needs its own approval — approve USDC once for Uniswap and you're set for future Uniswap trades with USDC, but using USDC on a different protocol means approving it again for that protocol.
What the approval costs
It's a transaction like any other, so it costs gas. The numbers across chains:
- Ethereum mainnet: $5 to $20 depending on congestion. This is why mainnet DeFi feels like you're being nickel-and-dimed at a hundred times the rate.
- Base: $0.01 to $0.05 typically.
- Arbitrum: $0.05 to $0.30, drifting up with mainnet gwei.
On L2 the approval is a rounding error — and that matters, because on mainnet the approval cost often discourages people from trying new protocols at all. On Base I'll approve a token I'm mildly curious about because the cost is invisible. The live tracker shows whether you're in a cheap window before you click.
Limited vs infinite approval
When you approve, wallets usually default to "infinite" approval — the contract can spend an unlimited amount of that token forever. It's convenient: one approval and you never see the prompt again for that token/protocol pair. But it's also the security risk behind most DeFi wallet drains. If that contract is ever exploited or upgraded maliciously, an infinite approval gives it standing access to that token in your wallet.
The safer alternative is a limited approval for just the amount you're about to trade. The trade-off, honestly: you'll approve again next session, paying the small gas cost each time. On mainnet that cost was punitive; on L2 it's cents, which flips the recommendation. I now use limited approvals for anything I'm not sure about, and I only leave infinite approvals on the handful of battle-tested contracts I use constantly. On Base, the extra approvals cost practically nothing — the Base saving guide covers the exact habit.
The free path: permit signatures
There's a newer standard that makes the approval free in gas. It's called a permit, and tokens that support it (and protocols like Uniswap using Permit2) let you approve with a signed message instead of a transaction. A signature costs no gas — it's the same as you see when you sign a login. The approval and the swap get bundled so you only ever send one on-chain transaction.
If MetaMask shows you a "Sign" request rather than a full "Confirm" transaction for an approval, you're on the free path — take it. It's a nice touch that's quietly saved a lot of people a few cents per trade and, more usefully, fewer transactions to keep track of.
The takeaway before you sign
So when the two prompts appear: the approval is legitimate permission-setting, it costs a little gas (almost nothing on Base/Arbitrum), and whether you choose limited or infinite is a real security choice. My rules are simple — approve only the protocol you're actively using, prefer limited approvals for new or small protocols, and don't think of it as a tax but as the cost of keeping your tokens under your own control.
That self-custody is the point: the same approval system that asks you twice is what keeps a bad protocol from touching your USDC in the first place. For the broader cost picture across DeFi, the Uniswap fee breakdown and the Base gas calculator give you the live numbers. Approve consciously — but don't stress about the gas anymore, because on L2 there's barely any.