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

# Biaya AMM v4

> Biaya perdagangan 0,25%, pembagian LP/protokol, generasi PnL dari pengisian OpenBook, dan cara admin mengumpulkan biaya protokol yang terkumpul.

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

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

## Satu tingkat yang dipublikasikan

Berbeda dengan CPMM dan CLMM, AMM v4 **tidak memiliki akun `AmmConfig`**. Biaya disimpan langsung pada struct `AmmInfo.fees` setiap pool dan ditetapkan saat pembuatan pool. Default yang mencakup hampir setiap pool AMM v4 yang aktif:

| Field on-chain                                      | Default       | Arti                                                                                                                                     |
| --------------------------------------------------- | ------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |
| `swap_fee_numerator / swap_fee_denominator`         | `25 / 10_000` | **Biaya perdagangan kotor pada swap jalur AMM: 0,25% dari volume input.**                                                                |
| `trade_fee_numerator / trade_fee_denominator`       | `25 / 10_000` | Sisa setelah penghapusan OpenBook (secara historis digunakan untuk penetapan harga limit order). Default sama `0,25%` dengan `swap_fee`. |
| `pnl_numerator / pnl_denominator`                   | `12 / 100`    | **Bagian protokol dari biaya swap: 12%** — yaitu `0,25% × 12% = 0,03%` dari volume. Terkumpul ke counter `need_take_pnl_*`.              |
| `min_separate_numerator / min_separate_denominator` | `5 / 10_000`  | Lantai presisi internal yang digunakan oleh logika pembulatan pembagian biaya.                                                           |

Perhatikan bahwa `pnl_numerator / pnl_denominator` adalah fraksi **dari biaya swap**, bukan dari volume perdagangan — kesalahpahaman yang umum. Bagian LP adalah pelengkap (`88%` dari biaya = `0,22%` dari volume) dan bersifat implisit; tidak ada numerator "bagian LP" terpisah.

Sejumlah kecil pool awal dibuat dengan numerator berbeda; selalu baca `AmmInfo.fees` sebelum mengutip.

Tidak ada **biaya dana** dan **biaya kreator**: ini adalah inovasi CPMM/CLMM yang tidak ada dalam model biaya asli AMM v4.

## Cara pembagian dihitung

Pada setiap swap, pool mengenakan biaya perdagangan kotor dari jumlah input, kemudian membagi:

```
gross_fee   = ceil(amount_in * swap_fee_numerator / swap_fee_denominator)        // 0.25% of amount_in
pnl_portion = gross_fee * pnl_numerator / pnl_denominator                        // 12% of gross_fee
lp_portion  = gross_fee − pnl_portion                                            // 88% of gross_fee
```

* `lp_portion` tetap berada di vault dan berkontribusi pada `k` berikutnya. LP menangkapnya dengan menebus token LP nanti.
* `pnl_portion` menambah `AmmInfo.state_data.need_take_pnl_coin` atau `need_take_pnl_pc` tergantung sisi mana yang merupakan input swap.

Trik yang sama untuk menjaga invariant seperti CPMM: jumlah PnL secara fisik berada di vault tetapi dikurangi dari reserve yang digunakan dalam kurva, sehingga `TakePnl` memindahkan token tanpa menggeser harga.

## PnL dari OpenBook (historis)

<Note>
  **Dihapus.** Integrasi OpenBook telah dihapus dari program, sehingga aliran PnL *kedua* yang dijelaskan di bagian ini tidak lagi dihasilkan. Counter `total_pnl_{coin,pc}` sekarang adalah field yang sudah usang — mereka membawa nilai historis yang beku dan tidak pernah diperbarui. Jalur biaya protokol 0,03% (di atas) tidak terpengaruh dan masih aktif.
</Note>

Secara historis, AMM v4 memiliki aliran pendapatan *kedua* seperti biaya: ketika limit order-nya di OpenBook terisi, pool bisa berada di sisi taker dari pengisian dan mendapatkan atau membayar spread maker/taker pasar. Event PnL ini diselesaikan ke vault pool selama `MonitorStep` dan program mengkreditnya ke `state_data.total_pnl_{coin,pc}` sebagai counter informatif.

* Ketika grid yang diposting pool dikalibrasi dengan benar di sekitar harga kurva, pengisian OpenBook cenderung **positif biaya** untuk pool — AMM secara efektif membuat pasar di OpenBook dan mendapatkan rebate maker.
* Ketika OpenBook dijeda atau antrian event penuh, pool bisa duduk di order basi yang terisi dengan harga yang tidak menguntungkan, menghasilkan PnL negatif. Coupling operasional ini adalah salah satu motivasi untuk pindah dari desain hybrid.

PnL OpenBook ini **bukan** sama dengan biaya protokol 0,03%. PnL OpenBook menginflasi reserve pool secara langsung (menguntungkan LP + protokol sebanding dengan pembagian biaya), sementara biaya protokol 0,03% ditandai khusus untuk sweep admin. Dengan sisi OpenBook hilang, satu-satunya akrual biaya hari ini adalah 0,25% pada swap AMM dan pembagiannya 22/3.

## Pengumpulan

Admin (multisig Raydium) memanggil `WithdrawPnl` untuk mengumpulkan `need_take_pnl_*` ke akun "pemilik PnL" tingkat pool yang dikonfigurasi pada `AmmConfig` program (config berbeda yang bersifat program-scoped — bukan AmmConfig gaya per-pool CPMM). Pengumpulan:

1. Mentransfer `need_take_pnl_coin` / `need_take_pnl_pc` dari vault pool ke tujuan PnL.
2. Mengosongkan counter.

Tidak ada lagi langkah settle OpenBook. Jika saldo vault tidak cukup untuk menutupi PnL yang terkumpul, instruksi sekarang mengembalikan `TakePnlError` secara langsung. Operasi tidak menggerakkan kurva — LP seharusnya tidak melihat perubahan harga di seluruh panggilan `WithdrawPnl`. Perhatikan bahwa tata letak akun `WithdrawPnl` berubah dalam upgrade 2026-07 (lihat [instructions](/id/products/amm-v4/instructions#withdrawpnl-takepnl)).

## Penebusan biaya LP

Tidak ada instruksi khusus "kumpulkan biaya LP". Biaya LP terakumulasi di vault dan menginflasi `k` seiring waktu; LP merealisasikannya dengan membakar token LP melalui `Withdraw`. Nilai token LP tumbuh secara monoton saat `(coin_reserve_effective, pc_reserve_effective)` tumbuh.

## Visualisasi: kemana volume \$1.000 USDC pergi

Pada swap berat USDC sebesar \$1.000 terhadap pool dengan parameter default:

```
Gross trade fee (0.25%):   $2.50
  LP share   (0.22%):       $2.20   → stays in pool, raises k
  PnL share  (0.03%):       $0.30   → need_take_pnl_pc, swept by TakePnl
Remainder sent to user:   $997.50   (minus curve-driven price impact)
```

Bandingkan dengan CPMM `AmmConfig[0]` (tier 0,25%, tanpa biaya kreator): LP mendapat \$2,10, protokol \$0,30, dana \$0,10. CPMM memperkenalkan garis dana dengan mengukir dari apa yang akan menjadi bagian LP dalam tier setara AMM v4.

## Tabel perbandingan

|                     | AMM v4                           | CPMM `index=0`                                   | CLMM `index=2`                   |
| ------------------- | -------------------------------- | ------------------------------------------------ | -------------------------------- |
| Biaya perdagangan   | 0,25%                            | 0,25%                                            | 0,25%                            |
| LP                  | 0,22%                            | 0,21%                                            | Bervariasi menurut emisi         |
| Protokol            | 0,03%                            | 0,03%                                            | Per tier                         |
| Dana                | N/A                              | 0,01%                                            | Per tier                         |
| Kreator (opsional)  | N/A                              | 0 secara default                                 | N/A                              |
| Tempat biaya berada | Pool vault + need\_take\_pnl\_\* | Pool vault + protocol\_fees\_\* + fund\_fees\_\* | Global + per-tick + per-position |

Matriks lengkap di [`reference/fee-comparison`](/id/reference/fee-comparison).

## Catatan integrator

* **Quoting.** Ambil `AmmInfo` melalui SDK atau `api-v3.raydium.io/pools/info/ids`. Reserve sekarang hanya vault, jadi Anda dapat mengutip langsung terhadap saldo vault — ingat saja untuk mengurangi `need_take_pnl_*` (PnL yang terkumpul dipegang di vault tetapi dikecualikan dari kurva).
* **Parameter biaya basi.** Pada prinsipnya `SetParams` bisa mengubah `swap_fee_numerator`, tetapi dalam praktiknya multisig Raydium tidak mengubah default untuk pool apa pun yang aktif. Tetap saja, selalu baca dari state on-chain daripada hardcoding.
* **Tanpa reward.** AMM v4 tidak mendukung emisi reward on-pool. Farm ekosistem legacy (Farm v3 / v5 / v6) adalah setara staking-layer — lihat [`products/farm-staking`](/id/products/farm-staking).

## Ke mana selanjutnya

* [`products/amm-v4/math`](/id/products/amm-v4/math) — derivasi biaya perdagangan di dalam kurva.
* [`products/amm-v4/instructions`](/id/products/amm-v4/instructions) — daftar akun `WithdrawPnl` / `SetParams`.
* [`reference/fee-comparison`](/id/reference/fee-comparison) — matriks berdampingan.

Sumber:

* [Program Raydium AMM — `raydium-io/raydium-amm`](https://github.com/raydium-io/raydium-amm)
* Field numerator/denominator biaya AMM v4 on-chain (diverifikasi terhadap akun `AmmInfo` mainnet).
