Know each contract.
Verify every binding.
A map of the canonical source interfaces, not a substitute for the compiled ABI.
LaunchCoordinator
Source: contracts/src/LaunchCoordinator.sol. Validates launch inputs and upstream modules, coordinates activation, and stores the final receipt.
predict(actor, userSalt): obtain namespace/component predictions.manifestHash(actor, config): bind the reviewed configuration and observed dependencies.launch(config, expectedManifestHash): activate the collection.launches(launchId(actor, userSalt)): read the persisted final receipt.
Minter, collection, and converter predictions remain fixed. FLOOR, receiver, and pool can finalize differently if upstream token addresses are occupied. A bounded 256-candidate search preserves currency ordering and reverts on exhaustion; never adopt a foreign deployment or assume a simulated FLOOR address is final.
PrimaryMinter
Source: contracts/src/PrimaryMinter.sol. mintPublic(quantity, recipient) issues sequential public IDs while skipping team reservations. It collects one FLOOR plus the fixed quote fee per NFT, distributes primary revenue, and funds backing in the same transaction. claimTeam(ids) delivers pre-backed reserved rights without a primary fee.
Read publicRemaining(), teamRemaining(), mintEconomics(), totalMintRevenue, and mintRevenuePaid(recipient) for their distinct counters.
ReserveConverter
Source: contracts/src/ReserveConverter.sol. deposit(tokenIds, recipient) releases one accounted FLOOR per deposited NFT after conversionOpensAt. redeem(tokenIds, recipient) consumes one FLOOR per selected accounted inventory NFT.
Read inventory(id) and verify ownership before selection. An unsolicited transfer is not a supported deposit. reserve is an accounting value, not simply the token balance; donations create no credit. The timer directly gates deposits. Redemption requires active state and inventory, with no independent timer check.
CollectionRouter
Source: contracts/src/CollectionRouter.sol. The canonical router binds a collection to its verified v4 pool. Its methods include mintWithQuote, redeemWithQuote, sellForQuote, mintWithFloor, redeemWithFloor, depositForFloor, and exchangeNFTs. Use the compiled ABI for complete argument types.
Quote-funded mint limits include both pool cost and primary fee. Vault redemption has no primary fee. Deadlines and min/max amounts are explicit; canonical operations revert atomically. The demo vault API uses its own atomic demo-market router rather than this canonical v4 router. Its vault buy and NFT swap each roll back all asset movements together on failure; preceding approvals are separate.
DemoVaultRouter
Source: contracts/demo/DemoVaultRouter.sol. This testnet-only adapter binds the demo market and quote token. buyWithQuote(converter, target, floorFromWallet, maxQuote, deadline, recipient) combines available wallet FLOOR, any missing FLOOR purchase, and selected redemption. exchangeNFTs(converter, source, target, deadline, recipient) combines source custody, deposit, and target redemption. Each operation is atomic; a revert rolls back all its asset movements.
The quote cap is 25 dUSD. Unspent input is not pulled; any new FLOOR rounding remainder is returned to the caller. The adapter checks target inventory, ownership, recipient, and deadline. Deposits remain subject to the converter’s activation delay. User approvals precede the router transaction and may persist if it fails.
Immutable economics
economics.fee is a uint128 amount in raw quote units; fee × maxSupply must fit uint256. Zero fee requires empty shares. Positive fees require 1–8 unique nonzero recipients, sorted numerically, positive bps totaling 10,000; minter, converter, and collection cannot receive mint revenue. The final address receives per-NFT rounding dust.
conversionDelay is 0–31,536,000 seconds from actual successful activation. Sellout does not open deposits early. The top-level pool fee is separate from economics.fee.