> ## 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。在活躍表面上沒有共享的／路由器擁有的中繼代幣帳戶。

特性：

* 使用者對每個中繼代幣擁有一個 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`](/zh-Hant/products/amm-v4/accounts) 以獲取完整列表。

### CPMM 跳點

約 11–13 個帳戶：池狀態、授權、金庫 (2)、mint (2)、代幣程式、系統程式、關聯代幣程式。請參閱 [`products/cpmm/accounts`](/zh-Hant/products/cpmm/accounts)。

### CLMM 跳點

約 15+ 個帳戶：池、刻度陣列、金庫、mint、觀察狀態、簽署者、代幣程式。請參閱 [`products/clmm/accounts`](/zh-Hant/products/clmm/accounts)。

### Stable 跳點

類似於 AMM v4。請參閱 [`products/stable/accounts`](/zh-Hant/products/stable/accounts)。

## 代幣流動與 ATA 所有權

* 呼叫者使用 `user_input_ata` 簽署。
* 呼叫者**必須擁有**所有輸入、中繼和輸出 ATA。如果任何中繼 ATA 的擁有者不是簽署者，路由器將拒絕交易。
* 呼叫者的 `user_input_ata` 餘額必須足以供第一個跳點的輸入（標籤 0 / 8 的 `amount_in`，或標籤 1 / 9 的 `maximum_amount_in`）。
* 每個中繼 ATA 必須已在鏈上存在。如果不存在，請提前建立 — 通常透過 [SPL 關聯代幣帳戶程式](https://spl.solana.com/associated-token-account)，或使用 `CreateSyncNative`（標籤 5）建立 wSOL ATA。

## CreateSyncNative 指令

如果你需要透過包裝的 SOL 進行路由，且不想手動建立並同步 wSOL ATA，請使用 [`CreateSyncNative`](/zh-Hant/products/routing/instructions#createsyncnative-tag-5)（標籤 5）：

```
CreateSyncNative(amount)
```

這在呼叫者的錢包下建立一個 wSOL ATA，透過系統程式將 `amount` SOL 轉入其中，並在一個指令中同步它。對於在路由前初始化新的 wSOL ATA 很有用。

## CloseTokenAccount 指令

路由完成後，你可能想要關閉任何中繼 ATA — 最常見的是 wSOL ATA — 以回收租金。使用 [`CloseTokenAccount`](/zh-Hant/products/routing/instructions#closetokenaccount-tag-6)（標籤 6）：

```
CloseTokenAccount
```

代幣帳戶在關閉前必須具有零代幣餘額；路由器不會為你自動清空它。

## 後續內容

* [`products/routing/instructions`](/zh-Hant/products/routing/instructions) — 每個指令的引數形狀和帳戶列表順序。
* [`products/routing/code-demos`](/zh-Hant/products/routing/code-demos) — 以 TypeScript 建立路由。
* [`reference/program-addresses`](/zh-Hant/reference/program-addresses) — 子程式 ID。
