Halaman ini diterjemahkan secara otomatis oleh AI. Versi bahasa Inggris adalah acuan resmi.Lihat versi bahasa Inggris →
Halaman ini menjelaskan tata letak dan peran setiap akun. Seeds bersifat kanonik dan tercantum di
reference/program-addresses. Pool CLMM lebih berat dalam hal akun dibanding pool CPMM karena likuiditas disimpan secara sparse di seluruh rentang tick; memahami sparsity ini adalah inti dari halaman ini.Inventaris akun
Pool CLMM yang aktif dijelaskan oleh keluarga akun berikut. Semua dimiliki oleh program CLMM kecuali dua mint dan vault mereka.PoolState
Status pool yang aktif, dibaca pada setiap swap dan setiap perubahan posisi.
sqrt_price_x64dantick_currentadalah status harga pool. Keduanya diperbarui bersama pada setiap swap.tick_currentadalah floor darilog_{1.0001}(price).liquidityadalah likuiditas aktif — jumlah nilaiLuntuk semua posisi yang rentangnya berisitick_current. Berubah setiap kali swap melintasi tick dan setiap kali posisi dibuka/ditutup/diubah ukurannya.fee_growth_global_{0,1}_x64adalah biaya kumulatif yang diperoleh per unit likuiditas di seluruh riwayat pool. Posisi membaca ini untuk menghitung apa yang mereka terima.tick_spacingterkunci keAmmConfigsaat inisialisasi dan tidak pernah berubah. Ini menentukan indeks tick mana yang diizinkan menjadi endpoint posisi.tick_array_bitmapadalah bitmap inline yang mencakup rentang tick yang umum digunakan di sekitar spot price. Untuk pool yang posisinya menjangkau jauh, pelacakan overflow hidup diTickArrayBitmapExtensionterpisah.fee_onditetapkan saat pembuatan pool.0(FromInput) mereproduksi perilaku klasik Uniswap-V3.1dan2merutekan biaya swap ke satu sisi buku — lihatproducts/clmm/feesuntuk trade-off.seed_indexadalah[0, 0]untuk setiap pool yang dibuat melaluiCreatePool/CreateCustomizablePool(satu pool kanonik per pasangan). Nilai non-zero berarti pool dibuat viaCreatePermissionedPooldan indeks adalah bagian dari seed PDA pool, memungkinkan beberapa pool hidup berdampingan untuk(config, mint0, mint1)yang sama. Untuk menurunkan ulang alamat pool seperti itu Anda harus mengetahuiseed_index-nya.dynamic_fee_infomembawa status volatilitas untuk surcharge dynamic-fee. Ketika diaktifkan, setiap swap menghitung ulangdynamic_fee_componentdi atasAmmConfig.trade_fee_rate. Tata letak didokumentasikan di bawahDynamicFeeInfo; pool tanpa dynamic fee membiarkan seluruh struct menjadi nol.
AmmConfig
CreateAmmConfig menulis protocol_fee_owner::ID yang dikodekan keras program ke owner dan fund_fee_owner::ID ke fund_owner. Sebelumnya, ia menyalin kunci admin signer ke keduanya. Config yang ada mempertahankan apa pun yang mereka buat atau putar, jadi baca kedua field dari akun. Parameter UpdateAmmConfig 3 / 4 masih memutar mereka. Alamat ada di reference/program-addresses.
Set tier biaya CLMM yang khas dipublikasikan (konfirmasi terhadap GET https://api-v3.raydium.io/main/clmm-config):
protocol_fee_rate dan fund_fee_rate adalah fraksi dari biaya perdagangan; konvensi yang sama dengan CPMM. Lihat products/clmm/fees.
TickArrayState
CLMM tidak menyimpan satu record per tick. Itu akan menjadi miliaran akun. Sebaliknya, ia mengelompokkan TICK_ARRAY_SIZE tick yang berdekatan yang diinisialisasi atau tidak (biasanya 60 atau 88 tergantung versi program) ke dalam TickArrayState yang dibuat secara malas saat pertama kali digunakan.
order_phaseadalah id cohort. Ini bertambah setiap kali cohort bertransisi dari “semua unfilled” ke “partially filled.”orders_amountadalah total input-token dari cohort saat ini (terbaru).part_filled_orders_remainingmelacak cohort sebelumnya yang saat ini sedang diisi oleh swap yang sedang berlangsung.unfilled_ratio_x64adalah pengali Q64.64 yang dibawa pada cohort: ketika swap mengisi X% dari cohort, rasio dikalikan dengan(1 − X). Setiap open order menyimpan snapshot(order_phase, unfilled_ratio_x64)sendiri saat waktu open, jadi settle math berkurang menjadi membandingkan snapshot.
- Endpoint tick posisi t harus memenuhi
t % tick_spacing == 0. Program menolak posisi off-spacing. - Array tick berada di
floor(t / (TICK_ARRAY_SIZE * tick_spacing)) * (TICK_ARRAY_SIZE * tick_spacing). - Tick array diinisialisasi secara malas: posisi atau swap pertama yang menyentuh array yang tidak diinisialisasi membuatnya, membayar rent.
- Tick array tidak pernah ditutup oleh program. Setelah dialokasikan, ia bertahan untuk kehidupan pool, bahkan setelah setiap tick di dalamnya kembali ke
liquidity_gross == 0. Posisi dan swap berikutnya menggunakan kembali akun yang ada tanpa rent tambahan. Tidak ada jalur pembersihan yang didorongClosePositionuntuk tick array.
TickArrayBitmapExtension
PoolState.tick_array_bitmap (inline) mencakup rentang “dekat spot” — ±512 tick array (TICK_ARRAY_BITMAP_SIZE = 512; field [u64; 16] adalah 1.024 bit dibagi rata antara indeks start negatif dan positif, jadi indeks array −512 … +511). Di luar rentang itu (untuk nilai tick ekstrem), program mempertahankan akun ekstensi:
(MIN_TICK, MAX_TICK)) memerlukan; SDK menyelesaikannya untuk Anda.
Posisi
Posisi CLMM adalah bundel tiga akun plus mint:Position NFT mint
Mint SPL Token atau Token-2022 dengan supply 1. Position NFT di dompet pemilik adalah ATA yang menyimpan token tunggal itu. Program mengikat otorisasi ke pemegang saat ini dari saldo ATA NFT, bukan ke Pubkey yang disimpan dalam state. Mint NFT posisi baru menetapkanpool_state sebagai freeze authority mereka sebelum mencetak token tunggal dan menghapus mint authority. Menetapkan freeze authority tidak dengan sendirinya membekukan akun NFT. Akun tetap tidak dibekukan dan dapat ditransfer kecuali kedua kondisi berlaku: pemanggil menggunakan OpenPositionV2 atau OpenPositionWithToken22Nft, dan freeze authority dari setidaknya satu mint vault yang mendasar muncul di daftar restricted-issuer CLMM. Hanya kemudian CLMM membekukan akun NFT setelah mencetak. Ini tidak mengubah byte PersonalPositionState atau PoolState apa pun.
PersonalPositionState
Satu per posisi terbuka. Dikunci dari mint NFT.
ProtocolPositionState (deprecated)
Rilis CLMM yang lebih lama menyimpan bookkeeping agregat per-
(pool, tick_lower, tick_upper) dalam PDA ProtocolPositionState. Rilis yang lebih baru tidak lagi membuat atau membaca akun ini. Slot masih muncul di daftar akun OpenPosition / IncreaseLiquidity / DecreaseLiquidity sebagai UncheckedAccount untuk kompatibilitas ABI, tetapi program tidak menulis ke dalamnya. Akun yang ada on-chain adalah vestigial; admin dapat memanggil CloseProtocolPosition untuk mengklaim kembali rent untuk mereka.Bookkeeping range agregat sekarang diturunkan langsung dari dua endpoint tick (liquidity_gross, liquidity_net, dan per-tick fee_growth_outside_* / reward_growths_outside_x64) di TickArrayState. Formula fee-growth-inside fee_growth_inside = global − outside_lower − outside_upper terus bekerja tanpa akun posisi agregat.Observation
(tick_cumulative[t1] − tick_cumulative[t0]) / (t1 − t0) dan kemudian price = 1.0001 ** tick. Lihat algorithms/clmm-math.
DynamicFeeConfig dan DynamicFeeInfo
Parameter dynamic fee hidup di dua tempat. Template yang dapat digunakan kembali — DynamicFeeConfig — dikelola admin dan dibagikan di seluruh pool yang memilih untuk mengikuti. Status runtime per-pool — DynamicFeeInfo — tertanam di PoolState dan diperbarui oleh setiap swap.
DynamicFeeConfig
["dynamic_fee_config", index.to_be_bytes()]. Dibuat via create_dynamic_fee_config (admin-gated) dan dimodifikasi via update_dynamic_fee_config. Pool yang dibuat dengan enable_dynamic_fee = true mengambil snapshot lima parameter kalibrasi config (filter_period, decay_period, reduction_factor, dynamic_fee_control, max_volatility_accumulator) ke dalam DynamicFeeInfo sendiri saat waktu pembuatan; edit kemudian ke DynamicFeeConfig tidak secara retroaktif mempengaruhi pool yang ada.
DynamicFeeInfo (tertanam di PoolState)
DynamicFeeConfig. Matematika fee dan aturan decay didokumentasikan di bawah products/clmm/math dan products/clmm/fees.
Konstanta yang digunakan oleh formula:
LimitOrderState
Satu akun per limit order yang terbuka.
- Open — pengguna memanggil
open_limit_order, menyetortotal_amountdari input token, order terikat pada cohortTickState. - (opsional) Increase / Decrease —
increase_limit_ordermenambahtotal_amount;decrease_limit_ordermengembalikan token unfilled (dan output yang sudah settled hingga saat itu). - Settle — ketika cohort sepenuhnya atau sebagian terisi, pemilik atau operational keeper memanggil
settle_limit_orderuntuk mendorong output token ke ATA pemilik. - Close — setelah
unfilled_amount == 0, akun dapat ditutup. Rent selalu kembali keowner.
[owner.as_ref(), limit_order_nonce.key().as_ref(), limit_order_nonce.order_nonce.to_be_bytes().as_ref()]. Order PDA oleh karena itu unik per (owner, nonce_index, order_nonce).
LimitOrderNonce
Per-(wallet, nonce_index) counter yang memungkinkan pengguna tunggal menjalankan beberapa pipeline limit order paralel tanpa bertabrakan pada PDA.
[user_wallet.as_ref(), &[nonce_index]]. Sebagian besar klien menggunakan nonce_index = 0 dan membiarkan order_nonce membawa cardinality.
Permission
Akun kemampuan yang keberadaannya adalah hibah: jika PDA Permission diturunkan untuk authority tertentu, authority itu dapat memanggil CreatePermissionedPool. Ia tidak menyimpan apa pun di luar authority yang dibuat untuknya.
["permission", authority.as_ref()]. Dibuat oleh admin via CreatePermissionPda dan dihancurkan via ClosePermissionPda (rent refunds ke pemanggil). Kedua instruksi admin menerima baik program admin atau kunci permission_pda_admin khusus. Menutup PDA mencabut hibah — authority tidak lagi dapat membuat pool tambahan, tetapi pool yang sudah dibuat tidak terpengaruh.
Menurunkan akun kunci
reference/program-addresses.
Referensi cepat siklus hidup
Akun
TickArrayState tidak pernah ditutup oleh program — mereka bertahan untuk kehidupan pool. Setelah tick array diinisialisasi, ia tetap on-chain bahkan ketika setiap tick di dalamnya kembali ke liquidity_gross == 0. Menggunakan kembali tick array yang ada gratis; hanya posisi pertama yang menyentuh array yang tidak pernah diinisialisasi yang membayar rent-nya.
Apa yang dibaca di mana
- Tick math dan range mechanics:
products/clmm/ticks-and-positions. - Swap walk dan fee-growth math:
products/clmm/math. - Daftar akun instruksi:
products/clmm/instructions. - Fees dan reward accrual:
products/clmm/fees. - Program ID kanonik dan seeds:
reference/program-addresses.

