The Launch
The buzz
Most meme launches are a race: the pool appears, the scripts are already there, and the people who read the announcement get the price the scripts left behind. We didn't want to run that race, so we changed the track.
The pool is created CLOSED. The creator seeds it at their own pace — with all the liquidity, at full range — while nothing can trade. Then one transaction opens the doors. Everyone gets the same starting line, and there is no window where the pool exists with no liquidity in it for someone to play with. No sniper block. The dev literally could not buy first: the doors open for everyone in the same block.
And it all happens on the testnet first, in full, until it is boring. Then mainnet. Boring is the goal. Boring is the alpha.
The boring part
Status
| Testnet rehearsal (46630) | done, 2026-09-12 — every step signed on the hardware wallet, exactly as mainnet will be; trading open, seed locked |
| Mainnet (4663) | after the independent audit |
| Independent audit | scheduled before mainnet; the report will be published here |
The sequence

Every step is one transaction signed on a hardware wallet. No one else ever holds the key. No "deployer EOA on a laptop".
- FLY is deployed to a chosen address — it has to sort above USDG's for the hook, and
since it costs nothing, it ends in
…999999. All 21,000,000 minted: 1% to the creator, 99% to the wallet that will seed the pool. - The hook is deployed at an address whose low bits encode its permissions (a Uniswap V4
requirement), with the fee, its split and the fee curve (
k= 15) baked into it for good. Yes, the address is mined. Yes, that is a real thing. - The pool is created at the opening price implied by the seed — nothing can trade.
- The seed: the creator's USDG and 20,790,000 FLY (99% of supply) as one full-range position, minted to the seeding wallet as an ordinary Uniswap position NFT.
- The lock: the NFT goes into
FlySeedLockerfor 15 days to start — extendable on chain, never shortenable. The next step refuses to run until this one has. The machine will not open the doors while the seed is loose. openTrading()— one-way, and it refuses to run while the pool holds no liquidity. From that block, anyone can trade.
Why full range
A concentrated seed would leave the pool with no FLY to sell above its upper bound; full range means the pool can always quote a price, however far it moves. To the moon or to the floor, the pool quotes. The protocol's own bids are what add concentration over time, under the market, where it helps.
Why the gate matters (the part most launches skip)
An empty Uniswap V4 pool is not inert. With zero liquidity, a swap moves the price all the way
to the caller's limit without exchanging a single token — so anyone could park the price
anywhere before the seed landed, and the seed would then land at their price. The hook
refuses every swap until openTrading(); the launch runbook has the creator try a swap in
that window on testnet just to watch it fail. We tested the door by kicking it.
After launch
- The
TOKEN CAon the site is replaced with the real address. - The television takes ETH from the first block: the ETH → USDG → FLY route ships with it and was rehearsed on testnet both ways.
- The seed lock's
unlockAt()is the live promise; extensions are on-chain events.
For the operator's version — commands, environment, failure modes — see
docs/launch-runbook.md in the repository. It has no jokes in it. That one is not for you. 🫡