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.
Halaman ini diterjemahkan secara otomatis oleh AI. Versi bahasa Inggris adalah acuan resmi.Lihat versi bahasa Inggris →
Mengapa sqrt-price, bukan price
CLMM keluarga Uniswap-v3 merepresentasikan price sebagai akar kuadratnya, disimpan dalam fixed-pointQ64.64:
- Matematika likuiditas linear. Jumlah token0 atau token1 dalam kisaran harga ternyata merupakan fungsi linear dari
sqrt_price, bukan dariprice. Menyimpansqrt_pricememungkinkan langkah swap mengevaluasi formula linear tersebut tanpa menghitung akar kuadrat. - Kontrol overflow.
sqrt_price · Lpas diu256untuk semua parameter yang masuk akal;price · Ldapat overflow jauh lebih cepat. - Matematika tick seragam. Karena tick didefinisikan sebagai
1.0001^i,sqrt(price) = 1.00005^ijuga merupakan pangkat eksak dari tangga 1.00005. Setiap penyeberangan tick diterjemahkan ke perkalian kecil dalam ruangsqrt_price_x64.
price = (sqrt_price_x64 / 2^64)^2.
Kisi tick
Harga didiskritisasi pada grid:tick_i adalah i32. Rentang aktif adalah [MIN_TICK, MAX_TICK] = [−443636, 443636], memberikan rentang harga sekitar [2^−128, 2^128]. tick_spacing setiap pool diatur oleh tier biayanya: spasi lebih kecil untuk pasangan ketat (misalnya tier stablecoin 0,01% menggunakan spasi 1), spasi lebih besar untuk pasangan volatile (tier 0,25% menggunakan 60, tier 1% menggunakan 120).
Posisi harus memiliki tick_lower dan tick_upper selaras dengan tick_spacing. Tick aktif pool (yang memiliki likuiditas mulai atau berakhir di sana) adalah satu-satunya tick yang peduli untuk langkah swap.
Likuiditas-ke-jumlah
Untuk posisi dengan likuiditasL dan kisaran harga [sqrt_lo, sqrt_hi] (semua nilai sqrt_price):
| Status Pool | Jumlah token0 | Jumlah token1 |
|---|---|---|
Harga di atas kisaran (sqrt_p ≥ sqrt_hi) | 0 | L · (sqrt_hi − sqrt_lo) |
| Harga dalam kisaran | L · (sqrt_hi − sqrt_p) / (sqrt_p · sqrt_hi) | L · (sqrt_p − sqrt_lo) |
Harga di bawah kisaran (sqrt_p ≤ sqrt_lo) | L · (sqrt_hi − sqrt_lo) / (sqrt_lo · sqrt_hi) | 0 |
(x_v, y_v) yang dipilih sehingga (sqrt_p, L) pool saat ini konsisten dengan L = sqrt(x_v · y_v). Integrasi dari sqrt_p ke batas kisaran menghasilkan jumlah di atas.
Formula invers (digunakan saat minting posisi untuk amount0 atau amount1 tertentu):
Langkah swap satu-tick
Dalam kisaran tick tunggal, pool berperilaku seperti CPMM. Diberikansqrt_p saat ini dan sqrt_target target:
Langkah exact-input
DiberikanΔin_remaining:
0→1 menurunkan sqrt_p (harga menurun saat kami menjual token0). Swap 1→0 menaikkannya. Formula simetris dengan sqrt_p dan sqrt_target ditukar.
Langkah exact-output
Struktur yang sama, menyelesaikan untukΔin sebagai gantinya.
Loop swap multi-tick
Swap melakukan iterasi di atas tick sampai input habis atau batas harga tercapai:single_step menggunakan L pool saat ini. L berubah hanya saat penyeberangan tick yang diinisialisasi. Likuiditas antara tick konstan, yang membuat matematika langkah closed-form.
liquidity_net pada tick adalah jumlah signed likuiditas posisi yang dimulai pada tick tersebut dikurangi mereka yang berakhir di sana. Penyeberangan ke atas menambahkan liquidity_net; penyeberangan ke bawah menguranginya.
Ketika pool memiliki limit order terbuka pada tick, langkah penyeberangan tick juga secara oportunistik mengonsumsi sebagian input swap untuk mengisi order tersebut (FIFO di seluruh cohort). Algoritma matching dan dynamic-fee surcharge yang mungkin berlaku di atas langkah dasar didokumentasikan dalam products/clmm/math; mereka tidak mengubah formula single-step closed-form di atas.
Akumulator pertumbuhan biaya
CLMM melacak biaya per unit likuiditas aktif, per sisi, secara global dan per tick:single_step:
fee_growth_global tidak bergerak pada langkah ini, karena tidak ada token di sisi itu yang dibayarkan sebagai input.)
Saat penyeberangan tick, program membalik fee_growth_outside:
tick_current. Ketika tick_current berada di atas tick, outside berarti “di bawah”. Ketika tick_current berada di bawah, outside berarti “di atas”. Pembalikan menukar interpretasi.
fee_growth_inside untuk posisi
Diberikan posisi [tick_lower, tick_upper] dan tick_current saat ini:
s adalah:
IncreaseLiquidity, DecreaseLiquidity, CollectFees).
Contoh kerja — penyeberangan satu tick
Pool (disederhanakan):sqrt_p_x64 = 2^64 · 1.0 = 2^64(harga = 1,0)L = 1_000_000tick_current = 0- Tick terdekat yang diinisialisasi di bawah:
tick = −60,sqrt_price = 1.0001^(−30) ≈ 0.99700,liquidity_net = −400_000(tick ini mengakhiri posisi, jadi penyeberangan ke bawah menghilangkan 400k) - Tarif biaya: 0,25%
Δin = 10_000 token0, arah = 0→1.
Langkah 1 — hingga sqrt_target = 0.99700 · 2^64:
L = 600_000 baru:
Tick terdekat yang diinisialisasi (katakan tick = −120) berada di sqrt = 0.99402. Hitung ulang amount_in_to_target:
Δin_remaining. Seberang lagi. Lanjutkan hingga Δin_remaining mencapai nol.
Urutan lengkap Δout terakumulasi ke output swap akhir.
Inisialisasi dan penjaga overflow
MIN_SQRT_PRICE_X64danMAX_SQRT_PRICE_X64sesuai dengantick = ±443636. Setiap swap yang akan mendorongsqrt_pdi luar rentang ini dikembalikan.- Parameter
sqrt_price_limitpengguna harus terletak dalam interval yang sama; program memeriksa. - Produk
L · Δsqrtdihitung dalamu256kemudian digeser kembali keu128untuk menghindari overflow.
Perbedaan vs Uniswap v3
- Oracle.
ObservationStateRaydium menyimpan ring buffer(block_timestamp, tick_cumulative, seconds_per_liquidity_cumulative); format wire sedikit berbeda dari Uniswap tetapi matematika TWAP sama. - Token-2022. Raydium CLMM mendukung mint Token-2022; varian transfer-fee memerlukan penyesuaian jumlah pre/post-swap tambahan. Lihat
algorithms/token-2022-transfer-fees. - Tick bitmap. Raydium mengemas bitmap tick yang diinisialisasi ke
[u64; 16]per pool untukfind_next_initialized_tickcepat; Uniswap menggunakan pemetaan per-word on-chain. Trade-off adalah rent vs biaya lookup. - Reward slots. Raydium mendukung 3 aliran reward per-pool dengan counter
reward_growth_global_x64terpisah; struktur sama dengan akumulator pertumbuhan biaya.
Pointer
products/clmm/math— implementasi on-chain dan contoh kerja dengan field struct CLMM aktual.products/clmm/ticks-and-positions— kisi tick, semantikliquidity_net/gross, active-range.products/clmm/fees— akumulator pertumbuhan biaya dalam aksi.
- Whitepaper Uniswap v3 (penurunan kanonik matematika sqrt-price).
- Sumber program Raydium CLMM.


