> ## 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.

# 程序地址

> Raydium 在 Solana mainnet-beta 和 devnet 上的规范程序 ID 和共享 PDA。文档中的其他页面都链接到这里，而不是硬编码地址。

<Info>
  **本页内容由 AI 自动翻译，所有内容以英文版本为准。**

  [查看英文版 →](/reference/program-addresses)
</Info>

<Info>
  **权威信息源**。本页是文档中唯一逐字列出程序地址的页面，其他页面都链接到这里。如果 ID 发生变化，**仅在此处更新**，网站中的所有引用都将保持一致。

  在签署真实交易前，始终根据实时 API（`https://api-v3.raydium.io/main/info`）交叉检查这些值。
</Info>

## Mainnet-beta

<Tip>
  经验法则：如果某个程序 ID 与下表不匹配，**不要签署该交易**。程序 ID 不匹配是在 Solana 上损失资金最简单的方式。
</Tip>

### 链上程序

| 程序                              | 程序 ID                                          | 源代码                                                              |
| ------------------------------- | ---------------------------------------------- | ---------------------------------------------------------------- |
| **AMM v4**（混合 AMM + OpenBook）   | `675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8` | [raydium-amm](https://github.com/raydium-io/raydium-amm)         |
| **CPMM**（标准 AMM）                | `CPMMoo8L3F4NbTegBCKVNunggL7H1ZpdTHKxQB5qKP1C` | [raydium-cp-swap](https://github.com/raydium-io/raydium-cp-swap) |
| **CLMM**（集中流动性）                 | `CAMMCzo5YL8w4VFF8KVHrK22GGUsp5VTaW7grrKgrWqK` | [raydium-clmm](https://github.com/raydium-io/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`](/zh/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`](https://github.com/raydium-io) 下有公开源代码库。Stable AMM、LaunchLab、AMM 路由、销毁与赚取 / LP 锁定和 Farm 程序不公开——验证它们需针对实时 API、链上字节码和 [`raydium-io/raydium-idl`](https://github.com/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`](/zh/products/cpmm/fees) 了解分拆如何组成，以及 [`reference/fee-comparison`](/zh/reference/fee-comparison) 了解跨产品矩阵。

### PDA 种子

下面的种子是**规范的**，由 SDK 和链上 CPI 都使用。始终计算 PDA；不要硬编码派生地址。

```ts theme={null}
// 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`](/zh/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 相同的路由结构）。

## 如何在链上验证地址

1. **Solana Explorer**。将地址粘贴到 [explorer.solana.com](https://explorer.solana.com) 并确认它标记为 `Program` 且有当前升级权限。Mainnet-beta 应显示由 Raydium 升级权限签署的部署。
2. **CLI**。使用 `solana program show <PROGRAM_ID> -u mainnet-beta` 检查部署槽位、BPF 加载器、升级权限和数据长度。在你的运行手册中记录这些。
3. **IDL 附件**。使用 `anchor idl fetch <PROGRAM_ID> --provider.cluster mainnet` 查询链上 IDL。IDL 的 `address` 字段应该匹配。相同的 IDL 也镜像在 [github.com/raydium-io/raydium-idl](https://github.com/raydium-io/raydium-idl)——在信任前，将链上 IDL 与仓库进行 diff。
4. **配置/管理员权限**。对于 CPMM/CLMM 配置账户，读取 `owner`/`protocol_owner` 字段并确认它与在 [`security/admin-and-multisig`](/zh/security/admin-and-multisig) 中发布的当前 Raydium 多签匹配。

如果上面的四个检查中有任何与本页不一致，将本页视为错误，并在编写新代码前开启一个问题。

## 更新此页

* 程序 ID 的变更是安全关键的。**不要**在没有（a）链接到 Raydium 公告、（b）在 [`reference/changelog`](/zh/reference/changelog) 中添加条目和（c）对文档进行链接检查以确认没有页面仍引用旧值的情况下发布程序 ID 变更。
* 弃用的程序留在表中并标注状态说明，而不是被删除——现有池仍然通过旧程序进行解析。

来源：

* 实时 API：`https://api-v3.raydium.io/main/info`
* [github.com/raydium-io/raydium-idl](https://github.com/raydium-io/raydium-idl)
* [github.com/raydium-io/raydium-cp-swap](https://github.com/raydium-io/raydium-cp-swap)
