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.
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 →
Değişmez
CPMM, iki kasasında klasik sabit-çarpım değişmezini korur: buradax, vault0 bakiyesidir; alındığında Token-2022 transfer ücreti sonrası, ve y de benzer şekilde. Her swap, işlem ücretleri LP’ye kredilendirildikten sonra k' ≥ k bırakmalıdır (protokol, fon ve yaratıcı demetleri k içine sayılmaz — kasada bulunur ancak eğri görünüşünden hariç tutulur, aşağıdaki Eğri üzerindeki ücretler bölümüne bakın). Bu nedenle k, LP’ler ücretleri biriktirdikçe zaman içinde monoton olarak büyür.
LP hisseleri k tarafından değil, havuzun rezervleri tarafından fiyatlandırılır:
ΔLP LP tokenini yakıp ortadan kaldırmak tam olarak ΔLP × x / lpSupply token0 ve ΔLP × y / lpSupply token1 döndürür. Ne eğri ne de k, yatırım veya çekilişte hareket eder — yalnızca swaplar fiyatı değiştirir.
Swap yolunda ücret modeli
CPMM, her swapda bağımsız olarak oranlandırılmış iki ücreti uygular:- İşlem ücreti, giriş tarafında alınır ve
AmmConfig.trade_fee_rateoranında ücretlendirilir. Daha sonra LP, protokol ve fon hisseleri arasında bölünür (LP hissesi kasada kalır vek’ı büyütür; protokol ve fon hisseleri kasa muhasebesiyle çıkarılır). - Yaratıcı ücreti (yalnızca
enable_creator_fee == trueolduğunda aktif)AmmConfig.creator_fee_rateoranında ücretlendirilir.PoolState.creator_fee_onve swap yönüne bağlı olarak giriş tarafında veya çıkış tarafında alınır (bkz./tr/products/cpmm/fees). Kendi demetidir — hiçbir zaman işlem ücretinin bir dilimi değildir.
FEE_RATE_DENOMINATOR = 1_000_000trade_fee_rate—AmmConfig’den, ör.,2500= ilgili hacim tarafının %0,25’icreator_fee_rate—AmmConfig’den, ör.,1000= ilgili hacim tarafının %0,10’uprotocol_fee_rate,fund_fee_rate—1/FEE_RATE_DENOMINATORbirimleri işlem ücretinin, hacmin değil, cinsinden belirlenir
protocol_fee + fund_fee + creator_fee miktarı kasalarda tutulur ancak havuz durumunda ayrı olarak takip edilir (protocol_fees_token*, fund_fees_token*, creator_fees_token*). Sabit-çarpım değişmezi k' ≥ k’yi kontrol ettiğinde, kasa bakiyelerini eksi birikmiş ancak temizlenmemiş üçü de kullanan ücretleri kullanır — böylece LP’ler yalnızca lp_fee’yi yakalar.
Koleksiyon talimatları ve çalışılmış sayısal örnekler için /tr/products/cpmm/fees bölümüne bakın.
SwapBaseInput (giriş-kesin)
“Kullanıcı giriş tokeni için tam olarakamount_in verir ve çıkış tokeni için en az minimum_amount_out alır.”
Şimdilik Token-2022’yi göz ardı ederek:
Δx_net = amount_in_after_trade_fee.
Program daha sonra kasa muhasebesiyle güncellenecektir, öyle ki trade_fee’nin protokol/fon/yaratıcıya ödenmesi gereken kısmı “birikmiş” demetlerde oturur (sonraki eğrinin x’ine dahil değildir), LP hissesi ise sonraki swap için x’e katılır.
Giriş tarafında Token-2022
Giriş tokeni bir transfer-fee uzantısına sahipse, mint, kullanıcı → kasa transferinde ücretini düşer. Bu nedenle kasa aslındaamount_in − transfer_fee_in(amount_in) alır. CPMM programı bu nedenle şunları hesaplar:
amount_in_after_trade_fee’e karşı çalıştırır. Bu önemlidir çünkü eğri fiyatı, kasaya inen net tutardan hesaplanır, kullanıcının manşet tutarından değil.
Çıkış tarafında Token-2022
Çıkış tokeninin bir transfer ücreti varsa, havuz kasasından kullanıcıyaamount_out gönderir. Mint, çıkış sırasında ücretini keser, böylece kullanıcı amount_out − transfer_fee_out(amount_out) alır. Program amount_out’u eğriden her zamanki gibi hesaplar, ancak alıntılar gösterilirken havuzun “kasa gönder” numarasını “kullanıcı al” numarasına dönüştürmek entegratörün sorumluluğudur.
Kaymama kontrolü
amount_out hesaplandıktan sonra:
minimum_amount_out ayarlamadan önce uygular, böylece kaymama sabiti kasanın gönderdiğinden değil, kullanıcının gerçekten alacağından cinsinden belirlenir.
SwapBaseOutput (çıkış-kesin)
“Kullanıcı çıkış tokeni için tam olarakamount_out alacak ve giriş tokeni için en fazla maximum_amount_in ödemeye isteklidir.”
Eğriyi Δx_net için ters çevirme:
Tavansetin önemli — tamsayı kesme sonrası k' ≥ k’yi garanti eder. Daha sonra:
gross_needed’i almaya devam eder.
Kaymama kontrolü
Çalışılmış örnek
Havuz durumu, Token-2022’yi göz ardı ederek:x = 1_000_000_000_000(token0 için 1.000.000,000000, 6 ondalak)y = 2_000_000_000_000(token1 için 2.000.000,000000, 6 ondalak)AmmConfig:trade_fee_rate = 2500,protocol_fee_rate = 120_000,fund_fee_rate = 40_000,creator_fee_rate = 0
amount_in = 1_000_000_000 (token0 için 1.000,000000) ile SwapBaseInput. Yaratıcı ücreti devre dışı (enable_creator_fee = false).
enable_creator_fee = true ile creator_fee_rate = 1000 (giriş tarafında %0,10) olsaydı, program total_input_fee = ceil(1_000_000_000 * 3500 / 1_000_000) = 3_500_000 ücretlendirecek, daha sonra bunu creator_fee = 1_000_000 ve trade_fee = 2_500_000 olarak bölecekti. trade_fee’deki protokol/fon/LP aritmetiği yukarıdaki örnekten değişmez — yaratıcı ücreti kendi demetidir, creator_fees_token0’e biriktirilir ve protokol ve fon demetleriyle birlikte curve_x’ten hariç tutulur.
Eğer giriş mint’inin %1 Token-2022 transfer ücreti varsa, kasa 1_000_000_000 yerine 990_000_000 token alır ve sonraki her hesaplama bu net tutarı kullanır.
Observation güncelleme kuralı
Her swapda, program halka tamponuna yeni bir observation itip itiyeceğini değerlendirirmiş:- Kümülatif fiyat, spot fiyat değil. Tek bir observation fiyat değildir.
t0’dant1’e TWAP almak için, her ucuna en yakın observationları okuyun ve(cumulative(t1) − cumulative(t0)) / (t1 − t0)’ı hesaplayın. - Örnekler hız sınırlıdır. Aynı slotta arka arkaya swaplar bir observation paylaşabilir. Bir swapdan hemen sonra bir observation okumak bu nedenle bir slot tarafından bozuk görünebilir — bu normaldir.
/tr/products/clmm/accounts bölümünde.
Eğri üzerindeki ücretler
Bu ince kısım ve dikkat çekmeye değer. Eğri aritmetiği net kasa bakiyelerine karşı çalışır — yani ham SPL bakiyesi eksi birikmiş protokol, fon ve yaratıcı ücretleri (üçü de bağımsız demetlerdir —/tr/products/cpmm/fees bölümüne bakın). Somut bir resim:
- Ham bakiyelerden alıntı yapmayın. Önce birikmiş-ücret alanlarını çıkartın veya benzetim olarak
SwapBaseInput’ı çağırın ve dönüşünü alın. CollectProtocolFeetokenları kasanın dışına taşır. Koleksiyondan sonraraw_vault_balancedüşer ancakcurve_balancedeğişmez; havuzun fiyatı hareket etmez. Bu kasten tasarlanmıştır.
Hassasiyet ve taşma
- Tüm eğri aritmetiği
x * yüzerinde taşmayı önlemek içinu128ara değerlerini kullanır. - Bölme sıfıra doğru yuvarlanır, bunun istisnası
SwapBaseOutput’unΔx_net’idir (yukarı yuvarlanır) ve ücret hesaplaması (trade_fee’de yukarı, alt bölmeler üzerinde aşağı yuvarlanır). Bu yuvarlama yönleri, değişmezin asla tamsayı kesme nedeniyle azalmaması için seçilmiştir. - Aşırı kasa oranlarına sahip havuzlar (milyarlar : 1) küçük işlemler üzerinde hassasiyet katlarına çarpabilir; bu durumda program
ZeroTradingTokensdöndürür./tr/reference/error-codesbölümüne bakın.
Sonraki adım nedir
/tr/products/cpmm/fees— tam ücret seviyesi ve koleksiyon semantiği./tr/products/cpmm/instructions— bu matematiği çağıran talimatlar./tr/algorithms/constant-product— AMM v4 ve CPMM arasında paylaşılanx · y = k’ın türetmesi ve kenar durumları.
raydium-io/raydium-cp-swap—states/curve.rs’deki swap matematiği/tr/security/auditsbölümünde bağlantılandırılan Raydium denetim raporları


