跳转到主要内容

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 的示例流:
Accounts list:
  [
    USDC_input_ata (user, signer),
    SOL_intermediate_ata (user),
    STEP_output_ata (user),
    token_program,

    amm_program_1, *amm1_accounts,    // hop 1: USDC → SOL
    amm_program_2, *amm2_accounts,    // hop 2: SOL → STEP
  ]

Hop 1: USDC_input_ata → AMM1 → SOL_intermediate_ata
Hop 2: SOL_intermediate_ata → AMM2 → STEP_output_ata

按跳转的账户布局

每次跳转的账户连续传递。路由器通过读取每次跳转块中的第一个账户(程序 ID)来识别子程序,然后分派到正确的处理程序。 对于每次跳转,路由器期望账户分组为:
[
  program_id,         // Identifies which pool program (AMM v4, CPMM, CLMM, Stable)
  *child_accounts,    // All accounts required by that pool's swap instruction
]
子账户因池类型而异:

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):
CreateSyncNative(amount)
这会在调用者的钱包下创建 wSOL ATA,通过系统程序将 amount 的 SOL 转入,并在一条指令中同步它。对于在路由前初始化新的 wSOL ATA 很有用。

CloseTokenAccount 指令

路由完成后,你可能想关闭任何中间 ATA——最常见的是 wSOL ATA——以回收租金。使用 CloseTokenAccount(tag 6):
CloseTokenAccount
代币账户在关闭前必须有零代币余额;路由器不会自动清空它。

下一步