> ## 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.

# Аккаунты маршрутизации

> Как аккаунты передаются на каждый hop в программе AMM Routing: пользовательские ATA для каждого промежуточного токена, затем блок аккаунтов для каждого этапа маршрута.

<Info>
  **Эта страница переведена с помощью ИИ. За эталон принимается английская версия.**

  [Открыть английскую версию →](/products/routing/accounts)
</Info>

## Структура аккаунтов: пользовательские 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`](/ru/products/amm-v4/accounts).

### CPMM hop

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

### CLMM hop

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

### Stable hop

Аналогично AMM v4. См. [`products/stable/accounts`](/ru/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](https://spl.solana.com/associated-token-account) или с помощью `CreateSyncNative` (тег 5) для ATA wSOL.

## Инструкция CreateSyncNative

Если вам нужно маршрутизировать через завёрнутый SOL и вы не хотите вручную создавать и синхронизировать ATA wSOL, используйте [`CreateSyncNative`](/ru/products/routing/instructions#createsyncnative-tag-5) (тег 5):

```
CreateSyncNative(amount)
```

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

## Инструкция CloseTokenAccount

После завершения маршрута вы можете захотеть закрыть любой промежуточный ATA — чаще всего ATA wSOL — чтобы вернуть арендную плату. Используйте [`CloseTokenAccount`](/ru/products/routing/instructions#closetokenaccount-tag-6) (тег 6):

```
CloseTokenAccount
```

Аккаунт токена должен иметь нулевой баланс токена перед закрытием; маршрутизатор не будет автоматически его очищать.

## Что дальше

* [`products/routing/instructions`](/ru/products/routing/instructions) — формы аргументов и порядок списка аккаунтов для каждой инструкции.
* [`products/routing/code-demos`](/ru/products/routing/code-demos) — создание маршрута на TypeScript.
* [`reference/program-addresses`](/ru/reference/program-addresses) — ID дочерних программ.
