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

# Sabit-çarpım AMM

> x·y=k değişmezi, rezerv temelli fiyatlandırma, slipaj türetimi ve Raydium CPMM ile AMM v4'ün kullandığı ücret işleme varyantları. Bu sayfa, Raydium'daki her x·y=k ürününün referans aldığı matematik başvuru sayfasıdır.

<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 →](/algorithms/constant-product)
</Info>

## Değişmez

Sabit-çarpım pazar yapıcısı (CPMM) iki rezerv `x` ve `y` tutar ve aşağıdakini zorlar:

```
x · y ≥ k       (her işlemden sonra)
```

Burada `k`, işlemden önceki rezervlerin çarpımıdır. Ücretsiz bir pazar için `x · y = k` tam olarak eşittir. Ücretler söz konusu olduğunda, `k` kesin olarak büyür (LP'nin ücret payı rezervlerde kalır).

Değişmez kasıtlı olarak geometriktir: bir rezerv ne kadar küçük olursa olsun, diğeri sınırsızca büyüyüp eşleşmesini garantileyen bir yapıya sahiptir — yani havuz hiçbir taraftan sıfıra kadar drene edilemez.

## Fiyatlandırma

### Spot fiyatı

Herhangi bir anda `x` cinsinden `y`'nin marjinal fiyatı eğrinin tanjantıdır:

```
p = y / x
```

(Türetim: `x · y = k`'nin örtülü türevi `dy/dx = −y/x` verir; işareti göz ardı ederek `|dy/dx| = y/x`).

Bu, havuzun sonsuz küçük bir işlem için belirttiği fiyattır. Sonlu herhangi bir işlem için, gerçekleşen fiyat eğri boyunca slipaj nedeniyle daha kötüdür.

### Tam-giriş takas (Δx verin, Δy alın)

Ücretler söz konusu olduğunda, `f` ücret oranı olsun (örn. 25 bps için `f = 0.0025`). Ücreti girdiye uygulayın, sonra çıktıyı çözmek için değişmezi kullanın:

```
Δx_after_fee = Δx · (1 − f)
Δy           = y · Δx_after_fee / (x + Δx_after_fee)
```

İşlem sonrası rezervler:

```
x' = x + Δx
y' = y − Δy
```

Tam `Δx` rezervlere girer. Ücretin LP payı `x'`'de kalır; protokol payı ayrı bir muhasebe adımı vasıtasıyla eğriden hariç tutulur (aşağıdaki [Ücret muhasebesi varyantları](#fee-accounting-variants) bölümüne bakın).

### Tam-çıkış takas (Δy alın, minimum Δx ödeyin)

```
Δx_after_fee = x · Δy / (y − Δy)
Δx           = Δx_after_fee / (1 − f)
```

Havuzun yetersiz ücret almadığından emin olmak için `Δx` yukarı yuvarlanır.

## Slipaj ve fiyat etkisi

**Fiyat etkisi**, işlemin sonucu olarak havuzun spot fiyatının ne kadar hareket ettiğini ölçer:

```
p_before = y / x
p_after  = y' / x' = (y − Δy) / (x + Δx)
impact   = (p_before − p_after) / p_before
```

Küçük `Δx / x` için, birinci dereceden genişleme şunu verir:

```
impact ≈ 2 · Δx / x      (ücretler göz ardı edilerek)
```

Sezgi: %1 swap yaklaşık %2 fiyat etkisine neden olur. Bu 2 faktörü, CPMM havuzlarının orta ölçekli işlemler için sipariş defteri piyasalarına kıyasla "ince" görünmesinin nedenidir — sadece mevcut en iyi teklifi karşısında satın almıyorsunuz, aynı zamanda kendi marjinal fiyatınızda yürüyüp gidiyorsunuz.

**Efektif fiyat** takas yapan tarafından ödenen:

```
effective = Δx / Δy
```

`p_before` ve `effective` arasındaki fark **slipaj**'dır. Zincir üstü `slippage` arayüzü genellikle `(effective − p_before) / p_before` olarak ifade edilir; SDK'nın `computeAmountOut` bu nedenle hem `amountOut` hem de `priceImpact` döndürür.

## Koddaki değişmez kontrol

Bir swap sonrasında, protokoller yeniden doğrularlar:

```
k' = x' · y'  ≥  k  =  x · y
```

Herhangi bir ihlal, program hatası veya aritmetik taşmadır. Raydium'un swap talimatları bu kontrolü bir son koşul olarak açıkça gerçekleştirir:

```rust theme={null}
let k_before = coin_reserve_before as u128 * pc_reserve_before as u128;
let k_after  = coin_reserve_after  as u128 * pc_reserve_after  as u128;
require!(k_after >= k_before, ErrorCode::InvariantViolation);
```

## Ücret muhasebesi varyantları

Değişmez kontrol, LP ücretinin rezervlerde kaldığını varsayar. Farklı Raydium ürünleri protokol / fon / yaratıcı bileşenlerini farklı şekilde işler:

### CPMM konvansiyonu

Ücretler, `1_000_000` paydası üzerinde `u64` temel puan benzeri oranlarıdır. İşlem ücreti `trade_fee_rate` (toplam) olarak bölünür, sonra `protocol_fee_rate`, `fund_fee_rate`, `creator_fee_rate` aracılığıyla alt bölümlere ayrılır. Her swap'ta:

```
trade_fee     = ceil(Δx · trade_fee_rate / 1_000_000)
protocol_fee  = trade_fee · protocol_fee_rate / 1_000_000
fund_fee      = trade_fee · fund_fee_rate     / 1_000_000
creator_fee   = trade_fee · creator_fee_rate  / 1_000_000
lp_fee        = trade_fee − protocol_fee − fund_fee − creator_fee
```

Üç LP olmayan pay ayrı sayaçlara (`protocol_fees_*`, `fund_fees_*`, `creator_fees_*`) birikir ve değişmezde kullanılan rezervlerden **hariç tutulur**. Bu, ücretlerin eğriyi hareket ettirmeden nasıl toplanabileceğidir. [`products/cpmm/fees`](/tr/products/cpmm/fees) sayfasına bakın.

### AMM v4 konvansiyonu

Ücretler, `10_000` paydası üzerinde `numerator / denominator` oranlarıdır. Bölme, havuz oluşturulurken sabitlenir ve `AmmInfo.fees`'de depolanır:

```
swap_fee  = ceil(Δx · swap_fee_numerator / swap_fee_denominator)    // örn. 0.25%
pnl_share = swap_fee · pnl_numerator / swap_fee_numerator            // örn. 0.03 / 0.25 = 12%
lp_share  = swap_fee − pnl_share                                     // hacim'in 0.22%'si
```

`pnl_share` `state_data.need_take_pnl_*` içine birikir ve rezervlerden hariç tutulur; `lp_share` vaultta kalır. [`products/amm-v4/fees`](/tr/products/amm-v4/fees) sayfasına bakın.

Her iki konvansiyonu da aynı şekilde değişmezi korur — fark kozmetiktir (payda + alt kategori sayısı).

## Yuvarlama kuralları

* **Ücret hesaplaması yukarı yuvarlanır.** Havuzun ücret konusunda hiçbir zaman yetersiz olmasını sağlar.
* **Çıkış miktarı aşağı yuvarlanır.** Değişmezin kesin olarak tutmasını sağlar (`k' > k` ücret eklenmeden önce bile).
* **Tam-çıkış giriş miktarı yukarı yuvarlanır.** Kullanıcının yetersiz ödeme yapmamasını sağlar.

Tüm aritmetik, büyük rezervlerde taşmayı önlemek için ara `x · Δx` ürünleri için `u128` kullanır. Son sonuçlar doyum kontrolü ile `u64`'e geri dönüştürülür.

## Sınır durumlar

### Boş havuz

İlk `Deposit`'ten önce, `x = y = 0`. Swap talimatları öncesi deposu reddeder.

### Sıfır çıkış

`Δx` yeterince küçükse, aşağı yuvarlanmış `Δy` 0 ise, talimat `ZeroTradingTokens` ile geri döner. Bu, ödeme olmadan değer çıkarılmasını önler; ayrıca son derece dengesiz havuzlarda toz swaplarının başarısız olması anlamına gelir.

### Toz LP'si

İlk `Deposit`'in özel bir işlemesi vardır: ilk LP arzını `sqrt(x · y)` olarak hesaplar ve bir saldırganın vault'a bağış yaptığı ve LP token değerini şişirdiği "ilk mevduat enflasyon saldırısı"nı önlemek için küçük bir "init burn" miktarını (genellikle 100 LP birimi) yakar. Sonraki mevduatlar pro-rata matematiğini kullanır.

## Arbitrajla ilişki

CPMM havuzunun fiyatı yalnızca aşağıdakiler aracılığıyla değişir:

1. Havuzun kendisi aracılığıyla işlemler (kullanıcılar eğride yürüyüşler).
2. Bağışlar (vault'a swap yapmadan token gönderme).

İşlemler fiyatı eğri ile deterministik olarak hareket ettirdiğinden, fiyatı daha geniş pazardan farklı olan herhangi bir havuz bir arbitraj fırsatı yaratır. Arbitrajcılar havuz fiyatını beklenti içinde pazar fiyatına doğru geri getirir. CPMM havuzlarının "oraküllü olmadan fiyat belirttiği" söylenmesinin nedeni budur: pazar arbitraj aracılığıyla havuzun harici olarak okuma yapması yerine fiyatı bulur.

Ters taraf: havuzun kendisi arbitrajcının karşı tarafı olduğundan, herhangi bir arbitraj kârı LP kalıcı olmayan kaybıdır (LP'ler tarafından yakalanan ücret eksi).

## Çalışılan örnekler

### Örnek 1 — küçük işlem, ihmal edilebilir slipaj

Havuz: `x = 1_000_000, y = 2_000_000, k = 2·10^12`. Ücret `f = 0.0025`.

İşlem `Δx = 1_000`:

```
Δx_after_fee = 1000 · 0.9975  = 997.5
Δy           = 2_000_000 · 997.5 / (1_000_000 + 997.5)
             = 1_995_000_000 / 1_000_997.5
             ≈ 1_993.01
```

Efektif fiyat: `1000 / 1993.01 ≈ 0.5018`. Öncesi spot: `0.5`. Etki: \~%0.36.

### Örnek 2 — orta ölçekli işlem, görülür slipaj

Aynı havuz, `Δx = 100_000` (`x`'in %10'u):

```
Δx_after_fee = 100_000 · 0.9975 = 99_750
Δy           = 2_000_000 · 99_750 / (1_000_000 + 99_750)
             = 199_500_000_000 / 1_099_750
             ≈ 181_405
```

Efektif: `100_000 / 181_405 ≈ 0.5513`. Etki: \~%10.3 — kabaca `2 · 10% = 20%` nın (kural, ücretsiz sabit-çarpım eğrisinin en kötü durum tavanıdır; işlem ücreti artı formüldeki inversiyon bunu aşağı getirir).

## İşaretçiler

* [`products/cpmm/math`](/tr/products/cpmm/math) — CPMM'nin belirli yuvarlama + ücret-payda seçimleri.
* [`products/amm-v4/math`](/tr/products/amm-v4/math) — AMM v4'ün OpenBook entegre rezervlerinin bu modeli nasıl genişlettiği.
* [`algorithms/slippage-and-price-impact`](/tr/algorithms/slippage-and-price-impact) — Arayüzler için slipaj toleransı boyutlandırması hakkında özel sayfa.

Kaynaklar:

* Uniswap v2 beyaz kitabı — `x · y = k`'nin kanonik ifadesi.
* Raydium CPMM program kaynağı.
* Raydium AMM v4 program kaynağı.
