Documentation Index
Fetch the complete documentation index at: https://docs.raydium.io/llms.txt
Use this file to discover all available pages before exploring further.
This page documents the per-launch account graph: the
PoolState (the root state account for one launch), its two vaults, the authority PDA, and the post-graduation references it gains when the launch settles.For the protocol-level config that bounds every launch, see products/launchlab/global-config. For the per-platform overlay, see products/launchlab/platform-config. For vesting accounts (VestingSchedule on PoolState, VestingRecord per beneficiary), see products/launchlab/vesting.Account inventory
| Account | Owner | Purpose |
|---|---|---|
GlobalConfig | LaunchLab program | Protocol-level rules: fees, supply floors, migration wallets. One per (curve_type, index). |
PlatformConfig | LaunchLab program | Per-platform overlay: branding, platform fee, NFT split at graduation, curve-shape whitelist. |
PoolState | LaunchLab program | Per-launch root state: mints, vaults, curve params, sold counters, fee counters, vesting schedule, graduation status. |
authority | LaunchLab program | Single PDA at seed [b"vault_auth_seed"] that owns vaults across all launches and signs the post-graduation CPI. |
base_vault | SPL Token / Token-2022 | Per-launch vault holding the unsold base tokens. |
quote_vault | SPL Token | Per-launch vault holding accumulated quote tokens. |
VestingRecord | LaunchLab program | Per-beneficiary cliff + linear-unlock record. Optional. |
creator_fee_vault | SPL Token | Per-creator + per-quote-mint vault holding accrued creator fees, swept by ClaimCreatorFee. |
platform_fee_vault | SPL Token | Per-platform + per-quote-mint vault holding accrued platform fees, swept by ClaimPlatformFeeFromVault. |
(post-graduation) cpmm_pool_state or amm_pool_state | CPMM / AMM v4 program | The pool created by MigrateToCpswap / MigrateToAmm. |
| (post-graduation) Fee Key NFT | LP-Lock program | Wraps the creator’s slice of LP at CPMM graduation; entitles the holder to ClaimCreatorFee on the CPMM pool. |
raydium.launchpad.getLaunchById returns PoolState plus a flag indicating whether the launch has graduated; if it has, the post-migration pool ID is included.
PoolState
The per-launch root state. Field names below match the on-chain Rust struct (states/pool.rs); some values are simplified for readability — consult the source for the exact memory layout.
PoolStatus values (from the Anchor IDL):
status— three values, monotone (Funding → Migrate → Migrated). Reads always safe; writes gated.real_base,real_quote— current curve state. Combined withvirtual_base/virtual_quotethey are sufficient to compute spot price without touching the vaults. Seebonding-curve.total_base_sellvsreal_base— “progress toward graduation” ratio for UIs.migrate_type— selects whetherMigrateToAmmorMigrateToCpswapis the valid graduation path. Token-2022 launches must use CPMM.amm_creator_fee_on— only meaningful when graduating to CPMM. Pickscreator_fee_on = OnlyQuoteToken(0) orBothToken(1) on the post-graduation CPMM pool. Despite the name, this enum effectively also drives the migration target —BothTokenis paired withMigrateToAmmin current operational practice;QuoteTokenwithMigrateToCpswap. Seecreator-fees.quote_protocol_fee/platform_fee/migrate_fee— three independent fee counters. Each has its own claim instruction; seeinstructions.vesting_schedule— present on everyPoolStatebut inactive whentotal_locked_amount == 0. Seevestingfor the full lifecycle.
The authority PDA
LaunchLab uses a single authority PDA across all launches, derived with no per-launch seed:- The authority on every launch’s
base_vaultandquote_vault. - The
mint_authorityon each launch’sbase_mint(pre-graduation). - The signer on the post-graduation CPI to AMM v4 / CPMM (
MigrateTo*). - The signer on
ClaimVestedTokentransfers out of the base vault.
mint_authority is revoked immediately after MigrateToAmm / MigrateToCpswap so the supply is permanently fixed.
Two additional PDAs gate the fee vaults:
ClaimCreatorFee and ClaimPlatformFeeFromVault.
Base mint
Created inline byInitialize with:
mint_authority = authority(revoked at graduation).freeze_authority = None.supply = supply, entirely minted intobase_vault.decimalschosen by the creator atInitialize(commonly 6).
base_mint.supply is constant for the life of the launch. Curve buys move tokens from base_vault to the buyer, but do not call mint_to.
Initialize / InitializeV2 create SPL Token launches. The dedicated InitializeWithToken2022 instruction lets the base mint be a Token-2022 mint (with optional TransferFeeConfig); the quote mint is still SPL Token. Token-2022 launches must graduate to a CPMM pool because AMM v4 only supports SPL Token vaults.
Vaults
Bothbase_vault and quote_vault are standard SPL Token accounts owned by the LaunchLab authority PDA. Addresses are stored on PoolState and can also be derived:
Initialize accounts struct before relying on a derivation in production.)
Fee vaults
Two PDAs aggregate fees across launches:- Creator fee vault — PDA at seeds
[creator, quote_mint]. Every launch that earns the same creator fees on the same quote mint pours into the same vault. The creator sweeps it viaClaimCreatorFee. - Platform fee vault — PDA at seeds
[platform_config, quote_mint]. Every launch routed through the same platform that uses the same quote mint pours into the same vault. The platform’splatform_fee_walletsweeps it viaClaimPlatformFeeFromVault. There is also a per-launch sweep variant (ClaimPlatformFee) that pulls from the launch’squote_vaultdirectly without going through the aggregated vault.
Quote vault ↔ real_quote
quote_vault.balance and PoolState.real_quote should stay in sync. They can drift by at most the sum of the three pending fee counters (quote_protocol_fee, platform_fee, migrate_fee), which sit in the vault but belong to the fee counters and not the curve reserve. The curve math always uses real_quote, never the raw vault balance.
Pre-graduation invariant:
Lifecycle account transitions
| Event | Status | real_base | real_quote | Post-graduation pool |
|---|---|---|---|---|
Initialize | Funding | 0 | 0 | — |
BuyExactIn / BuyExactOut | Funding | +base_out | +quote_in_after_fee | — |
SellExactIn / SellExactOut | Funding | −base_in | −quote_out_before_fee | — |
MigrateToAmm / MigrateToCpswap | Funding → Migrate → Migrated | (frozen) | (frozen) | created, LP split per PlatformConfig |
ClaimCreatorFee / ClaimPlatformFee* | any | — | — | drains a fee vault |
CreateVestingAccount | Funding | — | — | bumps vesting_schedule.allocated_share_amount |
ClaimVestedToken | Migrated only | — | — | drains base_vault |
Where to go next
products/launchlab/bonding-curve— the math behindreal_base↔real_quote.products/launchlab/instructions— per-instruction account lists.products/launchlab/global-config— protocol-level binding.products/launchlab/platform-config— platform overlay.products/launchlab/vesting— locked supply mechanics.products/cpmm/accounts— what the post-graduationcpmm_pool_statelooks like.
raydium-launch/programs/launchpad/src/states/pool.rs—PoolState,PoolStatus,VestingSchedule,AmmCreatorFeeOn.raydium-launch/programs/launchpad/src/lib.rs— PDA seed constants (AUTH_SEED,CREATOR_FEE_VAULT_AUTH_SEED,PLATFORM_FEE_VAULT_AUTH_SEED).- Raydium SDK v2
launchpadmodule.


