The launchpad deploys a token, its bonding curve and its future pool in one transaction, for anyone. When the curve sells out, anyone can graduate it, and the pool opens in that same transaction.
In the app
- Launch (
/launch) lists every launch, the ones closest to graduating first. With no launches yet, it shows what a launch does on the default template, read from the registry. - Create a launch (
/launch/new) takes a template from the registry, a venue, an opener or none, who gets the creator's share and a logo if you want one, then sendsLaunchFactory.createLaunch. A logo is its own step on the button: one signature uploads the file, and the launch'smetadataUripoints at it. Without one, the launch shows its first letter. Once the transaction lands, the page moves to the new launch. - One launch (
/launch/[id], by curve or token address) shows the curve and its price, trades and holders, where it stands, the protection window while it runs, and the ticket. Once graduated, the ticket gives way to the pool it moved into, and the creator sees the pool's fees there, to collect and claim. The opener is always named.
Two older roads sit beside it. Token vaults, at /launch/vaults, move any aged token with a deep pool into a managed vault. Pons tokens, at /launch/pons, are tokens from the Pons launchpad.
From curve to pool
The curve is made of straight price segments. Its reserve is a pure function of the tokens sold and is tracked, never read from a balance, so a donation cannot move the curve or the threshold. It closes at exactly its last token: a buy past that is cut to fit and pays only for what it gets, and the closing buy also graduates. Sells stay open until graduation, so a launch can always be sold back.
The pool is created at launch, locked at the price the curve closes on. Until graduation it takes no mint, no swap and no price move, whatever is sent to it. So the seed price comes from the curve and cannot be sandwiched.
The defaults
A launch copies its template when it is created, so a later template change never reaches a live curve.
| USDG template | WETH template | |
|---|---|---|
| Supply | 1,000,000,000 | 1,000,000,000 |
| On the curve | 70 % | 70 % |
| For the pool | 25 % | 25 % |
| For the creator | 5 % | 5 % |
| Start price | $0.000002 | 0.0000000007 WETH |
| Closing price | $0.00005 | 0.0000000175 WETH |
| Reserve at close | 11,500 USDG | 4.0075 WETH |
| Fully diluted at close | $50,000 | 17.5 WETH |
The WETH template is sized for ETH near $2,900.
| Setting | Default |
|---|---|
| Trade fee | 1 %, on the quote side |
| Fee split | Creator 30 %, pool seed 20 %, protocol 50 % |
| Protection fee | 20 % extra on buys at the first second, falling to zero over 5 minutes |
| Wallet limit | 2 % of the curve per recipient during protection |
| Creator vesting | 30 day cliff, 180 days in total, from graduation |
| Pool position fees | Creator 50 %, protocol 50 % |
| Opening allocation | At most 20 % of the curve |
| Creation fee | 0, fixed at deploy |
The protection window
From the first second, buys pay an extra fee that falls linearly to zero, and each recipient has a limit. It runs on timestamps. No identity is checked: bots can split wallets, and they pay the fee on every one. The extra fee goes to the pool's seed, never to the creator, so a creator sniping their own launch pays it like anyone else, through an opener or not. Sells pay the base fee only.
Graduation
The creator picks the venue per launch: a DLMM pair (bin step 100) or a DAMM pool (tick spacing 60, base fee 1 %, an anti-snipe fee from 5 % over 5 minutes).
Anyone can call graduate. It takes the reserve and the pool's 25 % into the venue at the close price, puts the position in LPAllocationEscrow, starts the creator's vesting and opens trading. The escrow has no removal path; it only collects fees. Anyone can collect them, which credits the creator and the protocol at the launch's split, and claim pays each side.
Private buys and sells
The ticket on a launch's page has a private side. LaunchAdapter buys and sells on the curve from a note, in one transaction, and pays the curve's fees plus the 0.10 % on what leaves the pool. Who traded stays hidden. The launch, the size and the price are public.
The wallet limit counts the recipient. Inside the protection window each private buy goes through a fresh recipient, so the limit applies per buy and the protection fee is paid every time. Past the window the tokens go straight to custody. See Immediate lane.
Openers
A launch can name an opener, which gets one fill before the public opens. Every launch page names it. The fill starts the protection window for everyone else. If the opener never makes it, the launch opens by itself when its delay ends.
- An opener from
SealedMarkets.createLaunchOpeneropens through a sealed batch, so the first buyers share one price and the tokens come back as notes. Its fill pays the base fee, skips the wallet limit and the protection fee, and can reachmaxAllocationBpsof the curve, 20 % by default. Anyone can join the batch until it seals, it stays open for at least ten minutes, and the launch takes sealed buys on its page while it waits. On the create page, pick "Sealed batch": one button sends the three transactions it takes. See Sealed batches. - Any other opener, such as the creator's own wallet, pays the whole protection fee and stops at the wallet limit. It buys a moment's head start and nothing more.
A sealed claim pays its relayer in what it claims, and a relayer takes no launch token until it prices one. So a launch's claims go from a fresh address you choose. See Sending a claim or refund yourself.
Limits on templates
The registry's owner can write templates inside hard bounds and do nothing else. For example: trade fee 0.10 % to 3 %, pool allocation 5 % to 50 %, creator allocation at most 20 %, protection fee at most 30 % over at most 1 hour, graduation threshold 1,000 to 1,000,000 USDG or 0.25 to 500 WETH.
For developers
A developer account belongs to a wallet, which signs for its API keys. A key can list launches in a branded catalog on its own domain. GET /launches lists launches. A launch points at a hosted logo with logo:<sha256> in its metadataUri: POST /logos takes the file with the wallet's signature over its hash, and POST /dev/logos takes it with a key.
contracts/src/launchpad/LaunchDefaults.solthe templates abovecontracts/src/launchpad/BondingCurve.solthe curve, fees and protectioncontracts/src/launchpad/GraduationManager.solgraduation