A launch venue where every token earns its liquidity. Fixed supply. Bonded market. Locked forever.
Deploy a token. It trades on its own curve until enough is raised. The moment it does, liquidity migrates to a permanent pool — no admin, no delays, no rugs.
Price follows a fixed math curve — buyers bid it up, sellers push it back down. No team allocations, no seed rounds, no presale. When enough ETH is raised, the curve closes and liquidity becomes a permanent pool.
One path. No phases to skip, no queues to join. The token that hits the raise target in a given transaction is the token that gets its pool seeded in that same transaction.
Pick a name, icon, and optionally arm a creator-only first-buy window (≤ 1 h, sticky once they buy). A fixed 1 B supply mints straight into the token's own market — no treasury, no team bag, no admin reach. The window gives the creator anti-snipe priority without the gas-race surface of an atomic prebuy. Every trade goes through the public curve.
Every buy nudges price up, every sell nudges it down. Creator earns 0.30% on the volume. Supply can only move through the curve until graduation.
The trade that crosses the target does three things in one transaction: caps itself at the target, seeds the pool, burns the LP. No waiting room.
From here the token trades in a standard pool. The LP is burned at mint. Fees accrue into the burned position — depth only ever grows.
Optional, per-launch. When armed, only the creator can buy until they choose to or the timer runs out. No atomic deploy-and-buy shortcut, no factory-held funds — just a configurable head start that closes the moment it's used.
When a launch opts in, the factory injects the configured duration into the curve. The gate stays closed until either the time deadline expires or the creator lands their first buy. While both are open, only the current creator may call buy; everyone else reverts.
Hard ceiling. Owner-configurable per future launch, capped at one hour by Factory.MAX_CREATOR_WINDOW.
The creator's first buy flips the flag. Sticky — a later sell back to zero supply does not re-arm the window.
// inside BondingCurve.buy: uint64 windowEnd = CREATOR_WINDOW_END; if (windowEnd != 0 && block.timestamp < windowEnd && !firstBuyDone) { if (msg.sender != CREATOR) revert CreatorWindowActive(windowEnd); } // effects: if (!firstBuyDone) firstBuyDone = true;
Opt out (creatorFirstBuy = false) and the factory injects 0 as the duration; the gate is dormant and anyone can buy from the first block. The creator's first buy, if any, is just a normal trade.
A whale who sends 10 ETH into a curve that's one ETH from graduation does not inflate the pool. The trade is clamped to what's actually needed. The difference is refunded in the same transaction, before the token ships to them.
Every buy is capped by whichever budget binds first — tokens left on the curve, or ETH left to the graduation target.
// 1. two caps on the trade cap = min( supplyLeft, // ETH to drain tokens ethToTarget // ETH left to graduate ) // 2. snap + refund if (ethSent > cap): used = cap refund = ethSent − used fee = only on used // invariant raised ≤ target + 1 wei
Every venue on IMF V4 charges the same way: fees come out of the trader's input side, split between the creator, the protocol, and the pool's liquidity providers. What differs is the split.
Flat 1.25% on every trade while the token is still on the curve. No LP here — there is no pool yet.
Creator fees accrue to a claimable balance on the token — pull any time. Compatible with single-recipient or up-to-10-wallet splits.
After graduation, fees decay as market cap grows. Creators earn more on early growth; once the token is large, LPs capture most of the spread forever.
| Tier | MC (ETH) | Creator | Protocol | LP | Total |
|---|---|---|---|---|---|
| 00 | 0 – 21 | 0.300% | 0.930% | 0.020% | 1.250% |
| 01 | 21 – 70 | 0.950% | 0.050% | 0.200% | 1.200% |
| 02 | 70 – 117 | 0.900% | 0.050% | 0.200% | 1.150% |
| 03 | 117 – 163 | 0.850% | 0.050% | 0.200% | 1.100% |
| 04 | 163 – 209 | 0.800% | 0.050% | 0.200% | 1.050% |
| 05 | 209 – 464 | 0.750% | 0.050% | 0.200% | 1.000% |
| 06 | 464 – 696 | 0.700% | 0.050% | 0.200% | 0.950% |
| 07 | 696 – 927 | 0.650% | 0.050% | 0.200% | 0.900% |
| 08 | 927 – 1,159 | 0.600% | 0.050% | 0.200% | 0.850% |
| 09 | 1,159 – 1,390 | 0.550% | 0.050% | 0.200% | 0.800% |
| 10 | 1,390 – 1,622 | 0.500% | 0.050% | 0.200% | 0.750% |
| 11 | 1,622 – 1,854 | 0.450% | 0.050% | 0.200% | 0.700% |
| 12 | 1,854 – 2,085 | 0.400% | 0.050% | 0.200% | 0.650% |
| 13 | 2,085 – 2,317 | 0.350% | 0.050% | 0.200% | 0.600% |
| 14 | 2,317 – 2,548 | 0.300% | 0.050% | 0.200% | 0.550% |
| 15 | 2,548 – 2,779 | 0.275% | 0.050% | 0.200% | 0.525% |
| 16 | 2,779 – 3,011 | 0.250% | 0.050% | 0.200% | 0.500% |
| 17 | 3,011 – 3,243 | 0.225% | 0.050% | 0.200% | 0.475% |
| 18 | 3,243 – 3,475 | 0.200% | 0.050% | 0.200% | 0.450% |
| 19 | 3,475 – 3,706 | 0.175% | 0.050% | 0.200% | 0.425% |
| 20 | 3,706 – 3,937 | 0.150% | 0.050% | 0.200% | 0.400% |
| 21 | 3,937 – 4,168 | 0.125% | 0.050% | 0.200% | 0.375% |
| 22 | 4,168 – 4,400 | 0.100% | 0.050% | 0.200% | 0.350% |
| 23 | 4,400 – 4,631 | 0.075% | 0.050% | 0.200% | 0.325% |
| 24 | 4,631+ | 0.050% | 0.050% | 0.200% | 0.300% |
Permissionless pools that opt into a simpler, fixed 0.30% split. No creator economics, no market-cap tiering — the rate never moves.
Use it for tokens that should behave like any other pair — same shape as the canonical flat-fee pools on major AMMs.
When a launch deploys, its ENS subdomain — <label>.<name>.eth — is registered and the token's reverse record is wired back to the subdomain, all in one atomic transaction. Wallets and explorers display the name from the moment the token exists. Either every step lands or none of them do — there is no in-between state to confuse anyone.
The deployer proxy bundles the token deploy, the forward record, the resolver wiring, the ownership transfer, and the reverse record into a single transaction. If any step reverts, the whole thing rolls back — including the token contract itself.
Factory creates the (Token, BondingCurve) pair at deterministic CREATE2 addresses. Mint hits the curve. Identical to a direct factory call.
The proxy registers <label>.<name>.eth on the ENS Registry, sets the resolver to the canonical Public Resolver, and points the addr record at the new token.
The proxy transfers subnode ownership to the token contract. Token has no ENS-call code path of its own — the forward record is now immutable from the operator side.
Token calls the canonical ENS Reverse Registrar with <label>.<name>.eth. Single-shot, locked forever. Wallets that resolve the token's address now get the name back.
// inside IMFDeployerProxy.deployAndRegister:
(token, curve) = FACTORY.createToken{ value: msg.value }(...);
ENS_REGISTRY.setSubnodeRecord(PARENT_NODE, labelHash, address(this), resolver, 0);
PUBLIC_RESOLVER.setAddr(subnode, token);
ENS_REGISTRY.setOwner(subnode, token);
IToken(token).setEnsReverseName(string.concat(ensLabel, ".", parentName));
Authorization is one-time per parent name: the parent-name owner grants the proxy setApprovalForAll on the ENS Registry, and the factory owner authorizes the proxy via Factory.setDeployerProxy. After that, the operator runs deploys indefinitely with a single signed transaction per launch.
Hard invariants baked into the code. Not policies, not promises — things the contracts cannot do, to anyone, ever.
At graduation the pool's liquidity tokens are sent straight to an incinerator address. There is no owner, no unlock schedule, no path that returns the pool to anyone.
Protocol admin can configure future launches, not live ones. After a token deploys, its parameters are frozen. Nothing can pause it, upgrade it, or touch its balances.
The token's transfer lock prevents anyone from opening a rival pool before the canonical one exists. Your bag is safe from split-liquidity shenanigans in the bonding phase.
Whale buys get clamped. The final raised amount is within a rounding wei of the target — so the pool always seeds at the same price, regardless of who finishes the curve.
The buy that crosses the target is the same transaction that seeds the pool and burns the LP. There is no in-between state for sandwichers or snipers to camp on.
Creator and protocol shares pool into claimable balances, paid out on pull. A malicious fee recipient cannot block anyone else's trades — or anyone else's claim.
The creator share follows the trader's input on every trade before and after graduation. One-shot redirect to a different wallet is allowed — then locked, by design.
The LP portion of every post-graduation trade lands in the burned liquidity position. Depth only ever goes up. Traders sandwich themselves into a price floor.
Name, symbol, icon, description — stamped at launch and unchangeable. No one renames the token, no one swaps the image, no one points the URI at something new.
Every economic dimension matches pump.fun's 2026 schedule: 1 B supply, 1.073 B / 1.4 ETH virtual reserves, 1.25 % pre-grad split (0.30 % creator + 0.95 % protocol), 25-tier post-grad fee table, atomic graduation, creator splits up to 10 wallets, cashback mode, single-use fee-redirect lock. Two pump features absent here are launch-flow ergonomics, not economic surfaces: the mobile referrer surcharge (no mobile client) and atomic deploy-and-buy (replaced by the creator-first-buy window).
The curve / migration supply split (≈ 794.81 M / 205.19 M, exact wei) is mathematically tuned so the supply cap and the ETH target bind at the same moment. Every successful graduation drains the curve to literally zero tokens. Pump's clean-rounded 793.1 M / 206.9 M split orphans ≈ 60 K tokens at the curve forever.
Optional: launch a token and atomically register <label>.<parent>.eth + its reverse name in a single transaction. Wallets, explorers, and aggregators see the human-readable name from the moment the token exists.