OVERVIEW / ARCHITECTURE
Model V1 vs Model V2
Two separate deployments, not two entry points on one factory. They share a philosophy — a launch ends in liquidity nobody can pull — and almost nothing else. V1 has no curve and never touches Uniswap code. V2 runs a bonding curve and ends in a Uniswap V4 pool behind a hook.
MODEL V1
No curve · Uniswap V3 · LP locked
- The factory deploys
AgiLauncherTokenwith CREATE2 and mints the entire supply to itself. - It creates and initializes the Uniswap V3 pool — the open market where the token trades against ETH — at the config's
initialTickand mints one position holding the whole supply on one side of the price. - The position NFT is transferred to
AgiLaunchLockerand locked. There is no withdraw, no transfer, nodecreaseLiquidity: the locker cannot give it back. - The pool is created at the 1% fee tier (
poolFee10000). A trade pays that Uniswap LP fee and nothing else. There is no creator tax in V1. collectFees(token)collects both sides of the position and pays 70% to the creator's fee wallet and 30% to the protocol wallet. The share is snapshotted per token at lock time. Only the locker owner, the token deployer, the fee recipient or a whitelisted collector may call it, and it always pays those fixed recipients.- The token enforces a max wallet and a max transaction for a configured number of blocks after launch, then behaves as a plain ERC-20 forever.
- The launch fee is 0.0005 ETH, paid straight to the protocol wallet in the launch transaction. Any ETH sent above it is spent on an atomic opening buy for the creator through the configured router.
- No Uniswap code is compiled in. V1 talks to V3 through minimal hand-written interfaces and reimplements the tick math it needs.
MODEL V2
Bonding curve · graduates to Uniswap V4
- The factory (through
AgiV2LaunchDeployer) deploys a per-launchAgiV2BondingCurve— the contract that sells the supply itself, raising the price with every buy — and its token, both at CREATE2 addresses the creator can compute beforehand. - The token trades against its quote asset on the curve from the first block. Price is constant-product against a phantom quote reserve.
- The quote asset is native ETH or an ERC-20 the owner approved, such as a tokenized stock like NVDA. The creator is paid in that asset.
- When the real quote reserve reaches the graduation threshold, the curve halts and its reserves move to the factory. A second, retryable call seeds a Uniswap V4 pool, the open market where the token trades from then on. Anyone may send that call.
- The full-range position is minted straight to
AgiV2LaunchLocker. The tokens that would have backed the phantom reserve are locked too, never circulating. - Every trade pays a 1% base fee, on the curve and in the graduated pool alike. The pool's own LP fee is zero;
AgiV2MemeHookcharges the 1% inafterSwapinstead, so the rate is the same before and after graduation. - That 1% is split 30% to the protocol and 70% to the creator.
- The creator may add a creator tax of 0 to 2% on top, paid 100% to the creator. A V2 trade therefore pays at most 3%.
- Both shares are credited to
AgiV2FeeEscrow. Each recipient claims only its own balance: the protocol wallet its 30%, the creator fee recipient its 70% plus the tax. Graduation may be triggered by anyone; claiming may not. - Uniswap V4 core code is compiled in, and two of those files are BUSL-1.1. See Licences.
Side by side
| Model V1 | Model V2 | |
|---|---|---|
| Price discovery | Uniswap V3 pool from block one | Bonding curve, then a Uniswap V4 pool |
| Entry point | launchToken(params, launchConfigId, dexId, salt) | launchToken(params, launchConfigId, pairToken[, exemptions]) |
| Trade fee | 1%, the Uniswap V3 pool's LP fee | 1%, charged by the curve, then by the hook in the V4 pool |
| Split of that 1% | 70% creator / 30% protocol | 70% creator / 30% protocol |
| Creator tax | none | 0 to 2%, chosen at launch, paid 100% to the creator (3% max in total) |
| Launch fee | 0.0005 ETH to the protocol wallet; msg.value ≥ fee, the excess is the opening buy | 0.0005 ETH to the protocol wallet; msg.value must equal the fee |
| Quote asset | ETH, fixed by the launch config (config.pairToken) | ETH or an approved tokenized stock, chosen per launch; the zero address means native ETH |
| Where fees are held | paid out by the locker in the same call that collects them | AgiV2FeeEscrow, a balance each recipient withdraws |
| Who claims | collectFees by the locker owner, the deployer, the fee recipient or a whitelisted collector; always paid to the fixed recipients | each recipient claims its own AgiV2FeeEscrow balance; nobody can claim another's |
| Anti-sniper | max wallet / max tx for restrictionBlocks blocks | decaying snipe tax over a window of seconds |
| Liquidity | V3 position NFT locked forever | full-range V4 position locked forever |
| Uniswap code compiled in | none | v4-core (BUSL-1.1) and v4-periphery |