Halaman ini diterjemahkan secara otomatis oleh AI. Versi bahasa Inggris adalah acuan resmi.Lihat versi bahasa Inggris →
Invariant
Pool mempertahankancoin_reserve × pc_reserve = k, di mana (setelah penghapusan OpenBook 2026-07):
- Reserve sekarang vault-only. Istilah open-order historis (token yang pool escrow sebagai limit order OpenBook) telah dihapus — nilainya sudah nol dalam praktik jauh sebelum penghapusan. Anda dapat menghitung
klangsung dari saldo vault on-chain. - Akrual PnL (
need_take_pnl_*) dikurangi sehingga kurva terjaga ketika admin menyapu biaya. Prinsip yang sama dengan pengecualianprotocol_fees_*CPMM.
calc_total_without_take_pnl_no_orderbook (varian lama yang aware orderbook sudah hilang).
Setiap operasi Swap* menegakkan k' ≥ k setelah menambahkan bagian biaya LP kembali ke reserve.
Konvensi biaya
AMM v4 menggunakan ratio fees (pasangan numerator/denominator) daripada konvensi1/1_000_000 dari CPMM / CLMM. Struct Fees on-chain (lihat Fees::initialize dalam sumber program) default ke:
- Total biaya swap:
swap_fee = amount_in × 25 / 10_000 = 0.25%dari input kotor. - Bagian protokol:
pnl_numerator / pnl_denominator = 12 / 100 = 12%dari biaya swap, yang menghasilkan0.25% × 12% = 0.03%dari volume. Bagian ini terakrual ke counter PnL dan disapu olehWithdrawPnl. - Bagian LP: sisa
88%dari biaya swap, yang menghasilkan0.25% × 88% = 0.22%dari volume. Tetap di pool dan menginflasik. - Tidak ada bagian dana. AMM v4 tidak memiliki pemisahan biaya dana CPMM/CLMM.
pnl_numerator / pnl_denominator adalah fraksi dari biaya, bukan dari volume perdagangan — kesalahpahaman umum dari nama field ini.
trade_fee_numerator / trade_fee_denominator (juga 25 / 10_000) secara historis digunakan oleh integrasi OpenBook saat menghitung harga inclusive-fee untuk grid limit-order AMM. Dengan kode OpenBook dihapus, field ini vestigial; biaya swap aktif adalah swap_fee_*.
Penyimpangan dari default ini jarang terjadi tetapi ada di beberapa pool legacy; selalu baca biaya dari AmmInfo.fees sebelum memberikan penawaran.
Matematika swap langsung (jalur AMM)
Kasus paling sederhana: pengguna swap terhadap vault pool tanpa berinteraksi dengan OpenBook. Reserve internal pool (termasuk alokasi on-book) adalah denominator. SwapBaseIn (input tepat):MonitorStep / implicit-settle yang dulu menyegarkan sisi OpenBook telah dihapus.
SwapBaseOut (output tepat):
Interaksi order-book (historis)
Dihapus. Konstruksi grid yang dijelaskan di bagian ini mencerminkan bagaimana AMM v4 awalnya mencerminkan kurva ke pasar OpenBook. Integrasi OpenBook — termasuk crank
MonitorStep dan logika grid build_orders — telah dihapus dari program (upgrade 2026-07). Matematika di bawah dipertahankan murni sebagai konteks historis untuk apa yang pernah diskalakan akun on-chain target_orders / amm_open_orders.AmmInfo:
depth— jumlah level harga per sisi.amount_wave— unit dasar ukuran per level.min_size,coin_lot_size,pc_lot_size— batasan pasar OpenBook.state_data.swap_acc_coin_fee,swap_acc_pc_fee— counter biaya kumulatif sejakTakePnlterakhir.
target_orders yang dihitung dalam build_orders dan dibandingkan dengan amm_open_orders setiap MonitorStep. Setiap perbedaan menghasilkan pembatalan + posting baru. Order yang baru terisi di OpenBook settle ke vault pool pada operasi berikutnya yang menyegarkan sisi OpenBook.
Integrator jarang perlu menghitung grid — keeper Raydium mempertahankannya — tetapi berguna untuk mengetahui bahwa:
- Pool dengan likuiditas on-book signifikan memiliki likuiditas itu berkontribusi ke
k, bukan idle. - Pasar OpenBook yang stale (event queue penuh, crank terblokir) mencegah update grid; AMM kemudian dapat mengutip harga yang menyimpang dari order book yang terlihat sampai crank berikutnya.
Langkah settlement (PnL)
Bagian protokol 0.03% terakrual kestate_data.need_take_pnl_coin dan state_data.need_take_pnl_pc. TakePnl memindahkan jumlah ini keluar dari vault ke destinasi yang ditentukan admin, kemudian menolkan counter.
Properti krusial: reserve dalam invariant selalu dihitung minus PnL terakrual, jadi TakePnl tidak menggerakkan kurva. Ini cocok dengan konvensi CPMM.
Contoh kerja
State pool:coin_reserve = 1_000_000_000_000(1.000.000 coin-side; 6 desimal)pc_reserve = 2_000_000_000_000(2.000.000 pc-side; 6 desimal)- Biaya: default
swap = 25/10_000,pnl = 3/10_000.
SwapBaseIn input-tepat 1_000_000_000 coin (1.000 coin).
2_200_000) tidak dipecah di mana pun — itu hanya residual yang menaikkan k'.
Aturan presisi
- Perkalian reserve menggunakan
u128; pembagian final pembulatan menuju nol. swap_feepembulatan naik (sehingga pool tidak undercharge).amount_inuntukSwapBaseOutpembulatan naik (sehingga pengguna tidak underpay).- Pool dengan rasio reserve ekstrem dapat hit
ZeroTradingTokenspada input sangat kecil; konvensi yang sama seperti CPMM.
Keterbatasan vs CPMM
- Reserve AMM v4 sekarang vault-only, jadi Anda dapat mengutip langsung dari saldo vault (minus
need_take_pnl_*) — persyaratan sebelumnya untuk menambahkan jumlahopen_orders.free/open_orders.lockedtidak lagi berlaku. Kutipan SDK / API tetap menjadi opsi paling sederhana. - AMM v4 tidak mengekspos TWAP terstruktur on-chain. Konsumen eksternal yang menginginkan harga yang didukung AMM-v4 harus menghitungnya sendiri dari log perdagangan.
- Token-2022 tidak didukung.
Ke mana selanjutnya
products/amm-v4/instructions— di manaSwapBaseIn,Deposit, dll. terhubung.products/amm-v4/fees— mekanik biaya penuh, detailTakePnl.algorithms/constant-product— derivasi bersama.
- Sumber program Raydium AMM —
raydium-io/raydium-amm - Modul
LiquidityRaydium SDK v2

