Skip to main content
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

The SDK’s 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):
Integrator-facing fields:
  • status — three values, monotone (Funding → Migrate → Migrated). Reads always safe; writes gated.
  • real_base, real_quote — current curve state. Combined with virtual_base / virtual_quote they are sufficient to compute spot price without touching the vaults. See bonding-curve.
  • total_base_sell vs real_base — “progress toward graduation” ratio for UIs.
  • migrate_type — selects whether MigrateToAmm or MigrateToCpswap is the valid graduation path. Token-2022 launches must use CPMM.
  • amm_creator_fee_on — only meaningful when graduating to CPMM. Picks creator_fee_on = OnlyQuoteToken (0) or BothToken (1) on the post-graduation CPMM pool. Despite the name, this enum effectively also drives the migration target — BothToken is paired with MigrateToAmm in current operational practice; QuoteToken with MigrateToCpswap. See creator-fees.
  • quote_protocol_fee / platform_fee / migrate_fee — three independent fee counters. Each has its own claim instruction; see instructions.
  • vesting_schedule — present on every PoolState but inactive when total_locked_amount == 0. See vesting for the full lifecycle.

The authority PDA

LaunchLab uses a single authority PDA across all launches, derived with no per-launch seed:
That single PDA is:
  • The authority on every launch’s base_vault and quote_vault.
  • The mint_authority on each launch’s base_mint (pre-graduation).
  • The signer on the post-graduation CPI to AMM v4 / CPMM (MigrateTo*).
  • The signer on ClaimVestedToken transfers out of the base vault.
The mint_authority is revoked immediately after MigrateToAmm / MigrateToCpswap so the supply is permanently fixed. Two additional PDAs gate the fee vaults:
These sign the transfer out of the corresponding fee vaults during ClaimCreatorFee and ClaimPlatformFeeFromVault.

Base mint

Created inline by Initialize with:
  • mint_authority = authority (revoked at graduation).
  • freeze_authority = None.
  • supply = supply, entirely minted into base_vault.
  • decimals chosen by the creator at Initialize (commonly 6).
Because the full supply is pre-minted, 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

Both base_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:
(Verify the exact seed prefixes from the source’s 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 via ClaimCreatorFee.
  • 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’s platform_fee_wallet sweeps it via ClaimPlatformFeeFromVault. There is also a per-launch sweep variant (ClaimPlatformFee) that pulls from the launch’s quote_vault directly without going through the aggregated vault.
The aggregated-vault pattern is what lets a high-volume creator or platform amortize the rent cost of fee accumulation across many launches.

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

Where to go next

Sources:
  • raydium-launch/programs/launchpad/src/states/pool.rsPoolState, 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 launchpad module.