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 自动翻译,所有内容以英文版本为准。查看英文版 →
IDL 是什么
Solana 上的 Anchor 程序发布一个 IDL(接口定义语言)文件,其中描述了指令、账户布局、错误枚举和结构体模式。IDL 是客户端代码生成的权威来源——TypeScript SDK、Rust CPI 库和第三方客户端都是基于它生成的(或针对它手写的)。 Raydium 为 CPMM、CLMM 和 LaunchLab 发布 IDL。AMM v4、Stable AMM 和 Farm(v3/v5/v6)都早于 Anchor 时代或其他原因不使用 Anchor 发布——它们的账户结构在 SDK 中手工维护。在哪里找到它们
IDL 存放在专门的仓库中:| 程序 | IDL 文件 |
|---|---|
| CPMM | raydium_cpmm/raydium_cp_swap.json |
| CLMM | raydium_clmm/raydium_clmm.json |
| LaunchLab | raydium_launchpad/raydium_launchpad.json |
| AMM v4 | 无官方 IDL——参考 raydium-sdk-V2/src/raydium/liquidity/layout.ts 中的手写布局 |
| Stable AMM | 无官方 IDL——布局在 SDK 中 |
| Farm | 无官方 IDL——布局在 SDK 中 |
重新生成 TypeScript 客户端
Anchor 的代码生成工具从 IDL 生成类型化客户端:raydium.cpmm.swap(...) 辅助方法,该方法包装了 Anchor 方法以及所有的簿记工作(ATA 创建、转账费用调整、计算预算、Token-2022 程序路由)。只在你需要 SDK 下层的时候才重新生成。
重新生成 Rust 客户端(CPI 库)
Raydium 为拥有 IDL 的程序发布 Anchor 库:cpi 特性暴露 cpi::accounts::<Ix> 账户结构体和 cpi::<ix>() 调用器——即时可用的 CPI 包装器。参阅 sdk-api/rust-cpi 了解使用模式。
如果你更希望生成全新的绑定:
重新生成 Python 客户端
没有官方的 Raydium Python SDK。第三方生成器包括:anchorpy—@coral-xyz/anchor的 Python 移植版。从 IDL 生成类型化方法构造器。solders— 低级别的 Solana 原语(交易、密钥对、公钥)的 Rust 绑定;在anchorpy下层使用。
sdk-api/python-integration 了解更完整的指南。
IDL 变更政策
Raydium 遵循以下 IDL 稳定性规则:- 指令判别器永远不会改变。 添加新指令时是在枚举末尾扩展;现有的判别器保持稳定。
- 账户结构布局仅以附加方式演变。 新字段放在末尾,前面有链上模式中的大小增量。现有字段保持其偏移量。
- 错误枚举代码仅限追加。 现有的错误代码始终表示相同的含义。
- 破坏性变更在新程序中发布。 当需要重新设计时,团队部署新的程序 ID(例如,CPMM 作为全新程序而不是升级 AMM v4)。旧池继续在旧程序上运行;新池转向新程序。
IDL 变更时该怎么做
- 更新 SDK。
npm update @raydium-io/raydium-sdk-v2。 - 重新生成你的客户端代码(如果你直接使用 Anchor 代码生成)。
- 比对账户布局。 新布局的尾部字段是你的代码尚未见过的唯一内容;确认你是否需要它们。
- 不要假设旧的指令判别器无效。 根据规则 1,它们仍然有效。
- 在向主网推送前,在 devnet 上重新运行集成测试。
IDL 故障排除
”Invalid discriminator”(无效判别器)错误
通常表示针对 IDL 版本 N 构建的客户端正在尝试调用仅在程序的部署前版本中存在的指令。从实时程序重新拉取 IDL:账户解码失败
如果program.account.<Name>.fetch(pubkey) 抛出”Invalid account discriminator”错误,该账户是由先前的程序版本创建的,Anchor 拒绝了其 8 字节判别器。解决方案是使用 SDK 中的原始布局解析器(PoolInfoLayout.decode(accountData)),它不强制执行 Anchor 判别器。
生成的客户端中缺少指令
Anchor 的 TypeScript 代码生成只为 IDL 条目具有可解析为有效标识符的name 的指令生成方法。Raydium 的所有指令都满足这一点,但如果你看到不匹配,检查 IDL 文件是否来自当前 SDK 版本。
更多资源
sdk-api/rust-cpi— 使用 Rust CPI 库。sdk-api/python-integration— 通过anchorpy使用 Python。sdk-api/typescript-sdk— 更高层级的 TypeScript 客户端。


