Skip to content

PagesSpec §3.3

Trade panel

This is the core of the product. It should look like a normal swap box.

Trade panel
┌─────────────────────────────────┐
│  [ Buy ]  [ Sell ]              │
│                                 │
│  You pay                        │
│  [ 0.00          ] [ SOL  ▾ ]   │
│  Balance: 4.21 SOL   [Max]      │
│                                 │
│  You receive (estimated)        │
│  [ 1,204,331     ]  $TOKEN      │
│                                 │
│  Price impact      0.8%         │
│  Fee               1%           │
│  Route         Direct ▸         │
│  Slippage      1%  ⚙            │
│                                 │
│  [        Buy $TOKEN        ]   │
└─────────────────────────────────┘

The “SOL ▾” button opens a token picker with two sections:

  1. On this curve: the token's curve assets, marked “Direct, lowest cost”.
  2. Any token: all other supported tokens in the user's wallet, sorted by balance, plus search. Marked “Routed”.
  • Direct (paying with a curve asset): one swap on the curve.
  • Routed (paying with anything else): we swap into whichever curve asset gives the most tokens out, then buy. The route row reads “Routed via USDC ▸”. Expanding it shows each step, with the combined fee and price impact.
  • If a routed path is meaningfully worse than a direct one the user could take, show a hint: “Paying with SOL directly gives ~2% more.”
Expanded route
BONK → USDC (Jupiter) → $TOKEN (curve)

The user picks which asset to receive. Default to the curve asset that pays out the most; offer “Any token” as a routed option as well. If a curve asset's real reserve is too low to pay out the requested amount, grey it out with the reason (“Not enough USDC in the curve”).

  • Wallet not connected → button reads “Connect wallet”
  • Insufficient balance
  • Amount exceeds what's left on the curve (the last buy before graduation): show “Only X tokens left. You'll be refunded the rest.”
  • Price impact above 5%: amber warning; above 15%: red, requires confirm
  • Quote expired / price moved: re-quote prompt
  • Transaction pending, success (with link), failed (plain-language reason)
  • Curve graduating: trading paused banner while migration runs

Transaction pending.

Success (with link).

Failed (plain-language reason).

Curve graduating: trading paused banner while migration runs.

Slippage tolerance (0.5%, 1%, 3%, custom), priority fee (Normal / Fast / Turbo).