Reference
Launchpad SDK
@cc0company/sdk — launch tokens, claim creator fees, and stake $cc0company from any website, app, or agent. One dependency: viem.
Install
npm install @cc0company/sdk viem
Open source on GitHub (CC0-1.0, of course). Three clients: Cc0Launchpad (launch), Cc0Fees (claim creator fees), Cc0Staking (stake $cc0company, earn ETH).
Launch a token
import { Cc0Launchpad } from '@cc0company/sdk';
import { createWalletClient, custom } from 'viem';
import { base } from 'viem/chains';
const walletClient = createWalletClient({
chain: base, // Base only for now
transport: custom(window.ethereum),
});
const launchpad = new Cc0Launchpad({ walletClient });
const { tokenAddress, txHash } = await launchpad.launchToken({
name: 'My Token',
symbol: 'MTK',
image: imageBytes, // any https URL, data: URL, Blob or bytes — pinned to
// IPFS by cc0.company automatically (the URI is written
// on-chain forever). ipfs:// URIs pass through untouched.
description: 'My awesome token', // stored on-chain
feeTier: 1, // 1 | 2 | 3 % — or feeMode: 'dynamic'
});One transaction: token + Uniswap V4 pool + locked LP + fee split, atomically. The deployer's wallet signs; the token is live and tradable the moment the transaction lands.
Any wallet — browser, private key, CDP, Bankr, Safe
Every client takes a viem walletClient, a viem account (e.g. privateKeyToAccount), or a provider-agnostic sender — { address, send }. With a sender, the SDK builds the transaction (image pinned, gas + EIP-1559 fees pre-estimated, BigInt-free tx.json for JSON transports), your infra signs and submits, the SDK waits, parses and registers. Coinbase CDP, Bankr and Safes all integrate this way — full recipes in the README.
All options
await launchpad.launchToken({
name: 'My Token',
symbol: 'MTK',
image: imageBytes, // pinned to IPFS automatically
// Fees — static tier or dynamic 1%→3% volatility preset
feeMode: 'static', // 'static' (default) | 'dynamic'
feeTier: 1, // 1 | 2 | 3 (static only)
// Split YOUR 75% across up to 5 wallets
// (bps of total fees — must sum to exactly 7500)
creatorRewards: [
{ recipient: '0xYou', bps: 5000, feePreference: 'both' },
{ recipient: '0xCofounder', bps: 2500, feePreference: 'paired' },
],
// Anti-snipe: descending tax… or omit for the 2-block MEV delay
sniperTax: { startingBps: 800_000, endingBps: 50_000, secondsToDecay: 15 },
// Lock supply for yourself (lockup ≥ 7 days, optional vesting)
vault: { percentage: 10, lockupSeconds: 604800, vestingSeconds: 2592000 },
// Merkle airdrop (lockup ≥ 1 day)
airdrop: { merkleRoot: '0x…', percentage: 5 },
// Buy your own token at launch
devBuyEth: '0.05',
});The enforced split
Every launch carries the protocol split — validated by the factory on-chain, not by this SDK:
- 75% creator — yours. Splittable at launch via
creatorRewards, redirectable any time after (you are your slices' admin). - 15% stakers + 10% treasury — pinned by the locker. A config that drops or resizes them reverts with
Cc0InvalidProtocolSplit, even on a raw factory call.
import { PROTOCOL_SPLIT } from '@cc0company/sdk';
// { CREATOR_BPS: 7500, STAKING_BPS: 1500, TREASURY_BPS: 1000 }
// Live protocol addresses, read from the locker:
const { staking, treasury, admin } = await launchpad.getProtocolAddresses();Your token on cc0.company — automatic
Every SDK launch is registered automatically: your token gets its page at cc0.company/token/{address} (live chart, swap, one-tap fee claim) and shows up in browse + search. The result's registered flag tells you it worked — a registry hiccup never fails the on-chain launch. Opt out with register: false.
Integrating at the raw contract level without the SDK? Register your launch with the same call the SDK makes:
POST https://cc0.company/api/store/token-launches
{
"token_address": "0x…",
"chain": "base",
"tx_hash": "0x…",
"protocol": "cc0strategy",
"name": "My Token",
"symbol": "MTK",
"image_url": "ipfs://…",
"creator_wallet": "0x…"
}Contracts
- Factory:
0xf9007657b627c5421d6eBD5D71F86CDfCdc7dA8D - LP locker:
0x09385aba38D7007cde80F137a629f7f43dA40A3F - Fee locker:
0xC04bdF721FA5CEc839819864FA86F3D48B89Fcee - Staking:
0x38cE743b88c54eD1aF84816Ff596E518d16DFF95
Full list with Basescan links on Smart Contracts.
