权威信息源。本页是文档中唯一逐字列出程序地址的页面,其他页面都链接到这里。如果 ID 发生变化,仅在此处更新,网站中的所有引用都将保持一致。在签署真实交易前,始终根据实时 API(https://api-v3.raydium.io/main/info)交叉检查这些值。
Mainnet-beta
经验法则:如果某个程序 ID 与下表不匹配,不要签署该交易。程序 ID 不匹配是在 Solana 上损失资金最简单的方式。
链上程序
| 程序 | 程序 ID | 源代码 |
|---|
| AMM v4(混合 AMM + OpenBook) | 675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8 | raydium-amm |
| CPMM(标准 AMM) | CPMMoo8L3F4NbTegBCKVNunggL7H1ZpdTHKxQB5qKP1C | raydium-cp-swap |
| CLMM(集中流动性) | CAMMCzo5YL8w4VFF8KVHrK22GGUsp5VTaW7grrKgrWqK | raydium-clmm |
| Stable AMM(StableSwap 风格曲线) | 5quBtoiQqxF9Jv6KYKctB59NT3gtJD2Y65kdnB1Uev3h | 源代码不公开 |
| Farm v3(legacy RAY 质押) | EhhTKczWMGQt46ynNeRX1WfeagwwJd7ufHvCDjRxjo5Q | 源代码不公开 |
| Farm v5(legacy 生态农场) | 9KEPoZmtHUrBbhWN1v1KWLMkkvwY6WLtAVUCPRtRjP4z | 源代码不公开 |
| Farm v6(当前生态农场) | FarmqiPv5eAj3j1GMdMCMUGXqPUvmquZtMy86QH6rzhG | 源代码不公开 |
| LaunchLab | LanMV9sAd7wArD4vJFi2qDdfnVhFxYSUg6eADduJ3uj | 源代码不公开 |
| AMM 路由(Raydium 的链上路由程序) | routeUGWgWzqBWFcrCfv8tritsqukccJPu3q5GPP3xS | 源代码不公开 |
| 销毁与赚取 / LP 锁定 | LockrWmn6K5twhz3y9w1dQERbmgSaRkfnTeTKbpofwE | 源代码不公开 |
注意:
- AMM v4 和 Farm v3/v5 保留用于现有的池和头寸。Raydium UI 和 SDK 将新池的创建和新生态农场分别路由到 CPMM、CLMM 和 Farm v6——见
protocol-overview/versions-and-migration。
- 上表中的 Farm v3 ID 同时用作 $RAY 单资产质押程序。对于 LP 质押,其行为与 Farm v3 相同。
- Stable AMM 是一个独立程序,AMM 路由程序可以与 AMM v4、CPMM 和 CLMM 一起路由到它。与其他三个程序相比,流动性较少,SDK 不为其公开第一等级的 API;通过它进行路由的集成者通常通过路由程序进行。
- 源代码可用性。在上述链上程序中,只有
raydium-amm(AMM v4)、raydium-cp-swap(CPMM)和 raydium-clmm(CLMM)在 github.com/raydium-io 下有公开源代码库。Stable AMM、LaunchLab、AMM 路由、销毁与赚取 / LP 锁定和 Farm 程序不公开——验证它们需针对实时 API、链上字节码和 raydium-io/raydium-idl 中发布的 IDL。
共享管理员权限
所有基于 Anchor 的程序(CLMM、CPMM、LaunchLab、Lock)共享一个硬编码的管理员 Pubkey,用于指令级别的访问控制到管理员路径(如 CreateAmmConfig 或 UpdatePoolStatus):
| 集群 | 管理员 |
|---|
| mainnet-beta | GThUX1Atko4tqhN2NaiTazWSeFWMuiUvfFnyJyUghFMJ |
| devnet | DRayqG9RXYi8WHgWEmRQGrUWRWbhjYWYkCRJDd6JBBak |
账户级别的操作权限(例如 CPMM/CLMM AmmConfig 上的 protocol_owner、fund_owner,或 LaunchLab GlobalConfig 上的迁移钱包)存储在链上,可能与程序管理员不同。在发送高风险交易前,直接从相关配置账户读取它们。
共享配置 / PDA 约定
几个 Raydium 程序公开了配置账户,其公钥是稳定的,列在公共 API 上。优先使用 API 查询而不是硬编码:
# CPMM 费用配置(返回 {id, index, tradeFeeRate, ...} 的数组)
GET https://api-v3.raydium.io/main/cpmm-config
# CLMM 费用配置
GET https://api-v3.raydium.io/main/clmm-config
默认 CPMM AmmConfig 索引 0(标准 0.25% 池)的费用参数参考:
| 字段 | 值 | 含义 |
|---|
trade_fee_rate | 2500 | 交易额的 0.25% |
protocol_fee_rate | 120000 | 交易费的 12%(不是交易额)路由到协议 |
fund_fee_rate | 40000 | 交易费的 4% 路由到基金多签 |
creator_fee_rate | 500 | 交易额的 0.05% 给池创建者(可选) |
见 products/cpmm/fees 了解分拆如何组成,以及 reference/fee-comparison 了解跨产品矩阵。
PDA 种子
下面的种子是规范的,由 SDK 和链上 CPI 都使用。始终计算 PDA;不要硬编码派生地址。
// CPMM — 所有种子都是静态 ASCII 字符串,除非另有说明。
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 在哈希前按公钥字节顺序排序(token0 < token1)。搞错这一点会得到一个非存在池的有效 PDA。
等效的 CLMM 种子遵循相同的风格;见 products/clmm/accounts。
Devnet
| 程序 | 程序 ID |
|---|
| AMM v4 | DRaya7Kj3aMWQSy19kSjvmuwq9docCHofyP9kanQGaav |
| CPMM | DRaycpLY18LhpbydsBWbVJtxpNv9oXPgjRSfpF2bWpYb |
| CLMM | DRayAUgENGQBKVaX8owNhgzkEDyoHTGVEGHVJT1E9pfH |
| Stable AMM | DRayDdXc1NZQ9C3hRWmoSf8zK4iapgMnjdNZWrfwsP8m |
| LaunchLab | DRay6fNdQ5J82H7xV6uq2aV3mNrUZ1J4PgSKsWgptcm6 |
| AMM 路由 | DRaybByLpbUL57LJARs3j8BitTxVfzBg351EaMr5UTCd |
| 销毁与赚取 / LP 锁定 | DLockwT7X7sxtLmGH9g5kmfcjaBtncdbUmi738m5bvQC |
| Farm v3 / v5 / v6 | 不可靠地发布到 devnet——使用前通过实时 API(https://api-v3-devnet.raydium.io/main/info)确认。 |
Devnet REST API 基址:https://api-v3-devnet.raydium.io/(与 mainnet 相同的路由结构)。
如何在链上验证地址
- Solana Explorer。将地址粘贴到 explorer.solana.com 并确认它标记为
Program 且有当前升级权限。Mainnet-beta 应显示由 Raydium 升级权限签署的部署。
- CLI。使用
solana program show <PROGRAM_ID> -u mainnet-beta 检查部署槽位、BPF 加载器、升级权限和数据长度。在你的运行手册中记录这些。
- IDL 附件。使用
anchor idl fetch <PROGRAM_ID> --provider.cluster mainnet 查询链上 IDL。IDL 的 address 字段应该匹配。相同的 IDL 也镜像在 github.com/raydium-io/raydium-idl——在信任前,将链上 IDL 与仓库进行 diff。
- 配置/管理员权限。对于 CPMM/CLMM 配置账户,读取
owner/protocol_owner 字段并确认它与在 security/admin-and-multisig 中发布的当前 Raydium 多签匹配。
如果上面的四个检查中有任何与本页不一致,将本页视为错误,并在编写新代码前开启一个问题。
更新此页
- 程序 ID 的变更是安全关键的。不要在没有(a)链接到 Raydium 公告、(b)在
reference/changelog 中添加条目和(c)对文档进行链接检查以确认没有页面仍引用旧值的情况下发布程序 ID 变更。
- 弃用的程序留在表中并标注状态说明,而不是被删除——现有池仍然通过旧程序进行解析。
来源: