LogoCLUBHOUSE
Clubhouse

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.

launchpad_v3.solNFT2.solaccretiveToken.solNFT2Liquidator.sol

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.

Genesis AirdropFree

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.

No USDC inTiers 5–9
Mint CurvePaid

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.

USDC inTiers 0–4
Every paid mint splits three ways
Collection escrow
Base price

collectionEscrowedUSDT — the curve’s own reserve. The pot that funds refunds, and later becomes the pool.

Creator fee
0.30%

CREATOR_BPS = 30 — held in escrow, paid out in full at go-live.

Platform premium
0.70%

MINT_PREMIUM_BPS = 70 — accrues to platformEscrowedUSDT.

Burning before go-live is a refund, not a liquidation. The holder gets the curve price back minus BURN_DISCOUNT_BPS (0.70%, to the platform) and CREATOR_BPS (0.30%, to the creator) — drawn straight out of collection escrow. Airdropped NFTs are blocked from this path (“Airdrop NFT not curve-eligible”): they never paid in, so they cannot draw out of stage-1 buyers’ money.
TierWeightEntryShare when one of each is live
025,000Mint curve53.75%
115,000Mint curve32.25%
25,000Mint curve10.75%
31,000Mint curve2.15%
4500Mint curve1.07%
55Airdrop0.0107%
64Airdrop0.0086%
73Airdrop0.0064%
82Airdrop0.0043%
91Airdrop0.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.

01
Creator is paid out

CREATOR_TOKEN_WEIGHT = 30,000 accretive tokens, plus the whole of creatorEscrowedUSDT in stablecoin. Both escrows zero out.

02
Collection escrow is swapped USDC → reserve coin

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.

03
Two liquidity positions are minted

The collection’s stablecoin is now reserve coin sitting in a pool, and the accretive token has a market for the first time.

Where the 1,000,000 genesis tokens go
500,000 → reserve pool
LP_RESERVE_WEIGHT
470,000 → DAT pool
LP_DAT_WEIGHT
30,000 → creator
CREATOR_TOKEN_WEIGHT
Accretive ↔ Reserve coin

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.

Accretive ↔ DAT coin

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.

Per-NFT claim — accretiveValueNFT2()

value = totalAccretiveValue() × TIER_WEIGHTS[tier] ÷ totalAccretiveWeight

Two moving parts, pulling opposite ways. totalAccretiveValue() is simply the token balance held by the NFT2 contract, so it rises as emission accrues. totalAccretiveWeight is the sum of weights of all live NFTs, and every burn subtracts one — so each exit raises the claim of everyone who stayed.
Emission scheduleHalving every 126,144,000s (≈4 years) · stops at cycle 25
20M15M10M5M0cycle 1 — 10Mcycle 2 — 15Mcap 20M0481525HALVING CYCLE (≈4 YEARS EACH)

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.

Burn

NFT2.burn() pays token.spend(accretiveValue) to the holder. Ends holding the accretive token, and nothing else — the reason the liquidator exists.

Liquidate

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.

Swap

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