Reference

Launchpad SDK

@cc0company/sdk — launch tokens, claim creator fees, and stake $cc0company from any website, app, or agent. One dependency: viem.

Install

bash
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

typescript
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

typescript
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.
typescript
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();
Fees accrue in the fee locker (0xC04bdF721FA5CEc839819864FA86F3D48B89Fcee) as trades happen. Claim from your token's page on cc0.company — the claim is permissionless and always pays the creator wallet.

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:

bash
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.