Swapping

What happens when you hit Swap — where your fill comes from, what the numbers in the widget mean, and what actually protects you.

Where your fill comes from

Between trades, the pool's capital sits in lending vaults earning yield — the pool itself holds almost nothing. The moment you swap, the pool withdraws exactly what your trade needs, places it as concentrated liquidity around the current price, fills you, and puts everything back to earning. All of that happens inside your one transaction; you see a normal swap.

Because the liquidity concentrates tightly at the peg for your trade, quotes near 1:1 are deep for the pool's size, and the fee on the live USDC/USDT pool is 0.001% — a tenth of a basis point.

Reading the widget

  • You pay / You receive. Type in either field. Typing what you want to receive switches to exact-output mode: the pay side becomes the estimate, and your bound becomes a cap on what you spend.
  • The “indicative” tag. Whichever side you didn't type is an estimate from the pool's quoter. It refreshes continuously, but the chain has the final word — the estimate is never what's enforced.
  • Min received / Max sent. This is the enforced number, computed from your slippage setting. If the pool can't do at least this well, the transaction reverts and you keep your tokens.
  • Price impact. How far your trade size pushes the price beyond the fee. Small near the peg; grows with size.

Approvals, the first time

Your first swap in each token sets up two things: a one-time token approval to Permit2 (Uniswap's shared allowance contract), and a signed 30-day permit that rides along inside the swap transaction itself. After that, swaps are a single transaction with nothing extra to sign. The widget shows each step as it happens — and if you're swapping USDT, its reset-to-zero approval quirk is handled for you.

Gas

A DualPool swap does more onchain work than a vanilla swap — the vault withdrawal, the temporary liquidity, and the re-deposit all happen inside your transaction. At current base fees that overhead comes to a few cents. Worth knowing; rarely worth worrying about.

When a swap won't go through

  • The pool is paused. A banner appears, the button disables, and quotes return nothing. (LP withdrawals keep working during a pause.)
  • No quote for your size. If the amount exceeds what the pool can deliver right now, the quoter declines rather than promise a bad fill. Try a smaller size.
  • Your bound was hit. If price moved past your slippage setting between quote and execution, the swap reverts — that's the protection working, not a failure.
Building an integration instead of using the widget? The contract-level walkthrough lives in Swap Against a DualPool, and routing/quoting rules in Integrate as a Router or Aggregator.