> ## 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.

# Stable AMM matematiği

> Arama tablosundan fiyatları alıntılamak için ikili arama ve doğrusal enterpolasyon. Ücret uygulaması AMM v4 ile aynı. OpenBook ayrılmasından sonra saf AMM havuz muhasebesi.

<Info>
  **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 →](/products/stable/math)
</Info>

## 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:

1. Havuzun mevcut oranını rezervlerden hesaplar.
2. Tabloyu **ikili arama** ile bu oranı çevreleyen iki girişi bulur.
3. Aralarında **doğrusal enterpolasyon** yaparak ara bir fiyat elde eder.
4. Ücretleri uygular ve alıntıyı döndürür.

Bu yaklaşım, bir formülün belirleyiciliğini **yönetici esnekliğiyle** değiştirir ve Solana'nın işlem bütçesine sığacak kadar verimlidir.

## 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ı:

```
DataElement {
  x: u64,      // X koordinatı (coin tarafı tutarı, ölçeklenmiş)
  y: u64,      // Y koordinatı (pc tarafı tutarı, ölçeklenmiş)
  price: u64,  // price = x/y, çarpan tarafından ölçeklenmiş
}
```

Mevcut havuz rezervlerinde (x\_real, y\_real) bir fiyat bulmak için:

1. Oranı hesaplayın: `target_ratio = (x_real * multiplier) / y_real`.
2. `(element.x * multiplier) / element.y` değerinin `target_ratio`'yu çevreleyen girişleri bulmak için ikili arama yapın.
3. Bir köşeli parantez `[min_idx, max_idx]` bulunduğunda, enterpolasyon yapın.

Programın ikili arama kodu `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 çiftini hesaplar:

```
target = (x_real * multiplier) / y_real

[x1, y1, p1] = table[min_idx]
[x2, y2, p2] = table[max_idx]

// Fiyatı enterpolasyon yapın
p = p1 + (p2 - p1) * (target - ratio1) / (ratio2 - ratio1)

// Rezervi enterpolasyon yapın
x = x1 + (x2 - x1) * (target - ratio1) / (ratio2 - ratio1)
y = y1 + (y2 - y1) * (target - ratio1) / (ratio2 - ratio1)
```

Sonuç, tablo noktalarını sorunsuz bir şekilde bağlayan parçalı doğrusal bir eğridir.

## Ölçekleme: çarpan

Havuz rezervleri ve fiyatları farklı ölçeklerde depolanır. `ModelDataInfo` üzerindeki `multiplier` alanı bunu hesaba katar. Yaygın bir örnek:

* Coin 6 ondalık basamağa, PC 18 ondalık 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.

Program okuma/yazma sırasında şu şekilde yeniden ölçekler:

```
real_value = table_value * ratio / multiplier
table_value = real_value * multiplier / ratio
```

## Swap fiyatlandırması: `SwapBaseIn` ve `SwapBaseOut`

### SwapBaseIn (tam giriş)

Giriş tutarı `amount_in` verildiğinde:

1. `(coin_vault, pc_vault)` adresinden mevcut oranı alın.
2. Tablo girişlerini çevreleyin ve tablo alanı oranını elde etmek için enterpolasyon yapın.
3. Girişi tablo alanına dönüştürün: `dx_table = amount_in * multiplier / ratio`.
4. Yeni Y'yi bulmak için tabloyu yeni X koordinatında sorgulayın.
5. `dy_table = y_old - y_new`.
6. Geri dönüştürün: `dy_real = dy_table * ratio / multiplier`.
7. İşlem ücretini uygulayın: `dy_output = dy_real - (dy_real * trade_fee_numerator / trade_fee_denominator)`.
8. `dy_output` döndürün.

### SwapBaseOut (tam çıkış)

Simetrik: istenen `amount_out` verildiğinde, gerekli `amount_in` için çözün.

Her iki yol da etkili rezervleri doğrudan havuz kasalarından 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](/tr/reference/changelog) kalan pazar kodunu kaldırmıştır.)

## Ücret uygulaması

AMM v4 ile aynıdır: tam türetme için [`products/amm-v4/math`](/tr/products/amm-v4/math) bölümüne bakın.

```
gross_fee = amount_in * (swap_fee_numerator / swap_fee_denominator)    // örn. %0,25
lp_portion = gross_fee - (gross_fee * pnl_numerator / pnl_denominator) // örn. %0,22
pnl_portion = gross_fee * (pnl_numerator / pnl_denominator)            // örn. %0,03
```

`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 sahiplerinden yararlanır.

## 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:

```
Eski: toplam varlıklar = kasa bakiyeleri + açık emir fonları (native_coin_total / native_pc_total) − beklemede olan PnL (need_take_pnl)
Yeni: toplam varlıklar = kasa bakiyeleri − beklemede olan PnL (need_take_pnl)
```

Bu, eğri matematiğinin etkili rezervler olarak ele aldığı değerdir (birikmiş ancak taranmamış `need_take_pnl` kısmı fiziksel olarak kasada oturur ancak fiyatlandırmadan hariç tutulur). Daha önce OpenOrders bakiyelerini okuyan alıntı 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ıydı**. 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ı çalıştırmak 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ölmedir. Toplam alıntı 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ğri kodlayabilir. Stablecoin çiftleri 1:1 etrafı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 bunları doğrudan okur — crank yok, harici emir defteri yok, işlem başına daha az hesap.

Enterpolasyon mantığının derinlemesine incelemesi için `raydium-stable/program/src/state.rs` bölümüne bakın, `get_data_by_x`, `get_data_by_y`, `get_dy_by_dx_base_in` vb. yöntemler.

## Sonraki adımlar

* [Hesaplar](/tr/products/stable/accounts) — `ModelDataInfo` ve `DataElement` alan referansı.
* [Talimatlar](/tr/products/stable/instructions) — çağrılabilir küme (swap, deposit, withdraw, `WithdrawPnl`) ve kaldırılan talimatlar.
* [Ücretler](/tr/products/stable/fees) — ücret uygulaması ve `WithdrawPnl`.
* [`products/amm-v4/math`](/tr/products/amm-v4/math) — OpenBook ücret dahil emir fiyatlandırması mantığı için.

Kaynaklar:

* `raydium-stable/program/src/state.rs` (enterpolasyon ve ikili arama uygulamaları)
* `raydium-stable/program/src/math.rs` (hesap makinesi yardımcıları)
