Two markets, one ticker
Before graduation you trade the bonding curve. After graduation you trade the Uniswap V4 pool. The token page switches automatically — look for the Graduated badge.
On the curve
Open any token page, choose Buy or Sell, and pick your payment asset:
- Buy with stock — approve the underlying (e.g. AAPL) once, then buy. Works for every listed backing.
- Buy with ETH — only when the app shows an ETH route for that stock. ETH is swapped to stock first, then the curve buy runs in the same flow.
- Sell — sell tokens for stock, or for ETH when the reverse route is supported.
Slippage
Slippage if the market moves past your floor.Fee skim order (every trade)
Fees are always taken in the underlying stock, in this order:
function quoteBuy(uint256 stockInRaw)
external view
returns (uint256 tokensOut, uint256 priceUsd8After)
{
uint256 protocolCreator = protocolFeeBps() + creatorFeeBps();
uint256 feePC = (stockInRaw * protocolCreator) / BPS;
uint256 afterPC = stockInRaw - feePC;
uint256 tax = (afterPC * holderTaxBps) / BPS;
uint256 stockNetNorm = _to18(afterPC - tax);
// ... curve math on stockNetNorm ...
}- Protocol + creator (default 1% combined) come off first.
- Holder tax (if any) applies to what’s left.
- The remainder hits the curve (or V4 pool after graduation).
After graduation (Uniswap V4)
Curve buys/sells stop. The token page routes swaps through Uniswap’s Universal Router + Permit2 into the graduated pool. The pool’s LP fee is 0 — protocol, creator, and holder tax are enforced by StockBackHook so fee behavior matches the curve era.
/**
* @dev Protocol+creator on notional, then holder tax on the remainder
* (matches BondingCurve). Holder tax stock is taken to the curve
* and credited via `creditHolderTax`.
*/
function _payStockFees(...) internal returns (uint256 feeAmount) {
uint256 pcFee = (notional * pcBps) / BPS;
uint256 afterPC = notional - pcFee;
uint256 tax = (afterPC * holderTaxBps) / BPS;
// ...
}Reading the token page
- Live price — curve / Uniswap spot, refreshed continuously.
- +/- % — change vs ~24h ago from indexed price history (or since the first stored tick).
- Chart — defaults to 15m; switch intervals anytime.
- Details float — description and social links from on-chain metadata.
- Trades / Holders — recent activity and holder distribution.
Basket markets
Basket launches use the same Buy / Sell / Pay ETH controls. Under the hood, ETH is split across several stocks, and after graduation the pool is meme ↔ basket shares. Full walkthrough: Baskets.