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

# Akun Routing

> Bagaimana akun diteruskan per hop pada program AMM Routing: user ATAs untuk setiap token antara, kemudian blok akun per-pool untuk setiap langkah rute.

<Info>
  **Halaman ini diterjemahkan secara otomatis oleh AI. Versi bahasa Inggris adalah acuan resmi.**

  [Lihat versi bahasa Inggris →](/products/routing/accounts)
</Info>

## Tata letak akun: user ATAs di seluruh rute

Setiap varian swap yang diaktifkan merutekan token antara melalui **ATAs yang dikendalikan pengguna**. Pengguna memiliki input ATA, setiap ATA antara, dan output ATA akhir. Tidak ada akun token antara yang dimiliki router/bersama di permukaan aktif.

Properti:

* Pengguna memiliki satu ATA per token antara.
* Pengguna menyediakan setiap ATA dalam daftar akun.
* Setiap ATA antara harus sudah ada (inisialisasi dengan `CreateSyncNative` untuk wSOL, atau melalui program SPL Associated Token Account untuk mint lainnya, sebelum routing).
* Router mentransfer keluar dari satu ATA dan masuk ke vault pool berikutnya pada setiap hop.
* Setiap ATA antara mengakhiri setiap rute dengan saldo yang sama dengan awal — rute mengkonsumsi apa pun yang dihasilkan hop sebelumnya.

Contoh alur untuk rute `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
```

## Tata letak akun per hop

Akun setiap hop diteruskan berturut-turut. Router mengidentifikasi program child dengan membaca akun pertama dalam blok hop setiap hop (ID program), kemudian mengirim ke handler yang benar.

Untuk setiap hop, router mengharapkan akun yang dikelompokkan sebagai:

```
[
  program_id,         // Identifies which pool program (AMM v4, CPMM, CLMM, Stable)
  *child_accounts,    // All accounts required by that pool's swap instruction
]
```

Akun child bervariasi berdasarkan tipe pool:

### Hop AMM v4

Sekitar 18 akun: pool, authority, vaults, mints, akun pasar OpenBook (disimpan dalam daftar akun untuk kompatibilitas mundur meskipun integrasi OpenBook AMM v4 tidak lagi aktif), program token. Lihat [`products/amm-v4/accounts`](/id/products/amm-v4/accounts) untuk daftar lengkap.

### Hop CPMM

Sekitar 11–13 akun: state pool, authority, vaults (2), mints (2), program token, system program, associated token program. Lihat [`products/cpmm/accounts`](/id/products/cpmm/accounts).

### Hop CLMM

Sekitar 15+ akun: pool, tick arrays, vaults, mints, observation state, signer, program token. Lihat [`products/clmm/accounts`](/id/products/clmm/accounts).

### Hop Stable

Mirip dengan AMM v4. Lihat [`products/stable/accounts`](/id/products/stable/accounts).

## Alur token dan kepemilikan ATA

* Pemanggil menandatangani dengan `user_input_ata`.
* Pemanggil **harus memiliki** semua input, ATA antara, dan output. Router akan menolak transaksi jika pemilik ATA antara mana pun bukan penandatangan.
* Saldo `user_input_ata` pemanggil harus cukup untuk input hop pertama (`amount_in` untuk tag 0 / 8, atau `maximum_amount_in` untuk tag 1 / 9).
* Setiap ATA antara harus sudah ada on-chain. Jika tidak, buat sebelumnya — biasanya melalui [program SPL Associated Token Account](https://spl.solana.com/associated-token-account), atau dengan `CreateSyncNative` (tag 5) untuk ATA wSOL.

## Instruksi CreateSyncNative

Jika Anda perlu merutekan melalui SOL terbungkus dan tidak ingin membuat dan menyinkronkan ATA wSOL secara manual, gunakan [`CreateSyncNative`](/id/products/routing/instructions#createsyncnative-tag-5) (tag 5):

```
CreateSyncNative(amount)
```

Ini membuat ATA wSOL di bawah dompet pemanggil, mentransfer `amount` SOL ke dalamnya melalui System Program, dan menyinkronkannya dalam satu instruksi. Berguna untuk menginisialisasi ATA wSOL baru sebelum routing.

## Instruksi CloseTokenAccount

Setelah rute selesai, Anda mungkin ingin menutup ATA antara apa pun — paling umum ATA wSOL — untuk merebut kembali rent. Gunakan [`CloseTokenAccount`](/id/products/routing/instructions#closetokenaccount-tag-6) (tag 6):

```
CloseTokenAccount
```

Token account harus memiliki saldo token nol sebelum ditutup; router tidak akan mengosongkannya secara otomatis untuk Anda.

## Ke mana selanjutnya

* [`products/routing/instructions`](/id/products/routing/instructions) — bentuk argumen dan urutan daftar akun per instruksi.
* [`products/routing/code-demos`](/id/products/routing/code-demos) — membangun rute dalam TypeScript.
* [`reference/program-addresses`](/id/reference/program-addresses) — ID program child.
