Platform
Platform Fees
Full fee schedule with recipients + enforcement layer.
Schedule
| Surface | Fee | Recipient | Enforcement |
|---|---|---|---|
| CC0Store mint | 5% (500 bps) | Platform fee recipient | Onchain, constant in the contract |
| CC0Collection1155 mint | 5% | Platform fee recipient | Onchain, constant in the contract |
| IPFS drop mint (CC0Drop / SeaDrop) | 5% | NEXT_PUBLIC_PLATFORM_FEE_RECIPIENT | Onchain, set in the constructor (fail-closed at deploy) |
| Onchain artwork upload (gas reimbursement) | Quote at upload time | Platform wallet | Off-chain, ETH transfer |
| Agent Services invocation | Disclosed in the 402 challenge (maxAmountRequired) | payTo from the live 402 challenge | Off-chain, x402 v2 |
| Launchpad — standard launch (WETH pool) | 10% treasury (creator 75%, stakers 15%) | Platform treasury + staking pool | Enforced onchain by the factory at every launch |
| Launchpad — paired launch (ERC-20 pool) | 20% treasury (creator 80%, no staker slice) | Platform treasury | Enforced onchain by the paired factory at every launch |
| Shipping | 0% | Pass-through to carrier | Buyer pays at claim, merchant ships |
The launchpad rows apply identically on Base, Ethereum and Robinhood Chain. The paired suite is deployed on Base and Robinhood Chain only. B20 launches carry the same two splits but exist on Base only, because B20 is a Base-native protocol standard. Details on Token Launch.
Recipient addresses
- Onchain mint fees, upload payments, and the backend uploader co-owner role:
0xAabEc077428420333c45b6D84455d4EAE8Ee0625 - IPFS drops read their fee recipient from
NEXT_PUBLIC_PLATFORM_FEE_RECIPIENTat deploy time — there is no hardcoded fallback; a missing value refuses the deploy rather than routing the fee to the wrong wallet. - The launchpad treasury and staking recipients are read live from each chain's factory (
getProtocolAddresses()in the SDK) — the factory is the contract that validates the split, so it is also the source of truth for who receives it.
Never hardcode an x402 payTo
maxAmountRequired and payTo from the live 402 challenge on every call. A hardcoded receiver will eventually pay the wrong address.How the 5% mint fee works
The 5% mint fee is a constant in the contract (platformFeeBps() == 500). When a buyer pays, the contract splits the payment atomically inside mint() — 95% to the creator (minus the royalty if set), 5% to the platform fee recipient set in the constructor. The platform server is not in the payment path. ERC-20 payments follow the same split after the buyer's approve.
How the launchpad split works
The factory validates the split on every deploy. A configuration that drops or resizes the protocol slices reverts with Cc0InvalidProtocolSplit, whether it comes from the wizard, the SDK, or a raw contract call. The two shapes:
- Standard (WETH pool) — 7500 bps creator / 1500 bps stakers / 1000 bps treasury.
- Paired (arbitrary ERC-20 pool) — 8000 bps creator / 2000 bps treasury. No staker slice: the staking contract's reward token is immutably WETH, so a paired-token slice could never be paid out.
The staker slice always lands on the Base staking pool. Ethereum launches route it through a forwarder that bridges to Base; Robinhood Chain launches collect it in an escrow, which a Relay-based adapter moves across to that same pool.
Gas
Creators pay their own gas: deploying a store, a collection or a token is a transaction your own wallet sends. Uploading onchain artwork is billed as a gas reimbursement quoted before you confirm.
Token launches can be gas-covered as a promotion. When the sponsorship is switched on and the sponsor wallet is funded, the launch transaction is sent by the platform sponsor wallet while your wallet stays the fee recipient and the vault/airdrop admin. The wizard shows the toggle only when a sponsored launch is actually possible; otherwise your wallet signs and pays.
See Creator Rewards for the payout side.
