Halaman ini diterjemahkan secara otomatis oleh AI. Versi bahasa Inggris adalah acuan resmi.Lihat versi bahasa Inggris →
Kurva tabel pencarian
Stable AMM menggantikan formula x·y=k dengan tabel pencarian sparse dari tuple (x, y, price). Saat menentukan harga swap, program:- Menghitung rasio pool saat ini dari cadangan.
- Mencari secara biner tabel untuk menemukan dua entri yang membatasi rasio tersebut.
- Menginterpolasi secara linier di antara keduanya untuk mendapatkan harga perantara.
- Menerapkan biaya dan mengembalikan kutipan.
Tata letak tabel dan pencarian biner
ModelDataInfo menyimpan hingga 50.000 entri DataElement, diindeks oleh admin. Hanya valid_data_count pertama yang aktif. Setiap entri:
- Hitung rasio:
target_ratio = (x_real * multiplier) / y_real. - Cari secara biner entri di mana
(element.x * multiplier) / element.ymembatasitarget_ratio. - Ketika bracket
[min_idx, max_idx]ditemukan, interpolasi.
state.rs::ModelDataInfo::get_mininum_range_by_xy_real. Invarian kunci: entri harus diurutkan (x naik, y turun, price naik) agar pencarian berfungsi.
Interpolasi linier
Setelah dua titik tabel membatasi rasio, interpolasi menghitung harga perantara dan pasangan cadangan:Penskalaan: multiplier
Cadangan pool dan harga disimpan pada skala berbeda. Bidangmultiplier pada ModelDataInfo memperhitungkan hal ini. Pola umum:
- Coin memiliki 6 desimal, PC memiliki 18 desimal.
- Multiplier = 10^6 (atau serupa).
- Entri tabel disimpan pada skala berkurang agar sesuai dengan batas u64.
Penetapan harga swap: SwapBaseIn dan SwapBaseOut
SwapBaseIn (input tepat)
Diberikan jumlah inputamount_in:
- Dapatkan rasio saat ini dari
(coin_vault, pc_vault). - Temukan entri tabel yang membatasi dan interpolasi untuk mendapatkan rasio ruang tabel.
- Konversi input ke ruang tabel:
dx_table = amount_in * multiplier / ratio. - Kueri tabel pada koordinat X baru untuk menemukan Y baru.
dy_table = y_old - y_new.- Konversi kembali:
dy_real = dy_table * ratio / multiplier. - Terapkan biaya perdagangan:
dy_output = dy_real - (dy_real * trade_fee_numerator / trade_fee_denominator). - Kembalikan
dy_output.
SwapBaseOut (output tepat)
Simetris: diberikanamount_out yang diinginkan, selesaikan amount_in yang diperlukan.
Kedua jalur membaca cadangan efektif langsung dari vault pool. Pool tidak menyimpan pesanan terbuka OpenBook selama bertahun-tahun, jadi tidak ada yang perlu diselesaikan terlebih dahulu — saldo vault adalah seluruh ceritanya. (Upgrade 2026-06-22 menghapus kode pasar sisa.)
Penerapan biaya
Identik dengan AMM v4: lihatproducts/amm-v4/math untuk penurunan lengkap.
pnl_portion masuk ke need_take_pnl_* dan disapu oleh admin melalui WithdrawPnl. lp_portion tetap di vault, menginflasi k dan menguntungkan pemegang token LP.
Akuntansi aset pool
Formula secara historis menambahkan dana yang dipegang pool sebagai pesanan terbuka di akun OpenOrders OpenBook-nya. Istilah itu telah menjadi nol dalam praktik sejak pool berhenti memposting pesanan, dan upgrade 2026-06-22 menghapusnya sepenuhnya dari formula, meninggalkan perhitungan vault-only:need_take_pnl yang terakumulasi tetapi belum disapu secara fisik berada di vault tetapi dikecualikan dari penetapan harga). Kode kutipan dan pengindeks yang sebelumnya membaca saldo OpenOrders harus menghapus istilah itu.
MonitorStep (dihapus)
MonitorStep adalah instruksi crank yang menyelesaikan pengisian OpenBook yang tertunda, menghitung ulang AmmInfo.target_orders, dan memposting ulang grid pesanan batas yang berasal dari tabel pencarian. Pool berhenti memposting pesanan ke OpenBook bertahun-tahun yang lalu, jadi crank tidak memiliki apa pun untuk dilakukan; itu dihapus dalam upgrade 2026-06-22. Integrator tidak perlu melakukan crank pada pool Stable.
Ringkasan: mengapa ini berfungsi
Desain tabel pencarian + interpolasi adalah efisien dan fleksibel:- Efisiensi: Pencarian biner adalah O(log 50.000) ≈ 16 iterasi, masing-masing ~ 300–500 CU. Interpolasi adalah beberapa perkalian/pembagian. Total biaya kutipan adalah ~5k–15k CU, jauh lebih murah daripada menghitung ulang formula pada setiap swap.
- Fleksibilitas: Admin dapat mengkodekan kurva piecewise-linear apa pun. Pasangan stablecoin mendapat kepadatan tinggi sekitar 1:1; pasangan berjaminan mendapat kurva khusus.
- Likuiditas mandiri: Semua dana hidup di vault pool dan penetapan harga membacanya langsung — tidak ada crank, tidak ada buku pesanan eksternal, lebih sedikit akun per transaksi.
raydium-stable/program/src/state.rs, metode get_data_by_x, get_data_by_y, get_dy_by_dx_base_in, dll.
Ke mana selanjutnya
- Akun — referensi bidang
ModelDataInfodanDataElement. - Instruksi — set yang dapat dipanggil (swap, deposit, withdraw,
WithdrawPnl) dan instruksi yang dihapus. - Biaya — penerapan biaya dan
WithdrawPnl. products/amm-v4/math— untuk logika penetapan harga pesanan inklusif biaya OpenBook.
raydium-stable/program/src/state.rs(implementasi interpolasi dan pencarian biner)raydium-stable/program/src/math.rs(utilitas kalkulator)

