Bu sayfa yapay zekâ tarafından otomatik olarak çevrilmiştir. İngilizce sürüm esas alınır.İngilizce sürümü görüntüle →
Bu sayfa her hesabın düzeni ve rolünü açıklar. Seed’ler kanonik olup
reference/program-addresses içinde listelenmiştir. CLMM havuzu, likiditenin tick aralığı boyunca seyrek şekilde depolanması nedeniyle CPMM havuzundan daha fazla hesap gerektirir; bu sayfanın büyük bölümü bu seyrekliği anlamakla ilgilidir.Hesap envanteri
Canlı bir CLMM havuzu aşağıdaki hesap aileleri tarafından tanımlanır. CLMM programına ait olanlar hariç tümü, iki mint ve bunların vault’ları hariç program tarafından sahiplenilir.PoolState
Havuzun canlı durumu, her swap ve her pozisyon değişikliğinde okunur.
sqrt_price_x64vetick_currenthavuzun fiyat durumudur. Her swap’ta birlikte güncellenir.tick_current,log_{1.0001}(price)tabanının tabanıdır.liquidityaktif likidite — aralığıtick_currentiçeren tüm pozisyonlar içinLdeğerlerinin toplamıdır. Bir swap bir tick’i geçtiğinde ve bir pozisyon açıldığında/kapatıldığında/yeniden boyutlandırıldığında değişir.fee_growth_global_{0,1}_x64tüm havuz geçmişi boyunca likidite birimi başına kazanılan kümülatif ücretlerdir. Pozisyonlar kendilerine ne borçlu olduğunu hesaplamak için bunu okur.tick_spacingbaşlatmadaAmmConfigile kilitlenir ve asla değişmez. Hangi tick indekslerine pozisyon uç noktaları olarak izin verildiğini belirler.tick_array_bitmapspot fiyatın etrafındaki yaygın olarak kullanılan tick aralığını kapsayan satır içi bir bitmap’tir. Pozisyonları uzağa ulaşan havuzlar için taşma izlemesi ayrıTickArrayBitmapExtensioniçinde yaşar.fee_onhavuz oluşturmada sabitlenir.0(FromInput) klasik Uniswap-V3 davranışını yeniden üretir.1ve2swap ücretini kitabın tek bir tarafına yönlendirir — ticari dengeleri içinproducts/clmm/feesbölümüne bakın.seed_indexCreatePool/CreateCustomizablePoolaracılığıyla oluşturulan her havuz için[0, 0]değeridir. Sıfır olmayan bir değer, havuzunCreatePermissionedPoolaracılığıyla oluşturulduğu ve dizinin havuzun PDA seed’lerinin bir parçası olduğu anlamına gelir; aynı(config, mint0, mint1)için birkaç havuzun bir arada bulunmasını sağlar. Böyle bir havuzun adresini yeniden türetmek içinseed_indexdeğerini bilmeniz gerekir.dynamic_fee_infodinamik ücret artışı için volatilite durumunu taşır. Etkinleştirildiğinde, her swapAmmConfig.trade_fee_rateüzerine birdynamic_fee_componentyeniden hesaplar. DüzenDynamicFeeInfoaltında belgelenmiştir; dinamik ücret olmayan havuzlar tüm yapıyı sıfır bırakır.
AmmConfig
CreateAmmConfig programın sabit kodlanmış protocol_fee_owner::ID değerini owner içine ve fund_fee_owner::ID değerini fund_owner içine yazar. Bundan önce, yönetici imzalayanın anahtarını her ikisine de kopyalardı. Mevcut konfigürasyonlar oluşturuldukları veya döndürüldükleri şeyi tutar, bu nedenle her iki alanı da hesaptan okuyun. UpdateAmmConfig parametreleri 3 / 4 yine de bunları döndürür. Adresler reference/program-addresses içindedir.
Yayınlanan tipik CLMM ücret katmanları seti (GET https://api-v3.raydium.io/main/clmm-config ile doğrulayın):
protocol_fee_rate ve fund_fee_rate işlem ücretinin kesintileridir; CPMM ile aynı kural. products/clmm/fees bölümüne bakın.
TickArrayState
CLMM tek bir tick başına tek bir kayıt depolamaz. Bu milyarlarca hesap olurdu. Bunun yerine TICK_ARRAY_SIZE bitişik başlatılmış-veya-değil tick’leri (program sürümüne bağlı olarak tipik olarak 60 veya 88) ilk kullanımda tembel olarak oluşturulan bir TickArrayState içine gruplandırır.
order_phasekohort kimliğidir. Bir kohort “tümü doldurulmamış” durumundan “kısmen doldurulmuş” durumuna geçtiğinde her seferinde artar.orders_amountmevcut (en yeni) kohortun giriş-token toplamıdır.part_filled_orders_remainingşu anda devam eden swap’lar tarafından doldurulmakta olan önceki kohortu izler.unfilled_ratio_x64kohort üzerinde taşınan bir Q64.64 çarpanıdır: bir swap kohortu X% doldurduğunda, oran(1 − X)ile çarpılır. Her açık emir açılış zamanında kendi(order_phase, unfilled_ratio_x64)anlık görüntüsünü depolar, bu nedenle kapatma matematiği anlık görüntüleri karşılaştırmaya indirgenir.
- Bir pozisyon uç noktası tick’i t
t % tick_spacing == 0koşulunu sağlamalıdır. Program aralık dışı pozisyonları reddeder. - Tick’in dizisi
floor(t / (TICK_ARRAY_SIZE * tick_spacing)) * (TICK_ARRAY_SIZE * tick_spacing)konumunda bulunur. - Bir tick dizisi tembel olarak başlatılır: bir pozisyon veya swap’ın başlatılmamış bir diziyi ilk kez dokunması onu oluşturur ve kirayı öder.
- Bir tick dizisi program tarafından asla kapatılmaz. Bir kez tahsis edildikten sonra, havuzun ömrü boyunca kalır; içindeki her tick
liquidity_gross == 0değerine döndükten sonra bile. Sonraki pozisyonlar ve swap’lar ek kira ödemeden mevcut hesabı yeniden kullanır. Tick dizileri içinClosePositiontarafından yönlendirilen temizleme yolu yoktur.
TickArrayBitmapExtension
PoolState.tick_array_bitmap (satır içi) “spot’a yakın” aralığını kapsar — ±512 tick dizileri (TICK_ARRAY_BITMAP_SIZE = 512; [u64; 16] alanı 1.024 bit olup negatif ve pozitif başlangıç indeksleri arasında eşit olarak bölünür, bu nedenle dizi indeksleri −512 … +511). Bu aralığın dışında (aşırı tick değerleri için), program bir uzantı hesabı tutar:
(MIN_TICK, MAX_TICK)) bunu gerektirir; SDK bunu sizin için çözer.
Pozisyonlar
Bir CLMM pozisyonu üç hesap artı bir mint’in paketidir:Position NFT mint
Arz 1 olan SPL Token veya Token-2022 mint’i. Sahibinin cüzdanındaki pozisyon NFT’si bu tek token’ı tutan bir ATA’dır. Program yetkilendirmeyi durumda depolanan Pubkey’e değil, NFT’nin ATA bakiyesinin mevcut sahibine anahtarlar. Yeni pozisyon NFT mint’leri, tek token’ı basıp mint yetkilendirmesini kaldırmadan öncepool_state değerini dondurma yetkilisi olarak ayarlar. Dondurma yetkilisi ayarlamak NFT hesabını kendiliğinden dondurmaz. Hesap, her iki koşul da tutmadığı sürece dondurulmamış ve aktarılabilir kalır: çağıran OpenPositionV2 veya OpenPositionWithToken22Nft kullanır ve temel vault mint’lerinden en az birinin dondurma yetkilisi CLMM’nin kısıtlı-yayıncı listesinde görünür. Yalnızca o zaman CLMM, basımdan sonra NFT hesabını dondurur. Bu PersonalPositionState veya PoolState baytlarında hiçbir değişiklik yapmaz.
PersonalPositionState
Açık pozisyon başına bir tane. NFT mint’i kapalı anahtarlanmış.
ProtocolPositionState (kullanımdan kaldırıldı)
Eski CLMM sürümleri
(pool, tick_lower, tick_upper) başına toplam defter tutmayı bir ProtocolPositionState PDA’sında depoladı. Yeni sürümler artık bu hesabı oluşturmaz veya okumaz. Slot, ABI uyumluluğu için OpenPosition / IncreaseLiquidity / DecreaseLiquidity hesap listelerinde bir UncheckedAccount olarak görünmeye devam eder, ancak program buna yazmaz. Zincir üzerinde mevcut hesaplar kalıntıdır; yönetici kirayı geri almak için CloseProtocolPosition çağırabilir.Toplam aralık defter tutması artık doğrudan iki uç noktası tick’ten (liquidity_gross, liquidity_net ve tick başına fee_growth_outside_* / reward_growths_outside_x64) TickArrayState içinde türetilir. Ücret-büyüme-içi formülü fee_growth_inside = global − outside_lower − outside_upper toplam pozisyon hesabı olmadan çalışmaya devam eder.Gözlem
(tick_cumulative[t1] − tick_cumulative[t0]) / (t1 − t0) aralığından geometrik-ortalama fiyatı hesaplar ve ardından price = 1.0001 ** tick değerini hesaplar. algorithms/clmm-math bölümüne bakın.
DynamicFeeConfig ve DynamicFeeInfo
Dinamik ücret parametreleri iki yerde yaşar. Yeniden kullanılabilir şablon — DynamicFeeConfig — yönetici tarafından yönetilir ve katılan havuzlar arasında paylaşılır. Havuz başına çalışma zamanı durumu — DynamicFeeInfo — PoolState içine gömülü ve her swap tarafından güncellenir.
DynamicFeeConfig
["dynamic_fee_config", index.to_be_bytes()]. create_dynamic_fee_config (yönetici kapılı) aracılığıyla oluşturulur ve update_dynamic_fee_config aracılığıyla değiştirilir. enable_dynamic_fee = true ile oluşturulan bir havuz, konfigürasyonun beş kalibrasyon parametresini (filter_period, decay_period, reduction_factor, dynamic_fee_control, max_volatility_accumulator) oluşturma zamanında kendi DynamicFeeInfo değerine anlık görüntü alır; DynamicFeeConfig için sonraki düzenlemeler mevcut havuzları geriye dönük olarak etkilemez.
DynamicFeeInfo (PoolState içine gömülü)
DynamicFeeConfig değerinden kopyalanan kalibrasyon değerleridir. Ücret matematiği ve bozunma kuralları products/clmm/math ve products/clmm/fees altında belgelenmiştir.
Formül tarafından kullanılan sabitler:
LimitOrderState
Açık limit emri başına bir hesap.
- Aç — kullanıcı
open_limit_orderçağırır, giriş token’ınıntotal_amountdeğerini depozit eder, emir birTickStatekohortuna bağlanır. - (isteğe bağlı) Artır / Azalt —
increase_limit_ordertotal_amountdeğerine ekler;decrease_limit_orderdoldurulmamış token’ları (ve o noktaya kadar kapatılan çıktıyı) döndürür. - Kapat — kohort tamamen veya kısmen doldurulduğunda, sahibi veya operasyonel bekçi çıktı token’larını sahibinin ATA’sına göndermek için
settle_limit_orderçağırır. - Kapat —
unfilled_amount == 0olduğunda, hesap kapatılabilir. Kira her zamanownerdeğerine döner.
[owner.as_ref(), limit_order_nonce.key().as_ref(), limit_order_nonce.order_nonce.to_be_bytes().as_ref()]. Emir PDA’sı bu nedenle (owner, nonce_index, order_nonce) başına benzersizdir.
LimitOrderNonce
Tek bir kullanıcının PDA’larda çarpışmadan birden fazla paralel limit emri boru hattı çalıştırmasını sağlayan (wallet, nonce_index) başına sayaç.
[user_wallet.as_ref(), &[nonce_index]]. Çoğu istemci nonce_index = 0 kullanır ve order_nonce değerinin kardinaliteyi taşımasına izin verir.
Permission
Varlığı izin olan bir yetenek hesabı: belirli bir yetki için bir Permission PDA’sı türetilirse, bu yetki CreatePermissionedPool çağırabilir. Türetildiği yetki dışında hiçbir şey depolamaz.
["permission", authority.as_ref()]. Yönetici tarafından CreatePermissionPda aracılığıyla oluşturulur ve ClosePermissionPda aracılığıyla yıkılır (kira çağırana döner). Her iki yönetici talimatı da program admin veya özel permission_pda_admin anahtarını kabul eder. PDA’yı kapatmak izni iptal eder — yetki artık ek havuzlar oluşturamaz, ancak zaten oluşturduğu havuzlar etkilenmez.
Anahtar hesapları türetme
reference/program-addresses ile çift kontrol edilmelidir.
Yaşam döngüsü hızlı referansı
TickArrayState hesapları program tarafından asla kapatılmaz — havuzun ömrü boyunca kalırlar. Bir tick dizisi başlatıldıktan sonra, içindeki her tick liquidity_gross == 0 değerine döndükten sonra bile zincir üzerinde kalır. Mevcut bir tick dizisini yeniden kullanmak ücretsizdir; yalnızca hiçbir zaman başlatılmamış bir diziyi ilk kez dokunmuş pozisyon kirayı öder.
Nerede ne okuyacağınız
- Tick matematiği ve aralık mekaniği:
products/clmm/ticks-and-positions. - Swap yürüyüşü ve ücret-büyüme matematiği:
products/clmm/math. - Talimat hesap listeleri:
products/clmm/instructions. - Ücretler ve ödül tahakkuku:
products/clmm/fees. - Kanonik program kimliği ve seed’ler:
reference/program-addresses.

