Source of truth. This page is the only place in the docs that lists program addresses verbatim. Other pages link here. If an ID changes, update it only here and every reference in the site stays consistent.Always cross-check values against the live API (
https://api-v3.raydium.io/main/info) before signing real transactions.Mainnet-beta
On-chain programs
Notes:
- AMM v4 and Farm v3/v5 are retained for existing pools and positions. The Raydium UI and SDK route new pool creation and new ecosystem farms to CPMM, CLMM, and Farm v6 respectively — see
protocol-overview/versions-and-migration. - The Farm v3 ID above doubles as the $RAY single-asset staking program. Behavior is identical to Farm v3 for LP staking.
- Stable AMM is a separate program that the AMM Routing program can target alongside AMM v4, CPMM, and CLMM. Liquidity is thin compared to the other three programs and the SDK does not expose a first-class API for it; integrators that route through it generally do so via the router.
- Source-code availability. Of the on-chain programs above, only
raydium-amm(AMM v4),raydium-cp-swap(CPMM), andraydium-clmm(CLMM) ship with public source repositories undergithub.com/raydium-io. Stable AMM, LaunchLab, AMM Routing, Burn & Earn / LP Lock, and the Farm programs are not publicly available — verify them against the live API, the on-chain bytecode, and the published IDLs inraydium-io/raydium-idlinstead.
Shared admin authority
Every Raydium program — AMM v4 included — shares a single hardcoded adminPubkey for instruction-level access control to admin paths. It is config_feature::amm_owner::ID in AMM v4 (gating SetParams, CreateConfigAccount and UpdateConfigAccount, and used as the default pnl_owner) and admin::ID in the Anchor programs — CLMM, CPMM, LaunchLab, Lock — gating paths such as CreateAmmConfig or UpdatePoolStatus:
Account-level operational authorities (e.g.
protocol_owner, fund_owner on CPMM/CLMM AmmConfig, or the migration wallets on LaunchLab GlobalConfig) are stored on-chain and may differ from the program admin. Read them directly from the relevant config account before sending high-stakes transactions.
CPMM permission-PDA creator authority
CreatePermissionPda accepts either the shared program admin above or a dedicated owner. Since the 2026-09 CPMM upgrade, ClosePermissionPda accepts the same two signers; before that it was admin-only.
Support-mint registry authorities
CreateSupportMintAssociated and CloseSupportMintAssociated accept either the shared program admin or the program’s own dedicated owner below. Registering a mint admits it past that program’s Token-2022 extension allow-list — see reference/token-2022-support. CPMM and CLMM each keep their own registry PDA and their own authority; neither key works on the other program.
CPMM fee-owner wallets
Since the 2026-09 CPMM upgrade,CreateAmmConfig writes these fixed keys into the new config’s protocol_owner and fund_owner instead of copying the admin signer’s key. CollectProtocolFee and CollectFundFee accept the key stored on the config or the shared program admin (|| crate::admin::ID), so the admin remains an accepted signer — what changed is only where the proceeds go by default.
Protocol fee collection wallets
Where each program’s protocol-side share of trading fees accumulates. These are ordinary token-holding wallets, so a single address carries a mixed set of SPL mints (wSOL and USDC from SOL/USDC pools, wSOL and RAY from SOL/RAY pools, and so on).
Stable AMM’s protocol share accrues in-vault as
out_put.need_take_pnl_* and is swept by WithdrawPnl rather than sitting at a standing wallet. For CPMM, read protocol_owner off the specific AmmConfig before building a collection transaction — configs created before the 2026-09 upgrade may hold a different key.
Excess-lamports collection wallets
Each of the three programs upgraded on 2026-09-09 gained an admin instruction that returns lamports held above the rent-exempt minimum on program-controlled accounts, following the SIMD-0437 rent reduction. Each program hardcodes its own destination wallet, and each is a dedicated key — not the shared program admin.
CPMM and LaunchLab additionally accept the shared program admin as the signer. AMM v4 accepts only the wallet above — it has no admin fallback. AMM v4 also compiles a separate testnet key (
75KWb5XcqPTgacQyNw9P5QU2HL3xpezEVcgsFCiJgTT) under its testnet feature.
These instructions move lamports only; they never touch a token balance, close an account, or change pool state. See products/amm-v4/instructions, products/cpmm/instructions, and products/launchlab/instructions.
LaunchLab delegated config creator
CreateConfig accepts either the shared program admin or the delegated authority below. The delegated role can create a new GlobalConfig; it cannot call the admin-only UpdateConfig path for an existing account.
CLMM restricted-issuer freeze authorities
When either vault mint in a CLMM pool has one of the freeze authorities below, new positions opened through a V2 path have their position NFT token account frozen. The list isfrozen_position_nft_authorities::IDS in the CLMM program, and its single entry is the issuer authority that CLMM’s since-removed Superstate detection also matched on. These are underlying-asset issuer authorities used only as match keys. The CLMM pool PDA, not the issuer key, becomes freeze authority for the position NFT mint.
The list is hardcoded in the CLMM program. Adding or removing an authority requires a program upgrade.
Shared config / PDA conventions
Several Raydium programs expose config accounts whose public keys are stable and listed on the public API. Prefer the API lookup over hardcoding:Pool-creation fee receivers
Both CPMM and AMM v4 validate their pool-creation fee destination by exact address, so it has to already exist on whatever cluster you are testing against. CLMM has no separate pool-creation fee.
AMM v4 also compiles
3TRTX4dXUpp2eqxi3tvQDFYUV7SdDJjcPE3Y4mbtftaX under its testnet feature. CPMM rejects a mismatch with Anchor’s ConstraintAddress (2012); AMM v4 with InvalidFee.
CLMM limit-order keeper
SettleLimitOrder and CloseLimitOrder accept either the order’s own owner or the program-wide keeper key below. The keeper cannot open, increase or decrease orders, and output always lands in the order owner’s account — see security/admin-and-multisig.
Default CPMM
AmmConfig index 0 (standard 0.25% pool) fee parameters, for reference:
See
products/cpmm/fees for how the splits compose, and reference/fee-comparison for the cross-product matrix.
PDA seeds
The seeds below are canonical and used by both the SDK and on-chain CPIs. Always compute PDAs; do not hardcode derived addresses.token0Mint / token1Mint are sorted by public-key byte order (token0 < token1) before hashing. Getting this wrong yields a valid PDA for a non-existent pool.
The equivalent CLMM seeds follow the same style; see products/clmm/accounts.
Devnet
Devnet REST API base:
https://api-v3-devnet.raydium.io/ (same route shape as mainnet).
Upgrade authority
Every Raydium program on mainnet-beta is deployed under the BPF Upgradeable Loader with the same upgrade authority — the program-upgrade Squads multisig’s vault:
Verified on-chain 2026-09-09 for AMM v4, CPMM, CLMM, Stable AMM, Farm v6, LaunchLab, AMM Routing and Lock — all eight report that authority, and none is immutable. Re-check with
solana program show <PROGRAM_ID> -u mainnet-beta before a high-stakes deployment; see security/admin-and-multisig for the multisig’s threshold and signing practice.
Program-level config accounts
All values read from mainnet-beta on 2026-09-09. Fee rates on these accounts are admin-mutable — read them live rather than caching.
How to verify an address on-chain
- Solana Explorer. Paste the address into explorer.solana.com and confirm it’s marked
Programwith a current upgrade authority. Mainnet-beta should show deploys signed by Raydium’s upgrade authority. - CLI. Use
solana program show <PROGRAM_ID> -u mainnet-betato inspect deploy slot, BPF loader, upgrade authority, and data length. Record these in your runbook. - IDL attachment.
anchor idl fetch <PROGRAM_ID> --provider.cluster mainnetworks for CLMM, LaunchLab and Lock, which still keep a legacyanchor:idlaccount owned by the program itself. It does not work for CPMM: CPMM’s on-chain IDL moved to the Program Metadata program (ProgM6JCCvbYkfKqJYHePx4xxSUSqJp7rh8Lyv7nk7S) in the 2026-09 upgrade, so fetch it from there instead. AMM v4, Stable AMM and Farm have no on-chain IDL. The IDLs are mirrored at github.com/raydium-io/raydium-idl — diff the on-chain IDL against the repo before trusting it. - Config/admin authorities. For CPMM/CLMM config accounts, read the
owner/protocol_ownerfield and confirm it matches the current Raydium multisig published insecurity/admin-and-multisig.
Updating this page
- Changes to program IDs are safety-critical. Do not ship a program-ID change without (a) linking to the Raydium announcement, (b) adding an entry in
reference/changelog, and (c) running a link-check over the docs to confirm no page still references the old value. - Deprecations stay in the table with a status note rather than being deleted — existing pools still resolve via the old program.
- Live API:
https://api-v3.raydium.io/main/info - github.com/raydium-io/raydium-idl
- github.com/raydium-io/raydium-cp-swap

