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 →

Router matematik yapmaz

Yönlendirme programı herhangi bir fiyatlandırma mantığı uygulamaz. Saf bir orkestratördür: bir rota kabul eder, hesapları alt programlara iletir ve token akışlarını zincirler. Her hop, kendi pool programının eğrisinden fiyatlandırır:
  • AMM v4 hop’ları: sabit-çarpım formülünü (x · y = k) OpenBook hibrit fiyatlandırması ile kullanır. Bkz. products/amm-v4/math.
  • CPMM hop’ları: yapılandırılabilir ücret seviyeleri ile sabit-çarpım formülünü kullanır. Bkz. products/cpmm/math.
  • CLMM hop’ları: yoğunlaştırılmış-likidite tick matematiğini kullanır. Bkz. algorithms/clmm-math.
  • Stable hop’ları: benzer varlıklar için stable-swap eğrisini kullanır. Bkz. products/stable/math.
Router’ın tek katılımı:
  1. Her pool’un swap talimatını CPI aracılığıyla çağırmak.
  2. Çıkış miktarını toplamak.
  3. Bunu bir sonraki hop’a giriş miktarı olarak iletmek.
  4. Son çıkışı çağıran tarafın slippage limitine karşı kontrol etmek.

Slippage bileşik olarak artar

Çok-hop rotasında, her hop’taki slippage bileşik olarak artar. Hop 1’deki küçük slippage, hop 2’ye giren hacim zaten azaldığı için hop 2’de daha büyük bir slippage haline gelir. Örnek:
minimum_amount_out sağladığınızda, router son çıkışınızı bu global limite karşı kontrol eder. Her hop ayrıca kendi swap’ını yerel ücret yapısına karşı kontrol eder, ancak router rota ortasında yeniden fiyat teklifi vermez—rotayı önceden hesaplamalı ve yeterli slippage toleransı dahil etmelisiniz.

CLMM hop’ları ve limit_prices

CLMM pool’una her hop için, router pool’un mevcut sqrt_price_x64 değerinin belirtilen bir sınır içinde olup olmadığını kontrol eder. Sınırlar limit_prices adlı bir VecDeque<u128> olarak iletilir:
  • Rotadaki her CLMM hop başına bir sqrt_price_x64.
  • sqrt_price_x64, CLMM tarafından kullanılan tick tabanlı fiyat gösterimidir. Tanım için bkz. algorithms/clmm-math.
  • Router şunları uygular:
her CLMM hop için, fiyat sınırların dışındaysa swap’ı reddeder.

Talimat varyantları ve limit_prices

  • SwapBaseInWithUserAccount, SwapBaseOutWithUserAccount (Eski, etiketler 0 ve 1): limit_prices VecDeque gereklidir. Herhangi bir hop CLMM pool’u ise boş deque bir hata ile reddedilir. Her CLMM hop için sırayla bir fiyat sağlamalısınız.
  • SwapBaseIn, SwapBaseOut (Mevcut, etiketler 8 ve 9): limit_prices VecDeque isteğe bağlıdır. Boş deque sessizce yoksayılır; fiyat kontrolü yapılmaz. Yeni kod bunları kullanmalıdır.

limit_prices oluşturma

M CLMM hop’u olan bir rota için, deque tam olarak M giriş içermelidir. Bunları hop’a göre sıralayın:

limit_prices ne zaman kontrol edilir

sqrt_price_x64, pool’un mevcut fiyatının bir anlık görüntüsüdür. Swap’lar yürütüldükçe sürekli değişir. Şunları yapmalısınız:
  1. Pool’un mevcut durumunu zincir üzerinden getirin.
  2. Kabul edilebilir sınırları hesaplayın (örn., mevcut fiyatın ±%0.5).
  3. Bu sınırları limit_prices içine kodlayın.
  4. Sınırları router talimatınıza dahil edin.
İşlem iniş almadan önce pool’un fiyatı sınırlarınızın ötesine kayarsa, router bunu reddedecektir.

Ücret işleme

Her pool kendi yapılandırmasına göre kendi ücretini alır:
  • AMM v4: %0.25 (sabit) LP, protokol ve fon arasında bölünür.
  • CPMM: AmmConfig başına yapılandırılabilir (varsayılan %0.25, bölünme seviyeye göre değişir).
  • CLMM: pool başına yapılandırılabilir, giriş miktarından alınır.
  • Stable: %0.02 (sabit), %88 LP / %12 protokol olarak bölünür.
Router kendi başına ücret almaz. Tüm ücret işleme her alt pool’a devredilir. N hop’tan çıkış zaten o hop’un ücreti düşülmüş durumdadır. Bireysel pool’un ücret belgelerine bakın:

Çok-hop muhasebe örneği

USDC → SOL → STEP’i iki sabit-çarpım pool’u arasında yönlendirdiğinizi ve her birinin %0.25 ücret aldığını varsayalım:
Router şunları doğrular:
Yanlışsa, tüm rota atomik olarak başarısız olur.

Hassasiyet hususları

Tüm Solana programları gibi, router tamsayı aritmetiği kullanır:
  • Tüm miktarlar u64 (lamport veya token en küçük birimleri).
  • Eğri hesaplamaları taşmayı önlemek için gerektiğinde u128 ara değerlerini kullanır.
  • Yuvarlama kuralları alt programa bağlıdır. Router yeniden yuvarlamaz.
Bir hop aşırı fiyat oranları nedeniyle sıfır miktar üretirse (örn., 1B:1 pool’unda 1 lamport swap etmek), router bunu bir sonraki hop’a iletir, bu da bunu yetersiz olarak reddedebilir. Bireysel pool’un hata kodlarına bakın.

Sonraki adımlar