> ## 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 pra/pasca 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>
  Instruksi AMM v4 secara seragam mengharapkan baik **sisi pool** (akun program AMM v4) maupun **sisi market** (akun OpenBook untuk market yang terikat). Menghilangkan atau tidak cocok dengan kedua set akan mengakibatkan pengembalian. Daftar akun di bawah menggunakan nama field dari SDK Raydium untuk kejelasan; IDL yang mendasar kadang menggunakan prefiks `serum_*`.
</Info>

## Inventaris instruksi

| Grup              | Instruksi             | Catatan                                                                                  |
| ----------------- | --------------------- | ---------------------------------------------------------------------------------------- |
| Siklus hidup pool | `Initialize2`         | Instruksi pembuatan pool saat ini (masih berfungsi; UI standar ke CPMM untuk pool baru). |
| Likuiditas        | `Deposit`             | Tambah likuiditas, terima LP.                                                            |
| Likuiditas        | `Withdraw`            | Bakar LP, terima kedua sisi secara pro-rata.                                             |
| Swap              | `SwapBaseIn`          | Swap input-pasti (jalur penuh: vault + OpenBook).                                        |
| Swap              | `SwapBaseOut`         | Swap output-pasti (jalur penuh).                                                         |
| Swap              | `SwapBaseInV2`        | Swap input-pasti yang melewati OpenBook — vault saja, lebih sedikit akun.                |
| Swap              | `SwapBaseOutV2`       | Swap output-pasti yang melewati OpenBook.                                                |
| Pemeliharaan      | `SetParams`           | Admin: ubah parameter pool.                                                              |
| Pemeliharaan      | `WithdrawPnl`         | Bersihkan PnL protokol yang terkumpul ke akun pemilik PnL.                               |
| Pemeliharaan      | `CreateConfigAccount` | Admin: inisialisasi PDA `AmmConfig` tingkat program.                                     |
| Pemeliharaan      | `UpdateConfigAccount` | Admin: ubah parameter konfigurasi tingkat program.                                       |

SDK mengekspos builder untuk instruksi yang menghadap pengguna saja. Instruksi pemeliharaan biasanya dijalankan oleh penjaga Raydium.

## `Initialize2`

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

**Argumen**

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

**Akun** (dapat ditulis `W`, penanda tangan `S`)

| #  | Nama                         | W | S | Catatan                                           |
| -- | ---------------------------- | - | - | ------------------------------------------------- |
| 1  | `token_program`              |   |   | SPL Token.                                        |
| 2  | `system_program`             |   |   |                                                   |
| 3  | `rent`                       |   |   |                                                   |
| 4  | `amm`                        | W |   | Akun `AmmInfo` (kunci berdasarkan seed).          |
| 5  | `amm_authority`              |   |   | PDA program.                                      |
| 6  | `amm_open_orders`            | W |   | OpenBook `OpenOrders` (berdasarkan seed).         |
| 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 |   | ATA LP pembuat.                                   |
| 15 | `pool_temp_lp_token_account` | W |   | Akun awal.                                        |
| 16 | `market_program`             |   |   | Program OpenBook.                                 |
| 17 | `market`                     |   |   | Market OpenBook.                                  |
| 18 | `user_wallet`                | W | S | Pembuat. Membayar rent 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 dari peredaran.
* Pesanan OpenBook **belum** diposting; `MonitorStep` pertama memposting grid awal.

**Kesalahan umum** — `InvalidInput` (desimal tidak cocok, tidak terurut), `NotApproved`, sisi OpenBook `InvalidMarketState`.

## `Deposit`

Tambah likuiditas.

**Argumen**

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

**Akun** (singkat)

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

**Matemat** — pro-rata standar. Menggunakan reserve *efektif* pool (vault + on-book), SDK menghitung pasangan coin/pc yang menghasilkan jumlah LP yang diberikan dan memeriksanya terhadap `max_*`. Mengembalikan dengan `ExceededSlippage` jika salah satu sisi melampaui 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. Langkah mirip `MonitorStep` settlement-dari-OpenBook terjadi secara internal sebelum matemat pro-rata sehingga penebusan menggunakan reserve segar.

## `SwapBaseIn`

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

<Note>
  **Gunakan varian V2 untuk kode baru.** Karena AMM v4 tidak lagi berbagi likuiditas ke OpenBook, entrypoint V1 (`SwapBaseIn`, `SwapBaseOut`) — yang masih memerlukan set lengkap akun OpenBook untuk validasi — secara fungsional berlebihan. 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** (singkat)

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

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

**Kondisi pra**

* `amm.status` mengizinkan swap (bit 0 dari bitmask status tidak ditetapkan).
* `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, memperoleh `amount_out ≥ minimum_amount_out` dari token tujuan.
* `state_data.swap_*_in_amount` dan `swap_*_out_amount` ditambah (untuk analitik).
* `need_take_pnl_*` ditambah dengan bagian biaya protokol.

**Kesalahan umum** — `ExceededSlippage`, `InvalidInput`, `InvalidStatus`, `InvalidMarket`.

## `SwapBaseOut`

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

**Argumen**

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

## `SwapBaseInV2` / `SwapBaseOutV2`

Varian entrypoint swap yang **melewati akun OpenBook sepenuhnya**. Matemat identik dengan jalur V1, tetapi daftar akun menyusut ke sisi AMM saja:

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

Reserve efektif pool masih memperhitungkan token yang diposting di OpenBook, jadi matemat kuotasi tidak berubah. Gunakan V2 untuk menghemat komputasi dan menghindari melewatkan akun market ketika Anda tidak memerlukan crank OpenBook dalam transaksi yang sama. 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` (warisan / inert)

<Note>
  **Tidak lagi dikerjakan.** AMM v4 tidak lagi berbagi likuiditas ke OpenBook, jadi `MonitorStep` tidak ada yang harus dilakukan — pool tidak memiliki pesanan yang diposting untuk diselesaikan, dibatalkan, atau diganti. Instruksi tetap berada di program on-chain untuk kompatibilitas kebelakangan tetapi penjaga Raydium tidak lagi memanggilnya. Memanggilnya secara manual pada dasarnya adalah no-op (selain dari menyegarkan state yang dinolkan) dan seharusnya tidak diperlukan oleh integrator.
</Note>

Awalnya instruksi ini melakukan crank pada interaksi OpenBook pool.

**Argumen**

```
plan_order_limit:   u16
place_order_limit:  u16
cancel_order_limit: u16
```

**Akun** — semuanya di atas untuk swap, ditambah akun administratif OpenBook.

**Efek asli** (tidak lagi relevan dalam praktik):

* Menyelesaikan pesanan apa pun yang diisi (hasilnya dipindahkan dari `market_coin_vault`/`market_pc_vault` ke vault pool melalui OpenBook CPI).
* Membatalkan pesanan basi yang harganya atau ukurannya tidak lagi cocok dengan `target_orders`.
* Memposting pesanan baru untuk menutup celah antara `target_orders` dan `amm_open_orders`.

Tanpa izin. Akun apa pun dapat memanggilnya; secara historis penjaga Raydium melakukannya secara rutin.

## `WithdrawPnl` / `TakePnl`

Pembersihan admin biaya protokol yang terkumpul.

**Argumen**

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

**Akun** (singkat)

| #  | Nama                      | W | S |                                    |
| -- | ------------------------- | - | - | ---------------------------------- |
| 1  | `token_program`           |   |   |                                    |
| 2  | `amm`                     | W |   |                                    |
| 3  | `amm_authority`           |   |   |                                    |
| 4  | `amm_config`              |   |   |                                    |
| 5  | `amm_open_orders`         | W |   |                                    |
| 6  | `pool_coin_token_account` | W |   |                                    |
| 7  | `pool_pc_token_account`   | W |   |                                    |
| 8  | `pnl_coin_token_account`  | W |   | Penerima, disimpan di `AmmConfig`. |
| 9  | `pnl_pc_token_account`    | W |   |                                    |
| 10 | `pnl_owner`               |   | S | Multisig admin.                    |
| 11 | `market_program`          |   |   |                                    |
| 12 | `market`                  | W |   |                                    |
| 13 | `market_event_queue`      | W |   |                                    |
| 14 | `market_coin_vault`       | W |   |                                    |
| 15 | `market_pc_vault`         | W |   |                                    |
| 16 | `market_vault_signer`     |   |   |                                    |

**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`.

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

## `SetParams`

Perubahan parameter admin: bitmask status, kedalaman grid pemesanan, gelombang jumlah, biaya (jarang), dll. Dipanggil oleh multisig Raydium. Argumen adalah tag `param: u8` + payload, serupa dengan `UpdateAmmConfig` CPMM.

## Matriks perubahan state

| Instruksi     | supply `lp_mint`               | Vault                                    | Penghitung PnL | OpenBook             |
| ------------- | ------------------------------ | ---------------------------------------- | -------------- | -------------------- |
| `Initialize2` | supply init dicetak ke pembuat | `+ init_coin_amount`, `+ init_pc_amount` | 0              | OpenOrders dibuat    |
| `Deposit`     | +                              | + kedua                                  | —              | selesaikan pengisian |
| `Withdraw`    | −                              | − kedua                                  | —              | selesaikan pengisian |
| `SwapBaseIn`  | —                              | + in, − out                              | + bagian pnl   | mungkin re-post grid |
| `SwapBaseOut` | —                              | + in, − out                              | + bagian pnl   | mungkin re-post grid |
| `MonitorStep` | —                              | selesaikan pengisian                     | —              | batalkan / post      |
| `WithdrawPnl` | —                              | − (pnl dikumpulkan)                      | 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 terdaftar di halaman tersebut).

Sumber:

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