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

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.

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

Обзор инструкций

ТегДискриминаторТочноВариант
0SwapBaseInWithUserAccountВходУстаревший
1SwapBaseOutWithUserAccountВыходУстаревший
5CreateSyncNativeУтилита
6CloseTokenAccountУтилита
8SwapBaseInВходТекущий
9SwapBaseOutВыходТекущий
Легенда:
  • Точно: какое значение фиксируется вызывающей стороной (Вход = фиксированный вход amount_in; Выход = фиксированный выход amount_out).
  • Вариант: устаревшие инструкции требуют непустой deque limit_prices, даже если в маршруте нет хопа CLMM. Текущие инструкции (8 / 9) воспринимают пустой limit_prices как «без проверок», что рекомендуется для нового кода.
Все варианты swap направляют промежуточные токены через ATA, контролируемые пользователем — пользователь владеет входной ATA, каждой промежуточной ATA и выходной ATA. Для новых интеграций используйте тег 8 (SwapBaseIn) или тег 9 (SwapBaseOut), если у вас нет конкретной причины вызывать устаревший вариант.

Текущие инструкции swap (рекомендуется)

Это точки входа, которые должны использовать новые коды. Структура аргументов такая же, как у устаревших вариантов, но limit_prices может быть пуста.

SwapBaseIn (тег 8)

Мультихоп swap с фиксированным входом. Вызывающая сторона фиксирует amount_in; маршрутизатор выполняет хоп за хопом и проверяет, что финальное количество достигает или превышает minimum_amount_out. Аргументы
amount_in:            u64
minimum_amount_out:   u64
limit_prices:         VecDeque<u128>  // опционально; пустая очередь означает отсутствие проверки цены CLMM на хоп
Аккаунты
[
  <user_input_ata> W S,         // подписант; баланс >= amount_in
  <user_intermediate_ata_1> W,  // по одной на каждый промежуточный хоп
  ... <user_intermediate_ata_N> W,
  <user_output_ata> W,
  <token_program>,

  <pool_program_hop_1>,         // определяет, какое семейство AMM использует хоп 1
  <pool_state_hop_1> W,
  ... <другие аккаунты, требуемые программой хопа 1>,

  <pool_program_hop_2>,
  <pool_state_hop_2> W,
  ... <аккаунты хопа 2>,

  ... [повторить для каждого хопа]
]
Точный список аккаунтов на хоп зависит от программы базовой биржи (AMM v4 / CPMM / CLMM / Stable). Маршрутизатор вызывает каждую программу по очереди через CPI и проверяет, что ID программы совпадает с одной из четырёх поддерживаемых программ. Предусловия
  • Вызывающая сторона подписывает user_input_ata.
  • user_input_ata.amount >= amount_in.
  • Каждая промежуточная ATA пользователя существует и принадлежит вызывающей стороне.
  • Если какой-либо хоп является CLMM и вы хотите применить ограничения по цене, предоставьте одну запись limit_prices на хоп CLMM.
Постусловия
  • Баланс user_input_ata уменьшен на amount_in.
  • Баланс user_output_ata увеличен на ≥ minimum_amount_out.
  • Каждая промежуточная ATA остаётся с нулевым чистым изменением (маршрут потребляет то, что произвёл предыдущий хоп).
Распространённые ошибки
  • ExceededSlippage — финальный выход < minimum_amount_out.
  • InvalidInput — пустой маршрут, некорректные аккаунты или неподдерживаемая pool_program.
  • SqrtPriceX64 — цена хопа CLMM вышла за границы предоставленного ограничения limit_prices (только когда limit_prices непуста).

SwapBaseOut (тег 9)

Мультихоп swap с фиксированным выходом. Вызывающая сторона фиксирует amount_out; маршрутизатор проверяет, что фактический вход не превышает maximum_amount_in. Аргументы
maximum_amount_in:   u64
amount_out:          u64
limit_prices:        VecDeque<u128>  // опционально; пустая очередь означает отсутствие проверки цены CLMM на хоп
Аккаунты — такая же структура, как в теге 8. Предусловия
  • Вызывающая сторона подписывает user_input_ata; баланс >= maximum_amount_in (наихудший случай).
  • Каждая промежуточная ATA и выходная ATA существуют.
Постусловия
  • user_input_ata уменьшена на фактически необходимое количество (≤ maximum_amount_in).
  • user_output_ata увеличена ровно на amount_out.
Распространённые ошибки
  • ExceededSlippage — требуемый вход превышает maximum_amount_in.
  • InvalidInput, SqrtPriceX64 — как для тега 8.

Устаревшие инструкции swap

Эти более старые варианты всё ещё могут быть вызваны в работающей программе и документируются здесь для полноты. Предпочитайте теги 8 / 9 для нового кода; оба устаревших варианта ниже требуют непустую deque limit_prices даже при отсутствии хопа CLMM, что затрудняет их использование.

SwapBaseInWithUserAccount (тег 0)

Мультихоп swap с фиксированным входом, идентичный по структуре тегу 8, но с более строгим требованием limit_prices. Аргументы
amount_in:           u64
minimum_amount_out:  u64
limit_prices:        VecDeque<u128>  // обязательно, непуста
Аккаунты — такая же структура, как в SwapBaseIn (тег 8). Все промежуточные слоты должны быть ATA, принадлежащими вызывающей стороне. Предусловия
  • Вызывающая сторона подписывает user_input_ata.
  • user_input_ata.amount >= amount_in.
  • Все промежуточные ATA пользователя существуют и принадлежат вызывающей стороне.
  • limit_prices непуста (по одной записи на хоп CLMM; при отсутствии хопа CLMM заполните заполнителями).
Постусловия
  • Баланс user_input_ata уменьшен на amount_in.
  • Баланс user_output_ata увеличен на ≥ minimum_amount_out.
Распространённые ошибки
  • ExceededSlippage.
  • InvalidInput — пустая limit_prices отклоняется в этом устаревшем варианте.
  • SqrtPriceX64.

SwapBaseOutWithUserAccount (тег 1)

Swap с фиксированным выходом, устаревший аналог SwapBaseOut (тег 9). Аргументы
maximum_amount_in:   u64
amount_out:          u64
limit_prices:        VecDeque<u128>  // обязательно, непуста
Аккаунты — такая же структура, как в теге 0 / теге 9. Предусловия
  • Вызывающая сторона подписывает user_input_ata.
  • user_input_ata.amount >= maximum_amount_in.
  • Все промежуточные ATA пользователя существуют и принадлежат вызывающей стороне.
  • limit_prices непуста.
Постусловия
  • user_input_ata уменьшена на фактически необходимое количество (≤ maximum_amount_in).
  • user_output_ata увеличена ровно на amount_out.
Распространённые ошибки
  • ExceededSlippage.
  • InvalidInput.
  • SqrtPriceX64.

Утилиты

CreateSyncNative (тег 5)

Создание (если отсутствует) и синхронизация ATA wSOL в один шаг. Удобно при обёртывании SOL параллельно с swap. Аргументы
amount: u64    // SOL для обёртывания (lamports)
Аккаунты
[
  <user_wsol_ata> W,            // ATA для wSOL; создаётся, если отсутствует
  <user_native_account> W S,    // подписант; SOL списывается отсюда
  <wsol_mint>,
  <system_program>,
  <token_program>,
  <associated_token_program>,
]
Эффект
  • Создаёт user_wsol_ata, если она ещё не существует.
  • Переводит amount lamports с собственного баланса SOL подписанта на ATA.
  • Вызывает SyncNative на ATA, чтобы её баланс токена отразил новые lamport.
Распространённые ошибки
  • InvalidOwner — владелец user_wsol_ata не является подписантом.

CloseTokenAccount (тег 6)

Закрытие счёта токена и возврат его ренты в кошелёк назначения. Пара для CreateSyncNative: после swap-ноги wSOL вызовите CloseTokenAccount, чтобы вернуть ренту, которая поддерживала ATA wSOL. Аргументы — отсутствуют. Аккаунты
[
  <token_account_to_close> W,
  <destination_for_rent> W,
  <owner> S,
  <token_program>,
]
Эффект
  • Закрывает token_account_to_close.
  • Переводит баланс lamport, не облагаемый рентой (~0.00203928 SOL в mainnet для обычного счёта SPL Token), на destination_for_rent.
  • Баланс токена на счёте должен быть равен нулю.
Распространённые ошибки
  • InvalidOwner — вызывающая сторона не является владельцем ATA.
  • Баланс счёта токена не равен нулю.

Что дальше