Launching a token
Token creators use createLaunchpad() to deploy a new token backed by a bonding curve. This single transaction:
mints the token
creates on-chain metadata
initializes the bonding curve
opens trading immediately
No additional setup is required.
How token launches work
When a token is launched, the following steps happen atomically:
Token creation A new SPL token (or Token-2022 token) is minted with the specified supply.
Metadata creation On-chain metadata is created via Metaplex using the provided name, symbol, and URI.
Bonding curve initialization A bonding curve pool is initialized using the configured parameters.
Trading begins Users can immediately buy and sell the token on the bonding curve.
Migration Once the fundraising goal is reached, liquidity automatically migrates to a Raydium pool.
Creating a token launch
import {
TxVersion,
LAUNCHPAD_PROGRAM,
getPdaLaunchpadConfigId,
CpmmCreatorFeeOn,
} from '@raydium-io/raydium-sdk-v2'
import { initSdk } from './config'
import { Keypair, PublicKey } from '@solana/web3.js'
import { NATIVE_MINT } from '@solana/spl-token'
import BN from 'bn.js'
const createToken = async () => {
const raydium = await initSdk()
// Generate a new mint keypair
const tokenKeypair = Keypair.generate()
// Derive global config (SOL-quoted, constant product)
const configId = getPdaLaunchpadConfigId(
LAUNCHPAD_PROGRAM,
NATIVE_MINT,
0,
0
).publicKey
const { execute, extInfo } = await raydium.launchpad.createLaunchpad({
programId: LAUNCHPAD_PROGRAM,
// Token configuration
mintA: tokenKeypair.publicKey,
decimals: 6,
name: 'My token',
symbol: 'MTK',
uri: 'https://arweave.net/metadata.json',
// Platform (optional)
platformId: new PublicKey('your-platform-id'),
// Global config
configId,
// Migration destination
migrateType: 'cpmm',
// Bonding curve parameters
supply: new BN('1000000000000000'),
totalSellA: new BN('793100000000000'),
totalFundRaisingB: new BN('85000000000'),
// Vesting (optional)
totalLockedAmount: new BN('0'),
cliffPeriod: new BN('0'),
unlockPeriod: new BN('0'),
// Initial buy (optional)
createOnly: true,
buyAmount: new BN('0'),
slippage: new BN(100),
// Post-migration creator fee
creatorFeeOn: CpmmCreatorFeeOn.OnlyTokenB,
// Transaction settings
txVersion: TxVersion.V0,
extraSigners: [tokenKeypair],
})
const { txIds } = await execute({ sendAndConfirm: true, sequentially: true })
console.log('Pool id:', extInfo.address.poolId.toBase58())
console.log('Token mint:', tokenKeypair.publicKey.toBase58())
}Parameter reference
Token configuration
mintA
PublicKey
Yes
Public key of the new token mint. Generate a new keypair and include it in extraSigners.
decimals
number
No
Number of decimal places. Default: 6.
name
string
Yes
Token name used in on-chain metadata.
symbol
string
Yes
Token ticker symbol. Max 10 characters.
uri
string
Yes
Metadata JSON URL (Arweave, IPFS, or any public URL).
Platform and global config
platformId
PublicKey
No
Platform configuration to launch on. Defaults to Raydium official platform.
configId
PublicKey
Yes
Global config defining quote token and curve type.
configInfo
object
No
Pre-fetched config data. Automatically fetched if omitted.
Bonding curve parameters
supply
BN
No
Total token supply. Minimum: 10,000,000 (pre-decimals).
totalSellA
BN
No
Tokens sold on the bonding curve. Must be ≥ 20% of supply.
totalFundRaisingB
BN
No
Quote token amount to raise before migration.
migrateType
string
Yes
Migration destination: cpmm or amm.
Understanding supply distribution
totalSellA: tokens sold via the bonding curvetotalLockedAmount: tokens reserved for vestingmigrateAmount: tokens migrated to the AMM pool (must be ≥ 20% of supply)
Vesting parameters (optional)
totalLockedAmount
BN
No
Tokens reserved for vesting. Max 30% of supply.
cliffPeriod
BN
No
Seconds after migration before vesting starts.
unlockPeriod
BN
No
Linear vesting duration in seconds.
Note: the vesting start time is automatically set to the migration block timestamp. Vesting recipients are configured separately using
createVesting().
Initial buy parameters (optional)
createOnly
boolean
No
true creates the token only. false creates and executes an initial buy.
buyAmount
BN
No
Quote token amount to spend on the initial buy. Required if createOnly is false.
slippage
BN
No
Maximum slippage in basis points (100 = 1%).
minMintAAmount
BN
No
Minimum tokens to receive. Auto-calculated if omitted.
Post-migration settings
creatorFeeOn
CpmmCreatorFeeOn
No
Which token(s) creator fees are collected in after migration.
CpmmCreatorFeeOn options
OnlyTokenB
Creator fees are collected only in the quote token (recommended).
BothToken
Creator fees are collected in both the launched token and the quote token.
Referral parameters (optional)
shareFeeRate
BN
No
Referrer share of trading fees (bps × 100). Cannot exceed maxShareFeeRate from the global config.
shareFeeReceiver
PublicKey
No
Wallet that receives referral fees. Applies to the initial buy only.
Token-2022 launches
LaunchLab supports Token-2022 tokens with transfer fee extensions. Transfer fees are automatically collected on every token transfer.
Important notes for Token-2022 launches
migration is always
cpmm(AMMv4 does not support Token-2022)after migration, transfer fee authorities are transferred to the platform’s
transferFeeExtensionAuthwalletthe platform can modify fee rates or claim accumulated withheld fees
Getting available configs
Global configs determine which quote tokens and curve types are available. Fetch configs from the API or derive them directly.
From API
Direct derivation
Common configurations
SOL (NATIVE_MINT)
0 (constant product)
Standard launch denominated in SOL
USDC
0 (constant product)
Stablecoin-denominated launch
Pool lifecycle
After creation, the pool progresses through these states:
Trading
0
Bonding curve is active. Users can buy and sell tokens.
Migrate
1
Fundraising goal reached. Migration to AMM in progress.
Migrated
2
Migration complete. Token now trades on Raydium AMM.
The transition from trading to migrate happens automatically when totalFundRaisingB worth of quote tokens have been raised.
Deriving the pool id
After creation, you can derive the pool id for use in trading functions:
Next steps
Once your token is launched:
share the pool — users can trade using
buyToken()andsellToken()monitor progress — track fundraising progress toward
totalFundRaisingBclaim fees — use
claimCreatorFee()to collect bonding curve trading feespost-migration — claim LP fees using
harvestLockLiquidity()
Last updated
Was this helpful?