The call
phase() == ReadyToGraduate (the curve sold out). The caller is paid a reward in the quote token: min(graduationReward, raised · graduationFeeBps / 10000) — both from the launch’s config().
What it does
- Takes the graduation fee from the raise; the remainder plus the reserved LP supply (206.9M tokens) becomes the pool seed.
- The factory — which holds the DEX’s pool-creation role — opens a pool of the launch’s
graduationPoolType(CP by default) and initializes its price. The launch itself never touches the DEX role. - The liquidity position is minted directly to the locker, full range, and locked:
creatorFeeBpsof its trading fees to the creator, the rest to the protocol recipient. The locker has no withdraw function. - The token’s transfer gate lifts, permanently.
launch.pool(), the Graduated event, or poolFactory.getPool(token0, token1, poolType).
Squat protection — and its failure mode
The factory refuses to graduate into any pre-existing pool of the target type, initialized or not: a squatter who created the pool first would own the market’s opening terms. Combined with restricted CP creation this cannot happen in normal operation — but an integrator should model the state: a launch whose target pool somehow exists sits inReadyToGraduate indefinitely, raise held, untradeable.
The transfer gate, precisely
On theLaunchToken:
setGraduated() is callable only by the launch, flips once, and cannot be re-armed. The token announces the moment with its own zero-parameter Graduated() event, so a holder’s tooling need not know the launchpad exists.
After graduation
The token is an ordinary ERC-20 in an ordinary exchange pool: price it and route it with the DEX integration surface. The curve quoters return zeros; the launch keeps onlysweepFees() (permissionless, silent — no event) and its historical state.