Features
What the launchpad does, in the words of the person using it. Five stages, following one token from the assets it could be paired against through to life in its Uniswap pool.
This is the scope of v1, not a progress report — notes/STATUS.md is the record of how much
of it is built, and it wins if the two disagree. The markers exist only so this file cannot
quietly become fiction: ✔ built and tested, ~ partly there, ✗ not built.
Stage 0 — asset pairing
What a creator can pair their token against, decided before any token exists.
- ✔ creator can pair against known tokens — proved against real WETH, ARB, wBTC and USDC, and a USDT-shaped token
- ✔ creator can pair against a single tokenised stock — a one-stock basket, proved against real rNVDA on a fork, through a Reality split and pause
- ✔ creator can pair against a basket of stocks they compose themselves — 20% AAPL / 50% NVDA / 30% TSLA. Weights of at least 10% each; several stocks proved locally, real rTokens proved one at a time
- ✔ creator can pick a curated basket instead of composing one
- ✔ the protocol decides what is on the menu, and can withdraw an asset without touching live launches
- ~ anyone holding the underlying stocks can mint and redeem baskets, which is what keeps a basket's price honest — but no contract and few buyers can acquire rTokens on chain; in practice that is Bitget users (D22)
- ✔ a dividend paid on a constituent makes every basket worth more, including the baskets held in the token's pool
- ✗ a stock's cash dividend reaches its basket without anyone having to claim it — Reality pays by claim, with a proof from their API. Parked (O18)
- ✗ holding a token paired against stocks pays that token's holders the dividends. Parked (O18)
- ✗ a buyer can get into a stock- or basket-paired launch with ETH or USDC, without holding the stock first — dropped for v1: rTokens come only from Reality's registered participants (D22)
- ✗ creator can compose a basket and launch against it from an interface — no
web/exists - ✗ the pairing layer is deployed — the deploy script does not create
BasketFactoryor wire it into the launch factory - ✗ creator can pair against native ETH — only WETH; wSOL is allowed in principle but has never been tested
Stage 1 — launching
- ✔ creator can launch a token: a name, a symbol and what to pair against
- ✔ the token is tradable the instant it launches, and its future Uniswap pool cannot be hijacked before it gets there
- ✔ creator sets the buy and sell fee at launch, on top of the protocol's, up to a ceiling on the total (10% each way)
- ✔ creator names the wallet the fees go to, and neither the rate nor the recipient can ever change — a blocked wallet cannot stop trading, its fees are held for anyone to retry. Pool fees too (D25)
- ✗ later, creator can point the fees at something other than a wallet — holders, a buyback, a burn
- ✗ creator can set anti-snipe measures
- ✔ the protocol sets the curve shape and the graduation threshold; the creator does not
Stage 2 — life on the curve
- ✔ anyone can buy the token, and the price rises with every buy
- ✔ anyone can sell back to the curve at any time, so a launch that stalls still has a way out
- ✔ a buyer can see the price and what they will receive before committing
- ✔ a buy that would overshoot the graduation threshold has the excess refunded
- ✔ every buy and sell pays a fee, banked immediately rather than left sitting in the curve
- ✔ the curve closes itself the moment its threshold is raised, and nobody can trade it afterwards
- ✔ the curve can never oversell its allocation or owe more than it holds
- ✔ holders can transfer and burn their tokens freely while the curve is open
- ✔ a buyer can trade in the pair itself — buy $MEME with $TSLA, sell $MEME for $TSLA
- ✔ a buyer can instead pay in one of a few deep-liquidity currencies — ARB, ETH, USDC — and be routed —
LaunchRouter, with ETH or any token along a v3 path the caller picks (D22). Proved against live SwapRouter02, one hop and two. Not in the deploy script
Stage 3 — graduation
- ✔ graduation happens inside the buy that crosses the threshold — no bot, no keeper, nobody to wait for — including for a wallet sending its own gas estimate: a buy that cannot afford graduation reverts instead of deferring it (D23). Proved over every gas limit, on the live singleton, and at
cast estimateon a local node - ✔ the whole raise and every unsold token go into a real Uniswap v4 pool
- ✔ the pool opens at exactly the price the curve closed at, so the last buyer on the curve is not jumped
- ✔ if graduation fails for any reason the raise is not stranded — anyone can retry it
- ✔ the liquidity is locked forever: no withdrawal function exists, for us or for anyone
Stage 4 — life in the pool
- ✔ the token trades on a real Uniswap v4 pool, quotable by aggregators and by Uniswap's own interface
- ✔ every swap pays LP fees, and anyone can sweep them to the creator and the protocol without permission — pulled, not pushed: nothing collects them until someone calls it
- ✔ the creator and the protocol split pool fees on terms fixed at launch — an even split to start, owner-set for future launches; a blocked wallet on either side is held for anyone to retry (D25). Proved against real USDC with Circle blacklisting the creator
- ✔ the pool cannot be rug-pulled: removing the liquidity is not expressible, not merely forbidden
- ✔ trading in the pair itself works here exactly as it did on the curve
- ✔ the same short list of routing currencies works here too, through the same router — the same calls switch to the pool on graduation. Proved against the live
PoolManager
Paying holders, and weighting by how long they held, left v1 on 15 Sep 2026: they are mechanics an experiment builds, not features of the launchpad (D26).
Where this contradicts something already settled
- The creator sets the fees, inside a ceiling we set — D17 amends D13. The protocol fixes the maximum; the creator picks the rate and the recipient at launch and neither can move afterwards.
- Curve fees paid straight to a wallet sidestep O17 entirely. Nothing needs to be attributed if nothing is pooled: the curve pushes each launch's fee to that launch's own recipient. Pool fees still do not, because the migrator's fee sink is one shared address for every launch it makes.
- Dividends do not yet pay token holders. They make the baskets worth more, including the ones the pool is holding, which lifts the pool's quote side rather than paying anyone. Holding a stock-paired token should mean holding the dividends too — that is O18, and it is unsolved.
- Anti-snipe is not retrofittable, so it has to be in before the first real launch or never. No constraint while nothing is deployed (O12).
- The router must never become load-bearing. Paying in ETH for a token quoted in a basket is several legs — swap, mint, buy — and each one can fail. The curve and the pool stay directly callable without it, or a broken router becomes a launch nobody can exit.
- Staying quotable in Uniswap's interface is a constraint, not a feature. It holds only while
the hook stays in the auto-allowlisted lane — observing, no return-delta flags, fixed LP fee,
and never an address starting
0x91(D15).
Future updates
Wanted, deliberately not v1. Kept here so the shape of v1 is not argued from scratch each time.
| stage | later |
|---|---|
| Pairing | a curated basket library; gated stocks and the permissioned-pool path; one basket per composition or one per launch (O13) |
| Launching | anti-snipe; an image, a description and socials; creator-set curve parameters |
| Holder score — an experiment, not ours | position lots, time held, entry and exit counts — tracked on the curve and in the pool, since the token itself is what watches balances move |
| Graduation | a permissioned graduation path for restricted quote assets — dropped from v1, nothing we pair against needs it (D23) |
| Fees | buybacks, burns, weighted redistribution, a creator surcharge |
| Dividends | passing a constituent's dividend through to the token's own holders (O18) |
| Hooks | per-swap scoring, gacha packs minted on the swap that paid for them |
| Experiments (D26) | what lets an experiment plug in without forking us: its own hook, its own fee destination, its own balance observer, and isolation per launch. The first design conversation after the MVP |
| Contract-based websites | a launch's site served from its own contract. Written down 18 Sep 2026 on the developer's instruction; the shape is his and is not recorded here yet |