About NFT 2
Last updated 2026-09-19 · clubhouse.fund
Where stablecoin enters, what it becomes, and how a holder gets out — traced through the launchpad, the collection contract and the accretive token. The shape of the whole system turns on one irreversible moment: go-live. Everything before it is refundable escrow; everything after it is liquidity.
01Two doors in
A collection takes holders through two entrances that never mix. One is free and pays nothing into the curve; the other is the only source of stablecoin in the system.
Claimed against a signature from airdropSigner with a single-use nonce. Token IDs start at AIRDROP_ID_OFFSET = 1,000,000, which is what keeps them separable forever.
The buyer pays USDC priced by getCurvePriceAtSupply(), which reads off the current supply — so each successive NFT in the same transaction costs more than the last. The curve targets CURVE_TARGET_BASE = 18,500.
collectionEscrowedUSDT — the curve’s own reserve. The pot that funds refunds, and later becomes the pool.
CREATOR_BPS = 30 — held in escrow, paid out in full at go-live.
MINT_PREMIUM_BPS = 70 — accrues to platformEscrowedUSDT.
| Tier | Weight | Entry | Share when one of each is live |
|---|---|---|---|
| 0 | 25,000 | Mint curve | 53.75% |
| 1 | 15,000 | Mint curve | 32.25% |
| 2 | 5,000 | Mint curve | 10.75% |
| 3 | 1,000 | Mint curve | 2.15% |
| 4 | 500 | Mint curve | 1.07% |
| 5 | 5 | Airdrop | 0.0107% |
| 6 | 4 | Airdrop | 0.0086% |
| 7 | 3 | Airdrop | 0.0064% |
| 8 | 2 | Airdrop | 0.0043% |
| 9 | 1 | Airdrop | 0.0021% |
02Go-live, the one-way gate
Callable only when mintCount == maxSupply, by the creator or a platform owner. It flips settlementDone, which permanently closes the refund path — from here the curve escrow no longer exists as cash.
CREATOR_TOKEN_WEIGHT = 30,000 accretive tokens, plus the whole of creatorEscrowedUSDT in stablecoin. Both escrows zero out.
exactInputSingle on Uniswap V3, behind two guards: a TWAP_WINDOW of 10 minutes rejecting any reserve price more than MAX_TWAP_TICK_DELTA (≈10%) from the average, and a SLIPPAGE_FLOOR_BPS of 300 on the quote. The quote alone cannot catch a price pushed inside the same transaction; the TWAP can.
The collection’s stablecoin is now reserve coin sitting in a pool, and the accretive token has a market for the first time.
LP_RESERVE_WEIGHT
LP_DAT_WEIGHT
CREATOR_TOKEN_WEIGHT
Full range (FULL_RANGE_TICK_LOWER) because the price ratio between a fresh token and WBTC is extreme. Paired against the reserve the swap actually acquired, so the opening price is set by what the collection raised.
Narrow band (±TICK_BOUND) — both sides are 18 decimals and the ratio is balanced. No DAT is bought for this: DAT_WEIGHTcomes from the launchpad’s own balance, and go-live reverts if it is short.
03Accretive valuation
After go-live an NFT2 is no longer a claim on escrowed stablecoin. It is a claim on a share of whatever accretive token the collection contract holds — and that balance grows on a fixed emission schedule, which is what makes the claim accretive rather than static.
value = totalAccretiveValue() × TIER_WEIGHTS[tier] ÷ totalAccretiveWeight
Supply is computed, not minted: totalSupply() derives the figure from elapsed time in O(1), so there is no emission transaction to run and nothing to keep alive. The first cycle alone carries half of all accretion — 10,000,000 of the 20,000,000 MAX_ACCRETIVE, on top of the 1,000,000 GENESIS_SUPPLY.
04Three ways out, after go-live
The refund path is closed. What remains is the accretive claim and the two pools that go-live created.
NFT2.burn() pays token.spend(accretiveValue) to the holder. Ends holding the accretive token, and nothing else — the reason the liquidator exists.
NFT2Liquidator — entered by safeTransferFrom, so there is no approval step. Burns and swaps in one transaction to the reserve coin or the DAT coin, or reverts and leaves the holder with their NFT.
Keep the NFT and trade the token instead, in either V3 pool. The only exit that does not destroy the NFT — and so the only one that leaves totalAccretiveWeight untouched.
Constants read from the deployed contract sources, not documentation. launchpad_v3 · BPS_DENOMINATOR 10000