Перейти к основному содержанию

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.

Эта страница переведена с помощью ИИ. За эталон принимается английская версия.Открыть английскую версию →

Структура аккаунтов: пользовательские ATA на всём протяжении

Каждый поддерживаемый вариант swap маршрутизирует промежуточные токены через управляемые пользователем ATA. Пользователь владеет входным ATA, каждым промежуточным ATA и финальным выходным ATA. На активной поверхности нет общего / контролируемого маршрутизатором промежуточного аккаунта токена. Свойства:
  • Пользователь владеет одним ATA на каждый промежуточный токен.
  • Пользователь предоставляет каждый ATA в список аккаунтов.
  • Каждый промежуточный ATA должен уже существовать (инициализируйте его с помощью CreateSyncNative для wSOL или через программу SPL Associated Token Account для любого другого mint перед маршрутизацией).
  • Маршрутизатор выполняет перевод из одного ATA в хранилище следующего pool на каждом hop.
  • Каждый промежуточный ATA завершает каждый маршрут с тем же балансом, с которым он начал — маршрут потребляет то, что произвёл предыдущий hop.
Пример потока для маршрута 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

Структура аккаунтов для каждого hop

Аккаунты каждого hop передаются последовательно. Маршрутизатор определяет дочернюю программу, прочитав первый аккаунт в блоке каждого hop (ID программы), а затем выполняет переход к правильному обработчику. Для каждого hop маршрутизатор ожидает аккаунты, сгруппированные следующим образом:
[
  program_id,         // Identifies which pool program (AMM v4, CPMM, CLMM, Stable)
  *child_accounts,    // All accounts required by that pool's swap instruction
]
Дочерние аккаунты отличаются в зависимости от типа pool:

AMM v4 hop

Приблизительно 18 аккаунтов: pool, authority, хранилища, mints, аккаунты рынка OpenBook (сохранены в списке аккаунтов для обратной совместимости, хотя интеграция AMM v4 с OpenBook больше не активна), программы токенов. Полный список см. в products/amm-v4/accounts.

CPMM hop

Приблизительно 11–13 аккаунтов: состояние pool, authority, хранилища (2), mints (2), программы токенов, системная программа, программа связанных токен-аккаунтов. См. products/cpmm/accounts.

CLMM hop

Приблизительно 15+ аккаунтов: pool, массивы тиков, хранилища, mints, состояние наблюдений, подписант, программы токенов. См. products/clmm/accounts.

Stable hop

Аналогично AMM v4. См. products/stable/accounts.

Поток токенов и владение ATA

  • Вызывающая сторона подписывает user_input_ata.
  • Вызывающая сторона должна владеть всеми входными, промежуточными и выходными ATA. Маршрутизатор отклонит транзакцию, если владелец какого-либо промежуточного ATA не является подписантом.
  • Баланс user_input_ata вызывающей стороны должен быть достаточным для входа первого hop (amount_in для тега 0 / 8 или maximum_amount_in для тега 1 / 9).
  • Каждый промежуточный ATA должен уже существовать в цепи. Если он не существует, создайте его заранее — обычно через программу SPL Associated Token Account или с помощью CreateSyncNative (тег 5) для ATA wSOL.

Инструкция CreateSyncNative

Если вам нужно маршрутизировать через завёрнутый SOL и вы не хотите вручную создавать и синхронизировать ATA wSOL, используйте CreateSyncNative (тег 5):
CreateSyncNative(amount)
Это создаёт ATA wSOL под кошельком вызывающей стороны, передаёт amount SOL в него через системную программу и синхронизирует его в одной инструкции. Полезно для инициализации свежего ATA wSOL перед маршрутизацией.

Инструкция CloseTokenAccount

После завершения маршрута вы можете захотеть закрыть любой промежуточный ATA — чаще всего ATA wSOL — чтобы вернуть арендную плату. Используйте CloseTokenAccount (тег 6):
CloseTokenAccount
Аккаунт токена должен иметь нулевой баланс токена перед закрытием; маршрутизатор не будет автоматически его очищать.

Что дальше