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.
本页内容由 AI 自动翻译,所有内容以英文版本为准。查看英文版 →
Raydium 的产品程序是独立的代码库,但它们是基于一套共享的约定设计的。本页是这些约定的规范参考。产品专章描述这些约定在其账户中的实例化方式;本页描述约定本身。
“共享”在这里的含义
代码库中运行着三种共享方式:- 约定共享。 每个程序都使用相同的 PDA 推导模式、相同的费用分配形状和相同的观察账户思想 — 但每个都在自己的程序中用自己的种子实现它们。
- 账户共享。 少数几个账户在许多池之间是字面上相同的记录(CPMM 中的全局权限 PDA、AmmConfig 账户)。
- 链下共享。 一个 REST API 和一个 TypeScript SDK 为所有四个程序提供前端。集成者与一个 HTTP 主机和一个 NPM 包交互,无论他们最终调用哪个程序。
1. 权限 PDA
每个 Raydium 程序都有一个拥有其代币金库的 PDA。用户永远不会直接持有金库权限 — 权限 PDA 是唯一可以移出资金的签署者,并且只在有效的程序指令告诉它时才签署。 模式在各个产品中是相同的;种子不同:| 程序 | 权限 PDA 种子 | 备注 |
|---|---|---|
| AMM v4 | [poolId] | 每个池的权限。与 v4 的每个池设计形状相同。 |
| CPMM | [b"vault_and_lp_mint_auth_seed"] | 由所有 CPMM 池共享的单个 PDA。 没有特定池的种子。 |
| CLMM | [b"pool_vault_and_lp_mint_auth_seed"] | 跨所有 CLMM 池共享的单个 PDA。 |
| Farm v3 / v5 / v6 | [farmId] | 每个农场。PDA 拥有该农场的质押 + 奖励金库。 |
| LaunchLab | [b"vault_auth", launchId] | 每次启动。拥有毕业前的基础 + 报价金库。 |
- 对于 CPMM 和 CLMM,权限 PDA 是一个全局账户 — 该类型的每个池都使用它。如果你在 CPI 到 CPMM,你只需要一次,不需要按池。
- 对于按池 / 按农场的权限,你从池/农场 ID 推导 PDA。SDK 在
getPoolKeys/getFarmKeys中执行此操作;如果你直接集成,你使用findProgramAddressSync推导。 - 金库所有权不能更改。 一旦创建了权限 PDA 作为所有者的代币账户,只有该 PDA — 由程序调用 — 才能转出。没有管理员覆盖。
products/cpmm/accounts、products/clmm/accounts、products/amm-v4/accounts、products/farm-staking/accounts、products/launchlab/accounts。
2. 管理和配置账户
CPMM 和 CLMM 共享一个称为AmmConfig 的配置账户模式:一个小的全局账户,由 u16 索引,持有适用于整个费用层级的费率和管理目标。池在创建时绑定到配置,永不重新绑定。
- 费用层级是全局的。 当一个池说”这是一个 0.25% 的池”时,它意味着它绑定到在创建时
trade_fee_rate为 0.25% 的 AmmConfig。没有按池的费率覆盖。 - 配置可以更改但池不跟随。 如果配置权限编辑 AmmConfig,每个绑定到该配置的现有池立即获取新费率。这是一个功能,不是错误;这是协议级经济变化如何传播而不需要按池迁移的方式。
disable_create_pool是弃用杠杆。 当费用层级被弃用时,协议多签设置此标志 — 现有池继续工作但没有新池可以选择该层级。protocol_owner/fund_owner是费用收集调用的签署者。将它们设置为多签是费用提取的门控方式。它们不是费用本身的目标地址;那是相同账户上的protocol_fee_destination/fund_fee_destination。
AmmConfig — 其费用参数是按池的,在创建时硬编码。Farm 和 LaunchLab 有自己的等价物(FarmConfig、LaunchConfig)在各自的章节中介绍。
谁可以更改什么的完整表格在 security/admin-and-multisig 中。当前面向用户的费用分配在 ray/protocol-fees 中。
3. 协议 / 基金 / 创建者费用分配
每个 CPMM 和 CLMM 交换费都在输出时分配到最多四个目标:- 交易费累积到池中。 费用从交换的输入端移除,扣费后的金额是常数乘积数学看到的。这就是”LP 赚取费用”的意思 —
k上升,隐含的每个 LP 代币价值也上升。 - 协议/基金/创建者部分从该 LP 端累积中扣除到按池计数器账户。 它们驻留在池状态中(
protocol_fees_token{0,1}、fund_fees_token{0,1}等),直到某人调用CollectProtocolFee/CollectFundFee/CollectCreatorFee。在那之前它们不会离开池的金库;从交换的角度看它们仍然”在池中”。 - 收集将它们移出。 相应的签署者(AmmConfig 上的
protocol_owner/fund_owner键,或 LaunchLab 池的启动创建者)调用收集指令,程序从池金库转账到目标 ATA。
- 分割百分比是交易费的,而不是交易的。 一个 0.25% 交易费加上 12% 的协议份额意味着协议获得
0.25% × 12% = 0.03%的交易 — 不是交易的 12%。 - 创建者费用仅存在于 LaunchLab 毕业池中。 标准 CPMM/CLMM 池有三向分割(LP / 协议 / 基金)。LaunchLab 添加了第四个槽位,路由给启动代币的人,在
Initialize时配置且不可变。 - AMM v4 只分割两种方式,按池硬编码:LP 和协议。没有基金槽位,没有创建者槽位。
- 基金 vs 协议 — 两者都是协议库目标,但它们有不同的签署者和不同的预期用途。
protocol历史上为运营融资;fund是较长期的库。两者之间的分割本身是可调的。
reference/fee-comparison 和 ray/protocol-fees 中。
4. 观察账户(TWAP 环形缓冲区)
CPMM 和 CLMM 都为每个池维护一个观察账户 — 一个固定大小的(timestamp, cumulative_price) 样本环形缓冲区,其他合约可以用来推导抗操纵的 TWAP。
- 每个交换都调用
update_observation。 程序读取当前价格,乘以自前一个观察以来经过的秒数,并将其加入累积计数器。新条目覆盖最旧的槽位(环形缓冲区样式)。 - 时间窗口上的 TWAP =
(cumul[end] − cumul[start]) / (timestamp[end] − timestamp[start])。消费者选择两个观察括起所需窗口并进行除法。 - Raydium 本身不使用 TWAP 来定价。 AMM 数学直接读取现货储备。观察是一个外部性 — Raydium 支付写入它们的成本,以便其他合约可以读取。
- AMM v4 没有观察账户。 它比 ObservationState 设计更早;想要 v4 TWAP 的集成者必须从日志历史中离链计算一个。
products/cpmm/accounts 和 products/clmm/accounts 中。
5. REST API + SDK + IDL
链下表面是每个产品使用的单个三元组:- REST API —
https://api-v3.raydium.io。所有链上状态加上报价引擎的只读索引视图。一个主机,一个架构。 - TypeScript SDK — NPM 上的
@raydium-io/raydium-sdk-v2。为每个程序构建和签署交易。与 API 通话获取报价/元数据,与 Solana RPC 通话进行签前状态刷新。 - IDL 注册表 — 每个已发布程序的 Anchor IDL 存在于
raydium-idl仓库中(每个程序一个 JSON:CPMM、CLMM、LaunchLab)。TypeScript SDK 在内部使用这些 IDL;下游 Rust / Python 客户端从相同文件重新生成。
| 部分 | 读取自 | 写入到 | 过期容差 |
|---|---|---|---|
| REST API | 索引器(解析链日志) | — (对集成者为只读) | 几秒 |
| SDK | API + RPC | 构建交易;不广播 | 无 — 必须在签前重新获取状态 |
| IDL | 程序源 | — | 按程序升级版本化 |
sdk-api/ 中,IDL 表面特别在 sdk-api/anchor-idl 中。
6. 索引器和价格源
REST API 由 Raydium 自己的索引器提供,该索引器订阅来自 Solana RPC 集群的程序日志,并将去规范化记录写入 SQL 存储。对集成者的两个后果:- 索引器是唯一”知道”跨程序状态的东西。 将 CPMM 池映射到其 CLMM 对应物、计算跨程序版本的 24 小时交易量、获取与 LP 铸币相关的农场 — 所有这些都是索引器工作。程序本身不做这些。
- 索引器停机是 API 停机。 如果 API 返回过期或空数据,索引器就是嫌疑人。链上状态不受影响;拥有自己的 RPC 和 SDK 的集成者可以继续交易。
priceUsd 字段;这是从索引器对池储备的视图的快照和引用价格(USDC 池作为常见支点)的快照离链计算的。它对 UI 足够好;使用它作为链上预言机不安全。为此使用观察 TWAP。
什么不共享
值得明确列出,因为新读者经常假设有比实际存在的更多共享:- 程序不相互调用。 CPMM 交换永远不会 CPI 到 CLMM 或 AMM v4。唯一组合多个 AMM 的程序是 AMM 路由程序 — 而且那个本身很薄,只是按顺序对每个 AMM 发出 CPI。
- 整个程序中没有共享升级权限。 每个链上程序有自己的程序升级密钥(3/4 多签加 24 小时时间锁)。它们不相关联。
- 农场和 AMM 之间没有共享状态。 一个农场不知道它质押的 LP 是来自 CPMM 池、CLMM 头寸 NFT 铸币还是不相关的 SPL 代币。农场程序将质押铸币视为不透明。
- 无预言机依赖。 定价是链上储备。没有 Pyth/Switchboard 备用;AMM 在清算前不检查预言机。
指针
protocol-overview/architecture— 显示这些部分如何组合的规范图。protocol-overview/versions-and-migration— 约定如何跨程序版本演变。security/admin-and-multisig— 谁控制 AmmConfigs 背后的密钥。reference/fee-comparison— 每个产品的费率矩阵。reference/program-addresses— 规范程序 ID。
- Raydium SDK v2 — PDA 种子、账户布局和 IDL 定义的真实来源。
- Raydium IDL 注册表 — Anchor IDL。
- 上面内联引用的按产品账户页面。


