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 自动翻译,所有内容以英文版本为准。查看英文版 →
账户布局:用户 ATA 贯穿始终
所有启用的交换变体都通过用户控制的 ATA路由中间代币。用户拥有输入 ATA、每个中间 ATA 和最终输出 ATA。活跃表面上没有共享的或路由器拥有的中间代币账户。 属性:- 用户为每个中间代币拥有一个 ATA。
- 用户在账户列表中提供每个 ATA。
- 每个中间 ATA 必须已存在于链上(对 wSOL 使用
CreateSyncNative初始化,或通过 SPL 关联代币账户程序初始化其他 mint,在路由之前)。 - 路由器在每次跳转时从一个 ATA 转出,进入下一个池的金库。
- 每个中间 ATA 在每条路由结束时的余额与开始时相同——路由消耗前一跳产生的任何内容。
USDC → SOL → STEP 的示例流:
按跳转的账户布局
每次跳转的账户连续传递。路由器通过读取每次跳转块中的第一个账户(程序 ID)来识别子程序,然后分派到正确的处理程序。 对于每次跳转,路由器期望账户分组为:AMM v4 跳转
大约 18 个账户:池、权限账户、金库、mint、OpenBook 市场账户(为向后兼容而保留在账户列表中,尽管 AMM v4 的 OpenBook 集成不再活跃)、代币程序。详见products/amm-v4/accounts。
CPMM 跳转
大约 11–13 个账户:池状态、权限账户、金库(2 个)、mint(2 个)、代币程序、系统程序、关联代币程序。详见products/cpmm/accounts。
CLMM 跳转
大约 15+ 个账户:池、tick 数组、金库、mint、观察状态、签名者、代币程序。详见products/clmm/accounts。
Stable 跳转
类似于 AMM v4。详见products/stable/accounts。
代币流和 ATA 所有权
- 调用者使用
user_input_ata签名。 - 调用者必须拥有所有输入、中间和输出 ATA。如果任何中间 ATA 的所有者不是签名者,路由器将拒绝交易。
- 调用者的
user_input_ata余额必须足以满足第一跳的输入(tag 0 / 8 的amount_in,或 tag 1 / 9 的maximum_amount_in)。 - 每个中间 ATA 必须已存在于链上。如果不存在,提前创建——通常通过 SPL 关联代币账户程序,或对 wSOL ATA 使用
CreateSyncNative(tag 5)。
CreateSyncNative 指令
如果你需要通过 wrapped SOL 路由,且不想手动创建和同步 wSOL ATA,请使用CreateSyncNative(tag 5):
amount 的 SOL 转入,并在一条指令中同步它。对于在路由前初始化新的 wSOL ATA 很有用。
CloseTokenAccount 指令
路由完成后,你可能想关闭任何中间 ATA——最常见的是 wSOL ATA——以回收租金。使用CloseTokenAccount(tag 6):
下一步
products/routing/instructions— 每条指令的参数形状和账户列表顺序。products/routing/code-demos— 用 TypeScript 构建路由。reference/program-addresses— 子程序 ID。


