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ıktan sonra herhangi bir Token-2022 transfer ücreti, ve y de benzer şekilde. Her swap, ticaret ücretleri LP’ye (protokol, fon ve yaratıcı paketleri k’ya doğru sayılmaz — kasada bulunurlar ancak eğri görünümünden hariç tutulurlar, aşağıdaki Eğri üzerindeki ücretler bölümüne bakınız) alındıktan sonra k' ≥ k bırakmalıdır. k bu nedenle LP’ler ücret tahakkuk ettirdikçe zaman içinde monoton olarak artar.
LP payları havuzun rezervleri tarafından fiyatlandırılır, k tarafından değil:
ΔLP LP tokenini yakarak tam olarak ΔLP × x / lpSupply token0 ve ΔLP × y / lpSupply token1 geri alırsınız. Ne eğri ne de k yatırım veya çekim sırasında hareket eder — yalnızca swaplar fiyatı değiştirir.
Swap yolunda ücret modeli
CPMM her swapda iki bağımsız oranlı ücret uygular:- Ticaret ücreti giriş tarafında alınır,
AmmConfig.trade_fee_rateoranında ücretlendirilir. Daha sonra LP, protokol ve fon paylarına bölünür (LP payı kasada kalır vek’yı büyütür; protokol ve fon payları kasa muhasebesi dışında çıkarılır). - Yaratıcı ücreti (yalnızca
enable_creator_fee == trueolduğunda etkin)AmmConfig.creator_fee_rateoranında ücretlendirilir. Giriş tarafında veya çıkış tarafında alınır,PoolState.creator_fee_onve swap yönüne bağlı olarak (bkz.products/cpmm/fees). Kendi bir pakettidir — asla ticaret ücretinin bir dilimi değildir.
Protokolün yaratıcı ücretinin payı bu sayfada hiçbir yerde görünmez ve bu kasıtlıdır.
CollectCreatorFee tahakkuk eden ücretleri eğrinin zaten hariç tuttuğu iki sayaç arasında hareket ettirdiğinde uygulanır — bir swap sırasında değil. Swap matematiği, teklifler ve k bununla ve bunu olmadan aynıdır. Bkz. products/cpmm/fees.FEE_RATE_DENOMINATOR = 1_000_000trade_fee_rate—AmmConfig’den, örn.2500= ilgili hacim tarafının %0,25’icreator_fee_rate—AmmConfig’den, örn.1000= ilgili hacim tarafının %0,10’uprotocol_fee_rate,fund_fee_rate—1/FEE_RATE_DENOMINATORbirimlerinde ticaret ücretinin, hacmin değil
protocol_fee + fund_fee + creator_fee tutarı kasalarda tutulur ancak havuz durumunda ayrı olarak izlenir (protocol_fees_token*, fund_fees_token*, creator_fees_token*). Sabit-çarpım değişmezi k' ≥ k kontrol ettiğinde, kasa bakiyeleri eksi üç tahakkuk etmiş ancak henüz toplanmamış ücret kullanır — böylece LP’ler yalnızca lp_fee yakalarlar.
Toplama talimatları ve çalışılmış sayısal örnekler için products/cpmm/fees bölümüne bakınız.
SwapBaseInput (giriş-kesin)
“Kullanıcı bize giriş mint’inin tam olarakamount_in kadarını verir ve çıkış mint’inin en az minimum_amount_out kadarını alır.”
Şimdilik Token-2022’yi göz ardı ederek:
Δx_net = amount_in_after_trade_fee.
Program daha sonra kasa muhasebesi öyle günceller ki, trade_fee’nin protokol/fon/yaratıcıya ait kısmı “tahakkuk” paketlerinde oturur (eğrinin sonraki x’ine dahil değildir), LP payı ise sonraki swap için x’e katılır.
Giriş tarafında Token-2022
Giriş mint’inin bir transfer-ücreti uzantısı varsa, mint kullanıcı → kasa transferinde ücretini keser. Yani kasa aslındaamount_in − transfer_fee_in(amount_in) alır. CPMM programı bu nedenle şunu hesaplar:
amount_in_after_trade_fee karşısında çalıştırır. Bu önemlidir çünkü eğri fiyatı kasaya inen net tutardan hesaplanır, kullanıcının başlık tutarından değil.
Çıkış tarafında Token-2022
Çıkış mint’inin bir transfer ücreti varsa, havuzamount_out’u kasasından kullanıcıya gönderir. Mint daha sonra çıkışta ücretini alır, böylece kullanıcı amount_out − transfer_fee_out(amount_out) alır. Program amount_out’u eğriden her zamanki gibi hesaplar, ancak teklifleri gösterirken havuzun “kasa gönderme” numarasını “kullanıcı alma” numarasına dönüştürmek entegratörün sorumluluğudur.
Kayma kontrolü
amount_out hesaplandıktan sonra:
minimum_amount_out ayarlamadan önce uygular, böylece kayma sabiti kasanın gönderdiği şey değil, kullanıcının gerçekten alacağı şey cinsinden ifade edilir.
SwapBaseOutput (çıkış-kesin)
“Kullanıcı çıkış mint’inin tam olarakamount_out kadarını alacak ve giriş mint’inin en fazla maximum_amount_in kadarını ödemeye isteklidir.”
Eğriyi Δx_net için ters çevirerek:
Tavan önemlidir — tamsayı kesintisinden sonra k' ≥ k garantisini verir. Sonra:
gross_needed alacak kadar öder.
Kayma kontrolü
Çalışılmış örnek
Havuz durumu, Token-2022’yi göz ardı ederek:x = 1_000_000_000_000(token0’ın 1.000.000,000000, 6 ondalak)y = 2_000_000_000_000(token1’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
SwapBaseInput ile amount_in = 1_000_000_000 (token0’ın 1.000,000000). Yaratıcı ücreti devre dışı (enable_creator_fee = false).
enable_creator_fee = true olması ve giriş tarafında creator_fee_rate = 1000 (%0,10) olması durumunda, program total_input_fee = ceil(1_000_000_000 * 3500 / 1_000_000) = 3_500_000 ücretlendirir, sonra bunu creator_fee = 1_000_000 ve trade_fee = 2_500_000 olarak böler. trade_fee üzerindeki protokol/fon/LP aritmetiği yukarıdaki örnekten değişmez — yaratıcı ücreti kendi pakettidir, creator_fees_token0’a tahakkuk eder ve protokol ve fon paketleriyle birlikte curve_x’ten hariç tutulur.
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.
Gözlem güncelleme kuralı
Her swapda, program yeni bir gözlemi halka tamponuna itip itmeyeceğini değerlendirir:- Kümülatif fiyat, spot fiyat değil. Tek bir gözlem bir fiyat değildir.
t0zamanındant1zamanına TWAP almak için, her ucuna en yakın gözlemleri okuyun ve(cumulative(t1) − cumulative(t0)) / (t1 − t0)hesaplayın. - Örnekler hız sınırlıdır. Aynı slotta arka arkaya swaplar bir gözlemi paylaşabilir. Bir swaptan hemen sonra bir gözlem okumak bu nedenle bir slot kadar eski görünebilir — bu normaldir.
products/clmm/accounts bölümünde.
Eğri üzerindeki ücretler
Bu ince kısım ve çağrı yapmaya değer. Eğri aritmetiği net kasa bakiyeleri karşısında çalışır — yani ham SPL bakiyesi eksi tahakkuk eden protokol, fon ve yaratıcı ücretleri (üçü de bağımsız paketlerdir — bkz.products/cpmm/fees). Somut bir resim:
- Ham bakiyelerden teklif vermeyin. Önce tahakkuk eden ücret alanlarını çıkarın veya
SwapBaseInput’u simülasyon olarak çağırın ve dönüşünü alın. CollectProtocolFeetokenları kasadan çıkarır. Toplama sonrasındaraw_vault_balancedüşer ancakcurve_balancedeğişmez; havuzun fiyatı hareket etmez. Bu kasıtlıdır.
Kesinlik 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, ancak
SwapBaseOutput’unΔx_netyukarı yuvarlanır ve ücret hesaplamasıtrade_feeüzerinde yukarı ve alt bölünmelerde aşağı yuvarlanır. Bu yuvarlama yönleri, değişmezin tamsayı kesintisi nedeniyle asla azalmaması için seçilir. - Aşırı kasa oranlarına sahip havuzlar (milyarlar : 1) küçük işlemlerde kesinlik tabanlarına çarpabilir; program bu durumda
ZeroTradingTokensdöndürür. Bkz.reference/error-codes.
Sonraki adım
products/cpmm/fees— tam ücret katmanı ve toplama semantiği.products/cpmm/instructions— bu matematiği çağıran talimatlar.algorithms/constant-product— AMM v4 ve CPMM’de paylaşılanx · y = ktüretimi ve kenar durumları.
raydium-io/raydium-cp-swap—states/curve.rsiçinde swap matematiğisecurity/auditsbölümünde bağlantılı Raydium denetim raporları

