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

# ルーティングアカウント

> AMM ルーティングプログラムでホップごとにアカウントがどのように渡されるか：すべての中間トークンのユーザーATA、その後、ルートの各レッグごとのプール単位のアカウントブロック。

<Info>
  **このページは AI による自動翻訳です。すべての内容は英語版を正とします。**

  [英語版を表示 →](/products/routing/accounts)
</Info>

## アカウントレイアウト：ユーザーATA全体を通じて

有効なすべてのスワップバリアント は、中間トークンを**ユーザーが管理するATA**を通じてルーティングします。ユーザーは入力ATA、すべての中間ATA、および最終出力ATAを所有します。アクティブな表面には、共有またはルーター所有の中間トークンアカウントはありません。

プロパティ：

* ユーザーは中間トークンごとに1つのATAを所有します。
* ユーザーはアカウントリスト内のすべてのATAを提供します。
* 各中間ATAはすでにチェーン上に存在する必要があります（wSOL の場合は `CreateSyncNative` で初期化するか、他のミントの場合はSPL Associated Token Account プログラムで、ルーティング前に初期化します）。
* ルーターは各ホップで1つの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個のアカウント：プール、オーソリティ、ボルト、ミント、OpenBook マーケットアカウント（AMM v4 の OpenBook 統合はもはやアクティブではありませんが、後方互換性のためアカウントリストに保持）、トークンプログラム。完全なリストについては [`products/amm-v4/accounts`](/ja/products/amm-v4/accounts) を参照してください。

### CPMM ホップ

約11～13個のアカウント：プール状態、オーソリティ、ボルト（2個）、ミント（2個）、トークンプログラム、システムプログラム、Associated Token プログラム。詳細は [`products/cpmm/accounts`](/ja/products/cpmm/accounts) を参照してください。

### CLMM ホップ

約15以上のアカウント：プール、ティック配列、ボルト、ミント、観測状態、署名者、トークンプログラム。詳細は [`products/clmm/accounts`](/ja/products/clmm/accounts) を参照してください。

### Stable ホップ

AMM v4 に類似。詳細は [`products/stable/accounts`](/ja/products/stable/accounts) を参照してください。

## トークンフロー と ATA 所有権

* 呼び出し元は `user_input_ata` で署名します。
* 呼び出し元は入力、中間、および出力のすべてのATAを**所有する必要があります**。ルーターは、任意の中間ATAの所有者が署名者でない場合、トランザクションを拒否します。
* 呼び出し元の `user_input_ata` バランスは、最初のホップの入力（タグ 0/8 の場合は `amount_in`、タグ 1/9 の場合は `maximum_amount_in`）に対して十分である必要があります。
* 各中間ATAはすでにチェーン上に存在する必要があります。存在しない場合は、事前に作成してください。通常は [SPL Associated Token Account プログラム](https://spl.solana.com/associated-token-account) を通じるか、wSOL ATA の場合は `CreateSyncNative`（タグ 5）を使用します。

## CreateSyncNative インストラクション

ラップされたSOLを通じてルーティングする必要があり、wSOL ATA を手動で作成・同期したくない場合は、[`CreateSyncNative`](/ja/products/routing/instructions#createsyncnative-tag-5)（タグ 5）を使用します：

```
CreateSyncNative(amount)
```

これは呼び出し元のウォレット配下に wSOL ATA を作成し、System Program を通じて `amount` 分のSOLを転送し、1つのインストラクションで同期します。ルーティング前に新しい wSOL ATA を初期化するのに便利です。

## CloseTokenAccount インストラクション

ルートが完了した後、中間ATA（最も一般的には wSOL ATA）を閉じてレントを取り戻すことをお勧めします。[`CloseTokenAccount`](/ja/products/routing/instructions#closetokenaccount-tag-6)（タグ 6）を使用します：

```
CloseTokenAccount
```

トークンアカウントはクローズ前にゼロトークンバランスを持つ必要があります。ルーターは自動的に空にすることはありません。

## 次に進む

* [`products/routing/instructions`](/ja/products/routing/instructions) — インストラクションごとの引数の形状とアカウントリストの順序。
* [`products/routing/code-demos`](/ja/products/routing/code-demos) — TypeScript でルートを構築する。
* [`reference/program-addresses`](/ja/reference/program-addresses) — 子プログラムID。
