§ 02 · One signature

Launching a coin

One transaction. It deploys the coin, opens its pool, seeds it with the whole float, and records the launch. If any part fails, none of it happened.

Read 00% · 0% lit

What you choose

what it isbounds
name / symbolthe usual1–64 and 1–16 characters
pair assetwhat your coin trades againstanything that clears the gate — see Pair assets
supplyfixed forever, no mint function exists1,000,000,000 on this site; 1 to 1,000,000,000,000 through the contract
opening valuationwhere the price starts, denominated in the pair assetfixed at a $4,000 market cap on this site; any value through the contract
trading feecharged on every tradeUniswap V3's 1% tier (spacing 200) or 0.3% tier (spacing 60) — the two tiers inside the launchpad's bounds
creator premineshare of supply you keep0 on this site; up to 20% through the contract
first buypair-asset amount you spend buying your own coin as the pool's opening trade0 by default
fee routingwhat happens to your share — see Feeskeep, buy back and burn, or pay your holders
saltpicks your coin's addressmined off-chain

The launch fee is 50 MON, roughly a dollar and a half at MON's price when this was written, and it is capped at 5,000 MON in the contract so it can never quietly become a tax. Gas on Monad is a fraction of a cent — but Monad charges the gas limit a transaction sets, not the gas it uses, so this site keeps its own gas margins small. Creating the Uniswap V3 pool deploys a contract, which is the bulk of a launch's gas — still well under a cent's worth of MON.

Keep 10 MON back. Monad holds a reserve balance of 10 MON in every account (MIP-4): a transaction that spends MON and leaves the account below it reverts — and still pays its gas — unless it is the account's only transaction in the last three blocks and the account is not EIP-7702-delegated. A launch is several transactions in quick succession, or one batched call from a smart wallet, so this site asks for the launch fee, the dev buy and 10 MON before it lets you sign, and its "Max" buttons leave that much behind.

The one that trips people up

The opening valuation is denominated in the pair asset, not in dollars. Typing 1000 means a thousand USDC against USDC — $1,000 — and a thousand WBTC against WBTC, about $86 million. Five orders of magnitude apart for the same number in the same box.

This site takes the choice away rather than asking you to get it right: every coin launched from it opens at the same $4,000 market cap, converted into the pair asset at its live price. You do not set it, and nobody gets a different starting line. The contract only ever sees ticks.

Integrating directly? The SDK exists so you never have to think about this either: startFdvInQuote takes a figure in pair-asset units and sdk/src/range.ts converts it into ticks, including the correction for pair assets that do not have 18 decimals — USDC has 6, WBTC has 8. Get that correction wrong by hand and the launch opens twelve orders of magnitude off.

A Foundry test pins the SDK's arithmetic against the price a real pool actually opens at, so the two cannot drift apart.

Buying first, inside the launch

devBuyQuote spends pair-asset tokens on your own coin as the pool's very first trade, in the same transaction that opens it. You have to approve the launchpad for that amount beforehand, and the coin lands in the launching wallet.

Doing it here rather than through a router afterwards is not about speed. The launchpad records msg.sender as the creator, so a router that bought on your behalf would have been recorded as the creator instead — and taken the fee stream with it.

Paying for it in MON is one transaction, whatever the pair asset. launchWithNative takes the fee and the MON together; inside the launch, the launchpad routes the MON into the pair asset through an aggregator (KyberSwap, with LI.FI as the fallback) and spends what actually arrived on your first buy — MON → pair asset → your coin, in the same call that opens the pool. Against MON itself it is a plain wrap into WMON. The route can only go to a router the launchpad allows, and your minimum holds across both legs: if the route delivers too little, the whole launch reverts and you keep your MON.

devBuyMinOut is the least you will accept. It is not protection from other traders: nobody can trade before this, because the pool does not exist until this transaction. It guards against you and the pool disagreeing about the opening price, which is a real risk when the valuation is denominated in a pair asset with unusual decimals.

Why you mine a salt

PairToken takes no constructor arguments, so its init code hash is constant and its address is a pure function of the salt. That matters because a concentrated-liquidity pool prices token1 in terms of token0, and which of those your coin becomes is decided purely by whether its address sorts above or below the pair asset's.

your coin isprice reads asbuying moves the tick
token0pair asset per coinup
token1coin per pair assetdown

Both work, and the contract handles both. But charts, screeners and human intuition all expect the first, so the SDK mines a salt that lands you there. It costs nothing but a few eth_calls.

What can go wrong

revertwhat happened
QuoteNotEligiblethe pair asset does not clear the depth bar — the error carries the reason code
QuoteDeniedthe pair asset is on the deny list
PoolAlreadyInitializedsomebody created and priced your coin's pool first
FeeOutOfRange / FeeTierNotEnabledthe fee is not one of the tiers on offer
TickSpacingMismatchthe spacing does not match the fee tier
TicksNotAlignedyour range is not a multiple of the tick spacing
DevBuyBelowMinimumyour first buy would have returned less than the floor you set
InsufficientLaunchFeeyou sent less than the launch fee
CreatorShareTooHighpremine above 20%

PoolAlreadyInitialized is the interesting one. Your coin's address is predictable from your salt, so a griefer can create its pool first. Merely creating it achieves nothing — the launch adopts an empty pool as if it had made it. Creating and pricing it makes the launch revert cleanly; you pick another salt and have lost nothing but a fraction of a cent of gas. Cheap to attack, cheaper to defend, never a loss of funds.