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 →
Arama tablosu eğrisi
Stable AMM, x·y=k formülünün yerine (x, y, price) tuple’larından oluşan bir seyrek arama tablosu kullanır. Bir swap’ı fiyatlandırırken program şu adımları izler:- Havuzun mevcut oranını rezervlerden hesaplar.
- Tabloyu ikili arama ile o oranı çevreleyen iki girişi bulur.
- Aralarında doğrusal enterpolasyon yaparak ara bir fiyat elde eder.
- Ücretleri uygular ve alıntıyı döndürür.
Tablo düzeni ve ikili arama
ModelDataInfo, yönetici tarafından indekslenen 50.000’e kadar DataElement girişi tutar. Yalnızca ilk valid_data_count olanlar aktiftir. Her girişin yapısı:
- Oranı hesaplayın:
target_ratio = (x_real * multiplier) / y_real. (element.x * multiplier) / element.ydeğerinintarget_ratio’yu çevreleyen girişleri bulmak için ikili arama yapın.- Bir köşeli parantez
[min_idx, max_idx]bulunduğunda, enterpolasyon yapın.
state.rs::ModelDataInfo::get_mininum_range_by_xy_real içinde yaklaşık 150 satır uzunluğundadır. Temel değişmez: aramanın çalışması için girişler sıralanmış olmalıdır (x artan, y azalan, price artan).
Doğrusal enterpolasyon
İki tablo noktası oranı çevreleyen bir kez, enterpolasyon ara bir fiyat ve rezerv çifti hesaplar:Ölçeklendirme: çarpan
Havuz rezervleri ve fiyatları farklı ölçeklerde depolanır.ModelDataInfo üzerindeki multiplier alanı bunu hesaba katar. Yaygın bir örnek:
- Coin 6 ondalak basamağa, PC 18 ondalak basamağa sahiptir.
- Çarpan = 10^6 (veya benzer).
- Tablo girişleri u64 sınırlarına sığması için azaltılmış bir ölçekte depolanır.
Swap fiyatlandırması: SwapBaseIn ve SwapBaseOut
SwapBaseIn (tam giriş)
Giriş tutarıamount_in verildiğinde:
(coin_vault, pc_vault)adresinden mevcut oranı alın.- Tablo girişlerini çevreleyin ve tablo-uzay oranını elde etmek için enterpolasyon yapın.
- Girişi tablo uzayına dönüştürün:
dx_table = amount_in * multiplier / ratio. - Yeni X koordinatında tabloyu sorgulayarak yeni Y’yi bulun.
dy_table = y_old - y_new.- Geri dönüştürün:
dy_real = dy_table * ratio / multiplier. - İşlem ücretini uygulayın:
dy_output = dy_real - (dy_real * trade_fee_numerator / trade_fee_denominator). dy_outputdöndürün.
SwapBaseOut (tam çıkış)
Simetrik: istenenamount_out verildiğinde, gerekli amount_in için çözün.
Her iki yol da havuz kasalarından doğrudan etkili rezervleri okur. Havuz yıllardır hiçbir OpenBook açık emri tutmamıştır, bu nedenle önce kapatılacak bir şey yoktur — kasa bakiyeleri tüm hikâyedir. (2026-06-22 yükseltmesi kalan pazar kodunu kaldırmıştır.)
Ücret uygulaması
AMM v4 ile aynı aritmetik — tam türetme içinproducts/amm-v4/math bölümüne bakın — ancak Stable havuzlarının kendi numaralarıyla.
pnl_portion, need_take_pnl_* adresine gider ve yönetici tarafından WithdrawPnl aracılığıyla taranır. lp_portion kasada kalır, k’yı şişirir ve LP token sahiplerine fayda sağlar.
Havuz varlığı muhasebesi
Formül tarihsel olarak havuzun OpenBook OpenOrders hesabında açık emirler olarak tuttuğu fonları eklemiştir. Bu terim, havuz emirleri göndermeyi bıraktığından beri pratikte sıfır olmuştur ve 2026-06-22 yükseltmesi bunu formülden tamamen kaldırmış, yalnızca kasa hesaplamasını bırakmıştır:need_take_pnl kısmı fiziksel olarak kasada oturur ancak fiyatlandırmadan hariç tutulur). Daha önce OpenOrders bakiyelerini okuyan alıntılama kodu ve indeksleyiciler bu terimi bırakmalıdır.
MonitorStep (kaldırıldı)
MonitorStep, beklemede olan OpenBook doldurmaları kapatıp AmmInfo.target_orders’ı yeniden hesaplayan ve arama tablosundan türetilen limit emir ızgarasını yeniden gönderen crank talimatı idi. Havuz yıllardır OpenBook’a emir göndermeyi bırakmıştır, bu nedenle crank’ın yapacak bir şeyi kalmamıştır; 2026-06-22 yükseltmesinde kaldırılmıştır. Entegratörler Stable havuzlarını çevirmek zorunda değildir.
Özet: bu neden işe yarar
Arama tablosu + enterpolasyon tasarımı verimli ve esnek:- Verimlilik: İkili arama O(log 50.000) ≈ 16 yineleme, her biri ~ 300–500 CU. Enterpolasyon birkaç çarpma/bölme işlemidir. Toplam alıntılama maliyeti ~5k–15k CU, bir formülü her swap’ta yeniden hesaplamaktan çok daha ucuzdur.
- Esneklik: Yönetici herhangi bir parçalı doğrusal eğriyi kodlayabilir. Stablecoin çiftleri 1:1 civarında yüksek yoğunluk alır; teminatlı çiftler özel eğriler alır.
- Kendi kendine yeterli likidite: Tüm fonlar havuz kasalarında yaşar ve fiyatlandırma onları doğrudan okur — crank yok, harici emir defteri yok, işlem başına daha az hesap.
raydium-stable/program/src/state.rs bölümüne, get_data_by_x, get_data_by_y, get_dy_by_dx_base_in vb. yöntemlere bakın.
Sonraki adım
- Hesaplar —
ModelDataInfoveDataElementalan referansı. - Talimatlar — çağrılabilir set (swap, deposit, withdraw,
WithdrawPnl) ve kaldırılan talimatlar. - Ücretler — ücret uygulaması ve
WithdrawPnl. products/amm-v4/math— OpenBook ücret dahil emir fiyatlandırması mantığı için.
raydium-stable/program/src/state.rs(enterpolasyon ve ikili arama uygulamaları)raydium-stable/program/src/math.rs(hesap makinesi yardımcı programları)

