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.
GlobalConfig is the protocol-level configuration account. There can be many of them — keyed by (curve_type, index) — and every launch picks exactly one at Initialize time. The values on the chosen GlobalConfig then become hard limits for that launch’s parameters. For platform-level customization (per-platform fee rate, allowed curve shapes, NFT splits at graduation), see products/launchlab/platform-config.What it is
AGlobalConfig is a singleton-per-(curve_type, index) PDA that fixes the protocol-side rules every launch must obey:
- The kind of bonding curve allowed (
curve_type). - The trade fee rate the curve charges on every buy and sell.
- The migration fee charged at graduation.
- Floors on supply, lock rate, sell rate, and migrate rate.
- The quote mint (typically wrapped SOL or USDC) — the asset users buy with.
- Three protocol-side wallets: the protocol-fee owner, the migrate-fee owner, and the two migration-control wallets that authorize graduation to AMM v4 / CPMM.
- An optional flag (
requires_platform_auth) that gates which platforms may use this config.
GlobalConfig accounts are created and updated by the LaunchLab program admin (the hardcoded admin pubkey shared across Anchor-based Raydium programs — see reference/program-addresses).
Layout
create_config instruction is the source of truth.)
Field semantics
curve_type and index
Together these key a GlobalConfig uniquely. There is one GlobalConfig per (curve_type, index) pair:
curve_type = 0— Constant-product virtual-reserve curve. Default and most-used.curve_type = 1— Fixed-price curve.curve_type = 2— Linear-price curve.
index is a u16 that lets the admin publish multiple configurations per curve type (e.g., one with a tighter fee, one with a higher minimum quote raise). At Initialize the launch supplies a (curve_type, index) pair and the program loads the matching GlobalConfig.
Fees
trade_fee_rate— denominated in1/1_000_000of trade volume. Applied to every buy and sell on the curve. Theprotocol_fee_ownerclaims its share viaCollectFee.migrate_fee— a flat fee in lamports (or quote units, depending on configuration) charged once at graduation. Claimed bymigrate_fee_ownerviaCollectMigrateFee.max_share_fee_rate— initialized to10_000(100 bps). Caps the platform’s share fee rate from the bindingPlatformConfig(seeplatform-config). The program enforcestrade_fee_rate + max_share_fee_rate < RATE_DENOMINATOR_VALUE.
Supply and rate floors
These floors bound what curve-shape parameters a launch can pick atInitialize. If the creator’s CurveParams violate any of them, Initialize reverts with InvalidInput.
min_base_supply— the minimumsupply(no decimals) the curve can declare. Defaults to10_000_000.max_lock_rate— denominated in1/1_000_000; default300_000(30%). Bounds vesting viatotal_locked_amount <= supply * max_lock_rate / 1_000_000.min_base_sell_rate— denominated in1/1_000_000; default200_000(20%). Boundsbase_supply_graduation / supplyfrom below.min_base_migrate_rate— denominated in1/1_000_000; default200_000(20%). Bounds the number of tokens left over to seed the post-graduation pool.min_quote_fund_raising— minimumquote_reserve_targeta launch may declare (with decimals). Defaults to30_000_000_000units of the quote mint.
Quote mint and protocol wallets
quote_mint— the asset users buy with. Most launches use wrapped SOL (So111…112) or USDC (EPjF…Dt1v). OneGlobalConfigis bound to one quote mint; launches that need a different quote target a different(curve_type, index).protocol_fee_owner— pubkey that signsCollectFeeand claims the accrued protocol fees on every launch bound to this config. Stored on-chain; admin can rotate it viaUpdateConfig.migrate_fee_owner— pubkey that signsCollectMigrateFee.
Migration wallets
The two graduation paths require different signers:migrate_to_amm_wallet— must signMigrateToAmm. Used for launches whosemigrate_type = 0(graduate to AMM v4 + OpenBook).migrate_to_cpswap_wallet— must signMigrateToCpswap. Used formigrate_type = 1(graduate to CPMM). Token-2022 launches always take this path.
requires_platform_auth
A u8 flag (0 = anyone may use this config; non-zero = only platforms with a valid PlatformGlobalAccess PDA may launch against it). When set, every Initialize against this GlobalConfig must include a matching PlatformGlobalAccess account proving the platform has been pre-authorized via CreatePlatformGlobalAccess (an admin-only instruction). See platform-config for the platform-side mechanics.
Defaults at initialization
WhenCreateConfig is called, the program seeds many fields with hardcoded defaults:
curve_type, index, migrate_fee, trade_fee_rate, quote_mint, and the four wallet pubkeys explicitly at create time; subsequent values can be tuned via UpdateConfig.
How a launch picks a GlobalConfig
At Initialize, the creator passes:
(curve_type, index)to select whichGlobalConfigPDA to load.CurveParamsdescribing the curve shape (supply,total_base_sell,total_quote_fund_raising,migrate_type).VestingParamsdescribing locked supply.MintParamsfor the base mint.
curve_typematchesglobal_config.curve_type.supply >= global_config.min_base_supply.total_locked_amount <= supply * max_lock_rate / 1_000_000.total_base_sell >= supply * min_base_sell_rate / 1_000_000.(supply − total_base_sell − total_locked_amount) >= supply * min_base_migrate_rate / 1_000_000— i.e., enough tokens left over to seed the post-graduation pool.total_quote_fund_raising >= min_quote_fund_raising.- If
requires_platform_auth != 0, a validPlatformGlobalAccessPDA is included.
Initialize, the launch’s PoolState stores the global_config pubkey directly, so the binding is permanent.
Update path
UpdateConfig is admin-only and takes a (param: u8, value: u64) pair. Each param value selects which field to mutate:
param | Field changed |
|---|---|
| 0 | migrate_fee |
| 1 | trade_fee_rate |
| 2 | max_share_fee_rate |
| 3 | min_base_supply |
| 4 | max_lock_rate |
| 5 | min_base_sell_rate |
| 6 | min_base_migrate_rate |
| 7 | min_quote_fund_raising |
protocol_fee_owner, migrate_fee_owner, migrate_to_amm_wallet, migrate_to_cpswap_wallet) take a separate Pubkey argument shape; check the update_config source for the exact dispatch table before composing an admin transaction.
requires_platform_auth is toggled via set_requires_platform_auth(bool).
Reading a GlobalConfig from a client
getAllGlobalConfigs helper or query the LaunchLab API endpoint that mirrors them; the on-chain account count is small (single digits in practice).
Pointers
products/launchlab/platform-config— per-platform overlay that constrains curve shape further.products/launchlab/accounts— full account graph for a launch.products/launchlab/instructions—Initializeand update instructions.reference/program-addresses— admin pubkey, program ID, shared authorities.
raydium-launch/programs/launchpad/src/states/config.rs—GlobalConfigstruct andinitialize.raydium-launch/programs/launchpad/src/lib.rs—create_config,update_config.


