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.
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
Rule of thumb: if a program ID in the wild does not match the table below, do not sign the transaction. A mismatched program ID is the single easiest way to lose funds on Solana.
On-chain programs
| Program | Program ID | Source |
|---|
| AMM v4 (Hybrid AMM + OpenBook) | 675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8 | raydium-amm |
| CPMM (Standard AMM) | CPMMoo8L3F4NbTegBCKVNunggL7H1ZpdTHKxQB5qKP1C | raydium-cp-swap |
| CLMM (Concentrated Liquidity) | CAMMCzo5YL8w4VFF8KVHrK22GGUsp5VTaW7grrKgrWqK | raydium-clmm |
| Stable AMM (StableSwap-style curve) | 5quBtoiQqxF9Jv6KYKctB59NT3gtJD2Y65kdnB1Uev3h | source not publicly available |
| Farm v3 (legacy RAY staking) | EhhTKczWMGQt46ynNeRX1WfeagwwJd7ufHvCDjRxjo5Q | source not publicly available |
| Farm v5 (legacy ecosystem farms) | 9KEPoZmtHUrBbhWN1v1KWLMkkvwY6WLtAVUCPRtRjP4z | source not publicly available |
| Farm v6 (current ecosystem farms) | FarmqiPv5eAj3j1GMdMCMUGXqPUvmquZtMy86QH6rzhG | source not publicly available |
| LaunchLab | LanMV9sAd7wArD4vJFi2qDdfnVhFxYSUg6eADduJ3uj | source not publicly available |
| AMM Routing (Raydium’s on-chain router) | routeUGWgWzqBWFcrCfv8tritsqukccJPu3q5GPP3xS | source not publicly available |
| Burn & Earn / LP Lock | LockrWmn6K5twhz3y9w1dQERbmgSaRkfnTeTKbpofwE | source not publicly available |
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), and raydium-clmm (CLMM) ship with public source repositories under github.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 in raydium-io/raydium-idl instead.
Shared admin authority
All Anchor-based programs (CLMM, CPMM, LaunchLab, Lock) share a single hardcoded admin Pubkey for instruction-level access control to admin paths (such as CreateAmmConfig or UpdatePoolStatus):
| Cluster | Admin |
|---|
| mainnet-beta | GThUX1Atko4tqhN2NaiTazWSeFWMuiUvfFnyJyUghFMJ |
| devnet | DRayqG9RXYi8WHgWEmRQGrUWRWbhjYWYkCRJDd6JBBak |
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.
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:
# CPMM fee configs (returns an array of {id, index, tradeFeeRate, ...})
GET https://api-v3.raydium.io/main/cpmm-config
# CLMM fee configs
GET https://api-v3.raydium.io/main/clmm-config
Default CPMM AmmConfig index 0 (standard 0.25% pool) fee parameters, for reference:
| Field | Value | Meaning |
|---|
trade_fee_rate | 2500 | 0.25% of trade volume |
protocol_fee_rate | 120000 | 12% of the trade fee (not volume) routed to protocol |
fund_fee_rate | 40000 | 4% of the trade fee routed to the fund multisig |
creator_fee_rate | 500 | 0.05% of trade volume to the pool creator (optional) |
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.
// CPMM — all seeds are static ASCII strings unless noted.
const [ammConfig] = PublicKey.findProgramAddressSync(
[Buffer.from("amm_config"), u16ToBytes(index)],
CPMM_PROGRAM_ID,
);
const [authority] = PublicKey.findProgramAddressSync(
[Buffer.from("vault_and_lp_mint_auth_seed")],
CPMM_PROGRAM_ID,
);
const [poolState] = PublicKey.findProgramAddressSync(
[Buffer.from("pool"), ammConfig.toBuffer(), token0Mint.toBuffer(), token1Mint.toBuffer()],
CPMM_PROGRAM_ID,
);
const [lpMint] = PublicKey.findProgramAddressSync(
[Buffer.from("pool_lp_mint"), poolState.toBuffer()],
CPMM_PROGRAM_ID,
);
const [vault0] = PublicKey.findProgramAddressSync(
[Buffer.from("pool_vault"), poolState.toBuffer(), token0Mint.toBuffer()],
CPMM_PROGRAM_ID,
);
const [vault1] = PublicKey.findProgramAddressSync(
[Buffer.from("pool_vault"), poolState.toBuffer(), token1Mint.toBuffer()],
CPMM_PROGRAM_ID,
);
const [observation] = PublicKey.findProgramAddressSync(
[Buffer.from("observation"), poolState.toBuffer()],
CPMM_PROGRAM_ID,
);
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
| Program | Program ID |
|---|
| AMM v4 | DRaya7Kj3aMWQSy19kSjvmuwq9docCHofyP9kanQGaav |
| CPMM | DRaycpLY18LhpbydsBWbVJtxpNv9oXPgjRSfpF2bWpYb |
| CLMM | DRayAUgENGQBKVaX8owNhgzkEDyoHTGVEGHVJT1E9pfH |
| Stable AMM | DRayDdXc1NZQ9C3hRWmoSf8zK4iapgMnjdNZWrfwsP8m |
| LaunchLab | DRay6fNdQ5J82H7xV6uq2aV3mNrUZ1J4PgSKsWgptcm6 |
| AMM Routing | DRaybByLpbUL57LJARs3j8BitTxVfzBg351EaMr5UTCd |
| Burn & Earn / LP Lock | DLockwT7X7sxtLmGH9g5kmfcjaBtncdbUmi738m5bvQC |
| Farm v3 / v5 / v6 | Not reliably published for devnet — confirm via the live API (https://api-v3-devnet.raydium.io/main/info) before use. |
Devnet REST API base: https://api-v3-devnet.raydium.io/ (same route shape as mainnet).
How to verify an address on-chain
- Solana Explorer. Paste the address into explorer.solana.com and confirm it’s marked
Program with a current upgrade authority. Mainnet-beta should show deploys signed by Raydium’s upgrade authority.
- CLI. Use
solana program show <PROGRAM_ID> -u mainnet-beta to inspect deploy slot, BPF loader, upgrade authority, and data length. Record these in your runbook.
- IDL attachment. Query the on-chain IDL with
anchor idl fetch <PROGRAM_ID> --provider.cluster mainnet. The IDL’s address field should match. The same 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_owner field and confirm it matches the current Raydium multisig published in security/admin-and-multisig.
If any of the four checks above disagrees with this page, treat this page as wrong and open an issue before writing new code against the addresses.
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.
Sources: