Skip to main content
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 →

İki bağımsız ücret, dört hedef

CPMM her swap işleminde iki ayrı oranlı ücret alır:
  1. İşlem ücretiAmmConfig.trade_fee_rate oranında alınır ve üç hedefe bölünür:
    • LP payı — vault’ta kalır ve k’yi büyütür. LP token’larını yakarak örtülü olarak talep edilir.
    • Protokol payıPoolState.protocol_fees_token* hesabına tahakkuk eder; protocol_owner tarafından CollectProtocolFee aracılığıyla toplanır.
    • Fon payıPoolState.fund_fees_token* hesabına tahakkuk eder; fund_owner tarafından CollectFundFee aracılığıyla toplanır.
  2. Yaratıcı ücreti (isteğe bağlı, havuz başına) — AmmConfig.creator_fee_rate oranında işlem ücretinden bağımsız olarak alınır ve PoolState.creator_fees_token* hesabına tahakkuk eder. Yaratıcı bunu CollectCreatorFee aracılığıyla toplayabilir veya herhangi bir ödeyici hedef kısıtlı CollectCreatorFeePermissionless yolunu tetikleyebilir. Yalnızca havuz enable_creator_fee = true ile oluşturulduğunda etkindir.
Yaratıcı ücreti işlem ücretinin bir dilimi değildir. İki oran swap girdisinde ücret alınırken toplanır, ancak her biri kendi hesabında kalır — protokol ve fon payları her zaman yalnızca trade_fee’den türetilir, asla creator_fee’den değil. creator_fee_rate = 1000 (0,10%) ve trade_fee_rate = 2500 (0,25%) olan bir havuz, yaratıcı-ücret-girdisi swap’inde girdinin birleşik %0,35’ini alır; bunun %0,10’unu yaratıcı tutar ve %0,25’i işlem-ücreti hesabına gider. İşlem-ücreti oranları (trade_fee_rate, protocol_fee_rate, fund_fee_rate) ve creator_fee_rate hepsi AmmConfig üzerinde bulunur. Havuz başına enable_creator_fee bayrağı ve creator_fee_on modu (yaratıcı ücretinin hangi tarafından alındığı) PoolState üzerinde bulunur. Bkz. products/cpmm/accounts.

Oranlar ve birimler

Tüm oranlar u64 türündedir ve 1 / FEE_RATE_DENOMINATOR biriminde gösterilir; burada FEE_RATE_DENOMINATOR = 1_000_000.
  • trade_fee_rate swap hacminin bir kesridir. 2500 ⇒ ilgili tarafın %0,25’i (giriş veya çıkış, creator_fee_on’a bağlı olarak — aşağıdaki “Ücretlerin alındığı taraf” bölümüne bakın).
  • creator_fee_rate swap hacminin bir kesridir, işlem ücretinden ayrı olarak alınır. 1000 ⇒ ilgili tarafın %0,10’u.
  • protocol_fee_rate ve fund_fee_rate hacmin değil, işlem ücretinin kesirleridir. 120_000 ⇒ işlem ücretinin %12’si.
Mainnet’te AmmConfig[index=0] (standart %0,25 havuz) için varsayılan parametreler, referans için: Yani AmmConfig[0] ile enable_creator_fee = false olan bir $1.000 swap’inde: $2,50 toplam işlem ücreti, bunun $2,10’u LP’lerde kalır, $0,30 protokole gider, $0,10 fona gider. Yaratıcı ücreti devre dışı bırakıldığı için yaratıcı hesabı 0’dır. Aynı havuzun enable_creator_fee = true ve creator_fee_rate = 1000 (%0,10%) olması durumunda, kullanıcı yaratıcı hesabına ek $1,00 öder — creator_fee_on tarafından yapılandırılan aynı taraftan alınır — toplam $3,50 ücret için. İşlem-ücreti hesabı ve onun protokol/fon bölünüşü değişmez. Geçerli mainnet değerlerini GET https://api-v3.raydium.io/main/cpmm-config ile doğrulayın — oranlar yönetici tarafından değiştirilebilir ve sabit kodlanmak yerine taze okunmalıdır.

Bölünüş, kodda

Notlar:
  • Giriş tarafındaki toplam ücret yukarı yuvarlanır, böylece havuz asla eksik ücret almaz.
  • trade_fee’nin alt bölünüşleri (protokol, fon) aşağı yuvarlanır, böylece toplamları trade_fee’yi aşmaz; kalan LP payıdır.
  • lp_share = trade_fee − protocol_fee − fund_fee (creator_fee kendi hesabı olduğu için çıkarılmaz).
  • Yaratıcı ücreti PoolState.creator_fee_on’a bağlı olarak giriş veya çıkış tarafından alınır (sonraki bölüme bakın). Oran her iki şekilde de değişmez.

Ücretlerin alındığı taraf

CPMM’nin havuz başına creator_fee_on ayarı (BothToken / OnlyToken0 / OnlyToken1) vardır; bu, yaratıcı ücretinin belirli bir swap’in giriş tarafından mı yoksa çıkış tarafından mı alındığını belirler. Runtime yardımcısı is_creator_fee_on_input(direction) bunu swap başına bir boole’ye daraltır: Yaratıcı ücreti giriş tarafında olduğunda, hem işlem ücreti hem de yaratıcı ücreti eğri çalışmadan önce amount_in’den düşülür. Fiyat hesaplama: girdiden birleşik trade_rate + creator_rate’i alın. Yaratıcı ücreti çıkış tarafında olduğunda, yalnızca işlem ücreti amount_in’den düşülür; eğri ücretlendirilmemiş bir çıkış üretir, sonra yaratıcı ücreti bu çıkıştan düşülür. Fiyat hesaplama: girdiden trade_rate’i alın; çıkıştan creator_rate’i alın. İşlem ücreti kendisi her zaman giriş tarafından alınır (standart Uniswap-V2 deseni). Yalnızca yaratıcı ücreti çıkışta olabilir.

”Tahakkuk eden” ücretlerin eğri ile etkileşimi

Önemli bir incelik: protokol, fon ve yaratıcı ücretleri vault’ta fiziksel olarak kalır ilgili Collect* talimatı çağrılana kadar. Ancak eğrinin vault bakiyesi görüşünden hariç tutulurlar. Bir swap’ten sonra somut bir resim:
Program k' ≥ k uygulanırken curve_x (ve benzer curve_y) kullanır. Bu, LP olmayan ücretlerin LP payını şişirmeden hedeflerine ulaşmasıdır. Tasarlarken dikkate alınması gereken sonuçlar:
  • Ham bakiyelerden fiyat hesaplamak yanlıştır. getTokenAccountBalance üzerinden bir fiyat hesaplayıcı oluşturursanız, havuzun onayladığı fiyatı tutarlı olarak abartacaksınız. Her zaman tahakkuk eden ücretleri çıkarın veya SwapBaseInput / API aracılığıyla simüle edin.
  • CollectProtocolFee fiyatı hareket ettirmez. Token’ları vault’tan çıkarır ve protocol_fees_token* sayaçlarını sıfırlar, böylece curve_x ve curve_y değişmez.
  • LP ücretleri sayaca tahakkuk etmez. Bunlar vault bakiyesinde örtülüdür. LP’nin birikmiş LP ücretlerine hakkı LP token’larını yakarak (yani Withdraw aracılığıyla) kullanılır — CollectLpFee yoktur.

Token-2022 transfer ücretleri ile etkileşim

Token-2022 transfer ücretleri CPMM tarafından değil, mint tarafından uygulanır. Her token transferinde — swap, yatırma, çekme ve Collect* toplamaları — etki ederler. CPMM’nin işlem-ücreti hesaplaması vault’ta gerçekten inen miktara karşı hesaplanır, yani giriş mint’inin transfer ücretinin net’i (varsa). Yani en kötü durumda bir kullanıcı giriş-tam swap’inde üç ayrı vergi öder:
  1. Giriş mint’inin amount_in üzerindeki transfer ücreti (mint’in ücret yetkilisine).
  2. Havuzun trade_fee’si kalana karşı (yukarıda bölünmüş).
  3. Çıkış mint’inin amount_out üzerindeki transfer ücreti (mint’in ücret yetkilisine).
SDK’nın fiyat hesaplayıcısı üçünü de hesaba katarken minimum_amount_out kullanıcının gerçekten aldığı şeyde gösterilir. Kendi fiyat hesaplayıcınızı yazıyorsanız, bu davranışı yansıtın, aksi takdirde slippage kontrolleri sistematik olarak çok cömert olacaktır. Ayrıntılı türetme için algorithms/token-2022-transfer-fees bölümüne bakın.

Yaratıcı ücreti

Yaratıcı ücreti isteğe bağlı ve havuz başına. Oran AmmConfig.creator_fee_rate üzerinde bulunur; etkinleştirme bayrağı ve taraf (creator_fee_on) PoolState üzerinde bulunur:
  • Havuz oluşturmada etkinleştirilir. Initialize varsayılan olarak enable_creator_fee = false ayarlar; InitializeWithPermission aracılığıyla oluşturulan havuzlar (LaunchLab mezuniyetleri ve diğer kapılı yollar tarafından kullanılır) enable_creator_fee = true geçirebilir ve creator_fee_on seçebilir.
  • Oran ücret katmanı ile paylaşılır. Oran kendisi AmmConfig.creator_fee_rate’dir, o config’e bağlı her havuz arasında aynı değer. Her havuz daha sonra bunu alıp almayacağına (enable_creator_fee) ve swap’in hangi tarafından alacağına (creator_fee_on) karar verir. enable_creator_fee = false olduğunda, havuzun etkili yaratıcı-ücret oranı config değerinden bağımsız olarak sıfırdır (kaynakta PoolState::adjust_creator_fee_rate bölümüne bakın).
  • İşlem ücretinden bağımsız. Yaratıcı ücreti asla LP / protokol / fon paylarını azaltmaz — kendi oranıdır, ayrı olarak uygulanır, kendi sayaçlarında tahakkuk eder.
  • CollectCreatorFee veya CollectCreatorFeePermissionless aracılığıyla toplanır. Orijinal yol PoolState.pool_creator’ün imzalamasını gerektirir. İzinsiz yol herhangi bir ödeyicinin koleksiyonu tetiklemesine izin verir ancak her iki hedefi de yaratıcının kanonik ATA’larına sabitler.
  • Oluşturulduktan sonra yeniden etkinleştirilemez veya yeniden yönlendirilmez. enable_creator_fee = false ile başlatılan bir havuz asla yaratıcı ücreti almayacak; belirli bir creator_fee_on ile başlatılan bir havuz taraf değiştiremez.
Yaratıcı ücretleri Raydium’un “Burn & Earn” deseni arkasındaki mekanizmadır: LP token’ları LP Lock programı altında kilitlenir, böylece yaratıcı likiditeyi çekemez, ancak tahakkuk eden yaratıcı ücretleri süresiz olarak toplanabilir.

Koleksiyon operasyonel akışı

Protokol ve fon sahipleri mainnet’te Raydium multisig’idir; bkz. security/admin-and-multisig. Orijinal yaratıcı-yalnızca yolunda, yaratıcı imzalayan PoolState içinde kaydedilen hesaptır. İzinsiz yolda, çağıran eksik yaratıcı ATA’sını oluşturmak için ödeme yapar. Program creator’ü pool_state.pool_creator ile kısıtlar ve her hedefi o yaratıcı artı ilgili vault mint’i ve token programından türetir, böylece çağıran fonları yeniden yönlendiremez.

Ücret katmanını değiştirme

Ücret oranları yönetici tarafından UpdateAmmConfig aracılığıyla değiştirilebilir (bkz. products/cpmm/instructions). Değişiklikler o AmmConfig’e bağlı her havuz için sonraki swap’te etkili olur — geçiş yoktur, çünkü havuzlar her swap’te config’i yükler. Yöneticinin yapamadığı şeyler:
  • Bir havuzu bir AmmConfig’den diğerine taşımak.
  • Zaten tahakkuk eden ücretleri geriye dönük olarak yeniden fiyatlandırmak.
  • protocol_owner / fund_owner imzalayan olmadan ücretleri toplamak.

Çalışan bir havuzdan ücretleri okuma

CLMM ve AMM v4 ile karşılaştırma

Yan yana matris için reference/fee-comparison bölümüne bakın. Özet:
  • AMM v4 farklı bir LP/protokol bölünüşü ve fon ücreti olmayan sabit %0,25 işlem ücreti kullanır.
  • CLMM ücretleri tick-aralığı katmanı başına, havuz başına değil konum başına tahakkuk eder ve DecreaseLiquidity veya CollectFees aracılığıyla talep edilir.

Sonraki adımlar

Kaynaklar: