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

# Instruksi AMM v4

> Setiap instruksi AMM v4 dengan argumennya, akun pool dan OpenBook yang diharapkan, serta kondisi pre/post pada masing-masing.

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

  [Lihat versi bahasa Inggris →](/products/amm-v4/instructions)
</Info>

<Info>
  Sejak pembaruan program 2026-07, ketergantungan OpenBook / Serum AMM v4 telah **dihapus**. Instruksi v1 warisan `SwapBaseIn` / `SwapBaseOut`, `Deposit`, dan `Withdraw` **mempertahankan tata letak akun lama** untuk kompatibilitas mundur: akun pasar masih diterima di posisi lama mereka, tetapi mereka **tidak lagi divalidasi atau digunakan** (tidak ada CPI yang dikeluarkan). Integrasi baru harus menggunakan titik masuk swap V2, yang menghilangkan akun pasar sepenuhnya. Beberapa instruksi telah dihapus dan sekarang kembali — lihat [entri changelog](/id/reference/changelog/2026-07-22-amm-v4-openbook-removal). Daftar akun di bawah menggunakan nama bidang dari Raydium SDK; IDL yang mendasar kadang-kadang menggunakan awalan `serum_*`.
</Info>

## Inventaris instruksi

| Grup              | Instruksi             | tag | Catatan                                                                                       |
| ----------------- | --------------------- | --- | --------------------------------------------------------------------------------------------- |
| Siklus hidup pool | `Initialize2`         | 1   | Satu-satunya instruksi pembuatan pool (UI default ke CPMM untuk pool baru).                   |
| Likuiditas        | `Deposit`             | 3   | Tambah likuiditas, terima LP. Tata letak tidak berubah (akun pasar diabaikan).                |
| Likuiditas        | `Withdraw`            | 4   | Bakar LP, terima kedua sisi secara pro-rata. Tata letak tidak berubah (akun pasar diabaikan). |
| Swap              | `SwapBaseIn`          | 9   | Swap input-tepat. Tata letak v1 tidak berubah; akun pasar diterima tetapi diabaikan.          |
| Swap              | `SwapBaseOut`         | 11  | Swap output-tepat. Sama seperti di atas.                                                      |
| Swap              | `SwapBaseInV2`        | 16  | **Direkomendasikan.** Swap input-tepat tanpa akun pasar.                                      |
| Swap              | `SwapBaseOutV2`       | 17  | **Direkomendasikan.** Swap output-tepat tanpa akun pasar.                                     |
| Pemeliharaan      | `SetParams`           | 6   | Admin: ubah parameter pool. **Tata letak + nilai `param` berubah** (breaking).                |
| Pemeliharaan      | `WithdrawPnl`         | 7   | Kumpulkan PnL protokol yang terkumpul. **Tata letak akun berubah** (breaking).                |
| Pemeliharaan      | `CreateConfigAccount` | 14  | Admin: inisialisasi PDA `AmmConfig` tingkat program.                                          |
| Pemeliharaan      | `UpdateConfigAccount` | 15  | Admin: ubah parameter konfigurasi tingkat program.                                            |

SDK mengekspos builder hanya untuk instruksi yang menghadap pengguna. Instruksi pemeliharaan biasanya dipanggil oleh keeper Raydium.

**Dihapus / tidak lagi dapat dipanggil** (mereka sekarang kembali dengan `unimplemented!`, dan builder klien mereka dihapus): `Initialize` (tag 0, gunakan `Initialize2`), `MonitorStep` (2), `MigrateToOpenBook` (5), `WithdrawSrm` (8), `PreInitialize` (10, gunakan `Initialize2`), `SimulateInfo` (12), `AdminCancelOrders` (13).

## `Initialize2`

Bootstrap pool AMM v4 baru yang terikat ke pasar OpenBook yang ada.

**Argumen**

```
nonce:        u8
open_time:    u64
init_pc_amount:   u64
init_coin_amount: u64
```

**Akun** (dapat ditulis `W`, penandatangan `S`)

| #  | Nama                         | W | S | Catatan                                           |
| -- | ---------------------------- | - | - | ------------------------------------------------- |
| 1  | `token_program`              |   |   | SPL Token.                                        |
| 2  | `system_program`             |   |   |                                                   |
| 3  | `rent`                       |   |   |                                                   |
| 4  | `amm`                        | W |   | Akun `AmmInfo` (kunci bersemai).                  |
| 5  | `amm_authority`              |   |   | Program PDA.                                      |
| 6  | `amm_open_orders`            | W |   | OpenBook `OpenOrders` (bersemai).                 |
| 7  | `lp_mint`                    | W |   |                                                   |
| 8  | `coin_mint`                  |   |   |                                                   |
| 9  | `pc_mint`                    |   |   |                                                   |
| 10 | `pool_coin_token_account`    | W |   |                                                   |
| 11 | `pool_pc_token_account`      | W |   |                                                   |
| 12 | `pool_withdraw_queue`        | W |   |                                                   |
| 13 | `pool_target_orders_account` | W |   |                                                   |
| 14 | `pool_lp_token_account`      | W |   | LP ATA pembuat.                                   |
| 15 | `pool_temp_lp_token_account` | W |   | Akun awal.                                        |
| 16 | `market_program`             |   |   | Program OpenBook.                                 |
| 17 | `market`                     |   |   | Pasar OpenBook.                                   |
| 18 | `user_wallet`                | W | S | Pembuat. Membayar sewa dan mendanai deposit awal. |
| 19 | `user_token_coin`            | W |   |                                                   |
| 20 | `user_token_pc`              | W |   |                                                   |

**Kondisi pasca**

* `lp_supply = sqrt(init_coin_amount × init_pc_amount) − INIT_BURN`, di mana `INIT_BURN` ≈ 100 unit LP disimpan di luar peredaran.
* Tidak ada pesanan OpenBook yang diposting (kisi order-book telah dihapus). `market_program` / `market` masih dilewatkan tetapi hanya disimpan sebagai bidang referensi; `coin_lot_size` / `pc_lot_size` / `min_size` diinisialisasi ke `0`.

**Kesalahan umum** — `InvalidInput` (desimal tidak cocok, tidak diurutkan), `NotAllowed`.

## `Deposit`

Tambah likuiditas.

**Argumen**

```
max_coin_amount: u64
max_pc_amount:   u64
base_side:       u64    // 0 = base pada coin, 1 = base pada pc
// (beberapa varian SDK juga menerima other_amount_min)
```

**Akun** (ringkas)

| #  | Nama                      | W | S |
| -- | ------------------------- | - | - |
| 1  | `token_program`           |   |   |
| 2  | `amm`                     | W |   |
| 3  | `amm_authority`           |   |   |
| 4  | `amm_open_orders`         |   |   |
| 5  | `amm_target_orders`       | W |   |
| 6  | `lp_mint`                 | W |   |
| 7  | `pool_coin_token_account` | W |   |
| 8  | `pool_pc_token_account`   | W |   |
| 9  | `market`                  |   |   |
| 10 | `user_coin_token_account` | W |   |
| 11 | `user_pc_token_account`   | W |   |
| 12 | `user_lp_token_account`   | W |   |
| 13 | `user_owner`              |   | S |

**Matematika** — pro-rata standar. Menggunakan cadangan *efektif* pool (vault + on-book), SDK menghitung pasangan coin/pc yang menghasilkan jumlah LP yang diberikan dan memeriksanya terhadap `max_*`. Kembali dengan `ExceededSlippage` jika salah satu sisi melebihi batas.

## `Withdraw`

Bakar LP, terima kedua sisi.

**Argumen**

```
amount: u64    // LP untuk dibakar
```

**Akun** — seperti `Deposit` dengan arah terbalik; `lp_mint` dapat ditulis untuk pembakaran, ATA pengguna adalah penerima. Tata letak akun tidak berubah (akun pasar masih dilewatkan secara posisional, diabaikan). Tidak ada lagi langkah settle-from-OpenBook — matematika pro-rata menggunakan saldo vault secara langsung.

## `SwapBaseIn`

Swap input-tepat. Selalu swap **jalur AMM** (tidak merutekan melalui pencocokan OpenBook).

<Note>
  **Gunakan varian V2 untuk kode baru.** Karena ketergantungan OpenBook AMM v4 telah dihapus, titik masuk V1 (`SwapBaseIn`, `SwapBaseOut`) masih mengharapkan daftar akun lengkap 17 (atau 18 dengan akun target-orders opsional), tetapi akun OpenBook/pasar sekarang **diterima secara posisional dan diabaikan** — mereka tidak divalidasi dan tidak ada CPI yang dikeluarkan. Melewatkan jumlah akun yang salah masih kembali dengan `WrongAccountsNumber`, tetapi isi akun pasar tidak lagi diperiksa. Integrasi baru harus menggunakan [`SwapBaseInV2` / `SwapBaseOutV2`](#swapbaseinv2-swapbaseoutv2), yang mengambil daftar akun yang jauh lebih kecil dan mewakili jalur eksekusi kanonik hari ini. Bentuk V1 didokumentasikan di sini untuk kelengkapan dan untuk membaca transaksi on-chain yang ada.
</Note>

**Argumen**

```
amount_in:            u64
minimum_amount_out:   u64
```

**Akun** (ringkas)

| #  | Nama                        | W | S |
| -- | --------------------------- | - | - |
| 1  | `token_program`             |   |   |
| 2  | `amm`                       | W |   |
| 3  | `amm_authority`             |   |   |
| 4  | `amm_open_orders`           | W |   |
| 5  | `amm_target_orders`         | W |   |
| 6  | `pool_coin_token_account`   | W |   |
| 7  | `pool_pc_token_account`     | W |   |
| 8  | `market_program`            |   |   |
| 9  | `market`                    | W |   |
| 10 | `market_bids`               | W |   |
| 11 | `market_asks`               | W |   |
| 12 | `market_event_queue`        | W |   |
| 13 | `market_coin_vault`         | W |   |
| 14 | `market_pc_vault`           | W |   |
| 15 | `market_vault_signer`       |   |   |
| 16 | `user_source_token_account` | W |   |
| 17 | `user_dest_token_account`   | W |   |
| 18 | `user_owner`                |   | S |

**Matematika** — lihat [`products/amm-v4/math`](/id/products/amm-v4/math).

**Kondisi awal**

* `amm.status` memungkinkan swap (bit 0 dari bitmask status tidak diatur).
* `amm.state_data.pool_open_time <= now`.
* `amount_in > 0`.
* `user_source_token_account` memegang setidaknya `amount_in`.

**Kondisi pasca**

* Pengguna kehilangan `amount_in` dari token sumber, mendapatkan `amount_out ≥ minimum_amount_out` dari token tujuan.
* `need_take_pnl_*` ditambah dengan bagian biaya protokol.
* Catatan: penghitung analitik `state_data.swap_*_in_amount` / `swap_*_out_amount` **tidak lagi diperbarui** — nilainya dibekukan. Gunakan log perdagangan untuk analitik volume.

**Kesalahan umum** — `ExceededSlippage`, `InvalidInput`, `InvalidStatus`, `NotAllowed` (mint coin/pc identik).

## `SwapBaseOut`

Output-tepat, kebalikan dari `SwapBaseIn`. Akun yang sama.

**Argumen**

```
max_amount_in: u64
amount_out:    u64
```

## `SwapBaseInV2` / `SwapBaseOutV2`

Varian titik masuk swap (tag **16** / **17**) yang **melewatkan akun OpenBook sepenuhnya**. Matematika identik dengan jalur V1, tetapi daftar akun menyusut menjadi hanya sisi AMM dan pengguna — **8 akun, dan `amm_open_orders` tidak dilewatkan**:

| # | Nama                        | W | S |
| - | --------------------------- | - | - |
| 1 | `token_program`             |   |   |
| 2 | `amm`                       | W |   |
| 3 | `amm_authority`             |   |   |
| 4 | `pool_coin_token_account`   | W |   |
| 5 | `pool_pc_token_account`     | W |   |
| 6 | `user_source_token_account` | W |   |
| 7 | `user_dest_token_account`   | W |   |
| 8 | `user_owner`                |   | S |

Cadangan pool sekarang adalah saldo vault (minus PnL tertunda), jadi matematika kutipan langsung dan identik dengan jalur v1. Gunakan V2 untuk menghemat komputasi dan menghindari melewatkan akun pasar (sekarang diabaikan). Router Raydium selalu menggunakan bentuk V2 saat merutekan melalui AMM v4.

Argumen sama dengan bentuk V1 (`amount_in / minimum_amount_out` untuk `SwapBaseInV2`; `max_amount_in / amount_out` untuk `SwapBaseOutV2`).

## `MonitorStep` dan instruksi dihapus lainnya

<Warning>
  **Dihapus — tidak lagi dapat dipanggil.** Sejak pembaruan 2026-07, `MonitorStep` (tag 2) telah dihapus dari program dan sekarang **kembali** (`unimplemented!`) jika dipanggil. Builder kliennya juga dihapus. Hal yang sama berlaku untuk `MigrateToOpenBook` (5), `WithdrawSrm` (8), `SimulateInfo` (12), `AdminCancelOrders` (13), dan titik masuk pembuatan pool warisan `Initialize` (0) / `PreInitialize` (10) — gunakan `Initialize2` sebagai gantinya.
</Warning>

Secara historis, `MonitorStep` menggerakkan interaksi OpenBook pool: ia menyelesaikan pesanan yang diisi (memindahkan hasil dari vault pasar ke vault pool melalui CPI OpenBook), membatalkan pesanan basi, dan memposting pesanan baru untuk menutup celah antara `target_orders` dan `amm_open_orders`. Dengan ketergantungan OpenBook dihapus, tidak ada yang perlu dikgerakkan dan instruksi hilang. Setiap keeper atau integrasi yang masih memanggilnya harus menghapus panggilan.

## `WithdrawPnl` / `TakePnl`

Penyapuan admin biaya protokol yang terkumpul.

**Argumen**

* `WithdrawPnl` tidak mengambil argumen; ia membaca `need_take_pnl_*` dan memindahkan jumlah yang tepat.

<Warning>
  **Perubahan breaking (admin saja).** Daftar akun turun dari 17 (+1 opsional) menjadi **10** — `amm_open_orders` dan keenam akun pasar dihapus — tanpa penguraian kompatibilitas. Tata letak lama tidak selaras (lama #5 adalah `amm_open_orders`, sekarang `pool_coin_token_account`) dan gagal dengan kesalahan seperti `InvalidCoinVault`. Alat admin harus diperbarui.
</Warning>

**Akun** (tata letak 10-akun baru)

| #  | Nama                      | W | S |                 |
| -- | ------------------------- | - | - | --------------- |
| 1  | `token_program`           |   |   |                 |
| 2  | `amm`                     | W |   |                 |
| 3  | `amm_config`              |   |   |                 |
| 4  | `amm_authority`           |   |   |                 |
| 5  | `pool_coin_token_account` | W |   |                 |
| 6  | `pool_pc_token_account`   | W |   |                 |
| 7  | `pnl_coin_token_account`  | W |   | Penerima.       |
| 8  | `pnl_pc_token_account`    | W |   |                 |
| 9  | `pnl_owner`               |   | S | Multisig admin. |
| 10 | `amm_target_orders`       | W |   |                 |

**Efek**

* Mentransfer `need_take_pnl_coin` dari `pool_coin_token_account` ke `pnl_coin_token_account`.
* Sama untuk pc.
* Mengosongkan `need_take_pnl_coin` dan `need_take_pnl_pc`.
* **Perubahan logika**: jika saldo vault tidak cukup untuk menutupi PnL yang terkumpul, instruksi mengembalikan `TakePnlError` secara langsung (tidak lagi memanipulasi status order-book).

Tidak ada perubahan pada cadangan karena PnL yang terkumpul sudah dikecualikan dari invarian.

## `SetParams`

Perubahan parameter admin, dipanggil oleh multisig Raydium. Argumen adalah tag `param: u8` + payload.

<Warning>
  **Perubahan breaking (admin saja).** Daftar akun dikurangi menjadi hanya `[amm (W), admin (S)]` (otoritas, open-orders, target-orders, vault, dan semua akun pasar dihapus). Enum `param` **dinomori ulang dan dipangkas**: `Status` = 0, `State` = 1, `Fees` = **2** (sebelumnya 9), `SetOpenTime` = **3** (sebelumnya 11). Semua parameter kisi order-book dan `AmmOwner`, `LastOrderDistance`, `UpdateOpenOrder` dihapus, dan struct `SetParamsInstruction` menghilangkan `new_pubkey` dan `last_order_distance`. Alat admin harus diperbarui.
</Warning>

## Matriks perubahan status

Kolom OpenBook hilang — tidak ada instruksi yang menyentuh order book lagi.

| Instruksi                       | Pasokan `lp_mint`               | Vault                                    | Penghitung PnL |
| ------------------------------- | ------------------------------- | ---------------------------------------- | -------------- |
| `Initialize2`                   | pasokan init dicetak ke pembuat | `+ init_coin_amount`, `+ init_pc_amount` | 0              |
| `Deposit`                       | +                               | + kedua                                  | —              |
| `Withdraw`                      | −                               | − kedua                                  | —              |
| `SwapBaseIn` / `SwapBaseInV2`   | —                               | + in, − out                              | + bagian pnl   |
| `SwapBaseOut` / `SwapBaseOutV2` | —                               | + in, − out                              | + bagian pnl   |
| `WithdrawPnl`                   | —                               | − (pnl disapu)                           | 0              |
| `SetParams`                     | —                               | —                                        | —              |

## Ke mana selanjutnya

* [`products/amm-v4/code-demos`](/id/products/amm-v4/code-demos) — Contoh TypeScript untuk alur swap dan LP.
* [`products/amm-v4/fees`](/id/products/amm-v4/fees) — Detail `WithdrawPnl` dan pembagian biaya.
* [`reference/error-codes`](/id/reference/error-codes) — Tabel referensi maju (kesalahan AMM v4 tercantum di halaman itu).

Sumber:

* [Program Raydium AMM — `raydium-io/raydium-amm`](https://github.com/raydium-io/raydium-amm)
* Modul `Liquidity` Raydium SDK v2
* Program OpenBook — validasi akun di sisi pasar
