本页内容由 AI 自动翻译,所有内容以英文版本为准。查看英文版 →
版本说明。 所有 TypeScript 示例针对
@raydium-io/raydium-sdk-v2@0.2.64-alpha;最后在 0.2.42-alpha(2026-04)上执行,并在 2026-09-09 针对 0.2.64-alpha 源代码重新检查了调用签名,针对 Solana mainnet-beta。Rust CPI 框架针对 master 分支上的 raydium-cp-swap,Anchor 1.0.2。程序 ID 通过 reference/program-addresses 中的常量获取。前置条件
raydium-sdk-V2-demo/src/cpmm 中的一个文件;GitHub 链接位于每个部分旁边。初始化遵循示例仓库的 config.ts.template(源代码):
Raydium 实例是 SDK 的门面 — 下面的每个示例都使用它。Raydium.load 是异步的,因为它默认加载代币列表;传递 disableLoadToken: true 可跳过该获取。可用性功能检查已被跳过,除非你传递 disableFeatureCheck: false。费用配置通过 raydium.api.getCpmmConfigs() 在首次使用时延迟获取。
创建 CPMM 池
源代码:src/cpmm/createCpmmPool.ts
- 在推导 PDA 之前将代币排序为 token0/token1 顺序。
- 向
poolFeeAccount支付一次性的create_pool_fee。 - 如果缺少,创建调用者的关联代币账户。
- 根据每一侧选择正确的代币程序(SPL Token 与 Token-2022)。
交换(基础输入)
源代码:src/cpmm/swap.ts
getPoolInfoFromRpc 内从 RPC 重新获取池状态。不要从 api-v3.raydium.io 报价你即将签署的交易 — 一个落后一个区块的报价可能在着陆时滑入 ExceededSlippage。
交换(基础输出)
源代码:src/cpmm/swapBaseOut.ts
存入流动性
源代码:src/cpmm/deposit.ts
maximum_* 参数将每一侧膨胀滑点,并在必要时构建 ATA 创建。raydium.cpmm.computePairAmount({ ... }) 如果你想要它们用于 UI 预览,会返回相同的数字。
提取流动性
源代码:src/cpmm/withdraw.ts
收集协议费/基金费/创建者费
来源:src/cpmm/collectCreatorFee.ts、src/cpmm/collectAllCreatorFee.ts
协议费和基金费的收集受权限控制。创建者费有两条路径:创建者签名的 CollectCreatorFee,以及无权限的 CollectCreatorFeePermissionless,任何支付者都可以调用,但只能转账到创建者的规范 ATA。0.2.64-alpha 为两条创建者路径提供了模块级构建器:
两条创建者指令有不同的判别器和账户布局 — 无权限版本用单独的
payer 和非签名的 creator 替换创建者签名者。使用匹配的构建器,而不是在另一条上手动交换账户。SDK 中没有协议费或基金费构建器(makeCollectProtocolFeeInstruction 和 makeCollectFundFeeInstruction 不以任何名称存在)— 这些是管理员路径,CreateCreatorFeeShare / CloseCreatorFeeShare 也是,它们也没有构建器。存在的低级指令构建器是 collectCpFeeInstruction、makeCollectCreatorFeeInstruction 和 collectCreatorFeePermissionlessInInstruction。PoolState 读取应计费用:
Rust CPI 框架
如果你想从自己的 Anchor 程序中调用 CPMM — 例如,代表存款人进行交换的金库 — CPI 上下文如下所示。账户顺序遵循products/cpmm/instructions。
CpiContext::new 替换为 CpiContext::new_with_signer 并传递你的种子。
常见陷阱
开启支持工单前的简短检查清单:- 排序的 mint。 如果你派生的
poolStatePDA 与链上池不匹配,你可能忘记了排序 mint。 - 过期的 API 报价。 永远不要将来自
api-v3.raydium.io的准备金值传入CurveCalculator.swap。从 RPC 获取。 - 错误的代币程序。 Token-2022 mint 的金库由 Token-2022 程序拥有,而不是 SPL Token。始终使用池的
token_0_program/token_1_program字段。 - 转账费 mint 的滑点计算不足。 如果池的任一侧是 Token-2022 转账费 mint,你的
minimum_amount_out必须以用户实际收到的金额计价,而不是金库发送的金额。 - 交换时出现
NotApproved。 检查PoolState.status— 管理员可能已暂停该池上的交换。参见products/cpmm/instructions了解状态位掩码。
后续步骤
sdk-api/typescript-sdk— 完整 SDK 参考。sdk-api/rest-api— 报价和池元数据端点。user-flows/create-cpmm-pool— 相同流程的非代码演练。integration-guides/aggregator— 如果你在多跳路径中路由 CPMM。

