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

# CLMM talimatları

> Eksiksiz CLMM talimat referansı: havuz yaşam döngüsü, pozisyon yönetimi, swap ve ödül akışları.

<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/clmm/instructions)
</Info>

<Info>
  Bu sayfa, [`products/clmm/accounts`](/tr/products/clmm/accounts) (hesapların ne olduğu) ve [`products/clmm/math`](/tr/products/clmm/math) (matematiğin ne olduğu) sayfalarıyla birlikte kullanılır. Argümanlar ve hesap sıralaması için yetkili kaynaktır; belirli bayt düzenleri IDL'den alınır.
</Info>

## Talimat envanteri

| Grup       | Talimat                                                          | Notlar                                                                                                                                                                                                                                                                |
| ---------- | ---------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Yönetici   | `CreateAmmConfig`                                                | Yeni bir ücret kademesi tanımlar.                                                                                                                                                                                                                                     |
| Yönetici   | `UpdateAmmConfig`                                                | Mevcut bir kademedeki oranları değiştirir.                                                                                                                                                                                                                            |
| Yönetici   | `UpdatePoolStatus`                                               | Havuzdaki işlemleri duraklatır/devam ettirir.                                                                                                                                                                                                                         |
| Yönetici   | `CreateSupportMintAssociated`                                    | CLMM havuzlarında kullanılmak üzere bir Token-2022 mint uzantı yapılandırmasını izin listesine ekler.                                                                                                                                                                 |
| Yönetici   | `CreateOperationAccount`                                         | Program düzeyindeki işlem hesabını başlatır (tek seferlik).                                                                                                                                                                                                           |
| Yönetici   | `UpdateOperationAccount`                                         | İşlem hesabı beyaz listesini değiştirir.                                                                                                                                                                                                                              |
| Yönetici   | `CreateDynamicFeeConfig`                                         | u16 indeksi altında yeniden kullanılabilir bir dinamik ücret parametre seti oluşturur.                                                                                                                                                                                |
| Yönetici   | `UpdateDynamicFeeConfig`                                         | Mevcut bir `DynamicFeeConfig`'i değiştirir. Daha önce bu yapılandırmayı anlık görüntü alan havuzlar etkilenmez.                                                                                                                                                       |
| Havuz      | `CreatePool`                                                     | Bir `AmmConfig`'e bağlı CLMM havuzu başlatır. Standart, FromInput ücret yolu. `CreateCustomizablePool` ile bir arada kullanılabilir.                                                                                                                                  |
| Havuz      | `CreateCustomizablePool`                                         | Yeni havuzlar için önerilir. `CreatePool` ile aynı yapıya ek olarak `collect_fee_on` ve isteğe bağlı `enable_dynamic_fee` bayrağını içerir.                                                                                                                           |
| Pozisyon   | `OpenPosition` / `OpenPositionV2` / `OpenPositionWithToken22Nft` | Pozisyon NFT'si basar. `OpenPositionV2`, V1'in yerini almıştır (bitmap genişletme yuvası ile yeni hesap düzeni); `OpenPositionWithToken22Nft`, pozisyon NFT'sini SPL Token yerine Token-2022 olarak çıkarır. Yeni kodlar V2 veya Token-2022 varyantını kullanmalıdır. |
| Pozisyon   | `IncreaseLiquidity` / `IncreaseLiquidityV2`                      | Mevcut bir pozisyona likidite ekler.                                                                                                                                                                                                                                  |
| Pozisyon   | `DecreaseLiquidity` / `DecreaseLiquidityV2`                      | Likiditeyi kaldırır; borçlu ücretleri tahsil eder.                                                                                                                                                                                                                    |
| Pozisyon   | `ClosePosition`                                                  | NFT'yi yakar ve `PersonalPositionState`'i kapatır.                                                                                                                                                                                                                    |
| Pozisyon   | `CloseProtocolPosition`                                          | Yalnızca yönetici: eski `ProtocolPositionState` PDA'ları için tarama işlemi. Mevcut program `ProtocolPositionState` oluşturmuyor veya okumuyor — bu talimat yalnızca eski program sürümlerinin oluşturduğu hesaplardaki kira bedelini geri almak için vardır.         |
| Swap       | `Swap` / `SwapV2`                                                | Sabit likidite swap'ı. Her iki varyant da dinamik ücret, tek taraflı ücret yönlendirmesi ve limit emir eşleştirmeyi uygular; tek fark, `SwapV2`'nin Token-2022 mint'lerini kabul etmesidir (V1 varyantı her iki vault'un klasik SPL Token olmasını gerektirir).       |
| Swap       | `SwapRouterBaseIn`                                               | Çok adımlı, yönlendirici tarafından kullanılır.                                                                                                                                                                                                                       |
| Limit emir | `OpenLimitOrder`                                                 | Bir tick'te satış emri verir. Doldurulmamış tokenlar tick üzerinde bekler; eşleştirme motoru, fiyat geçerken bunları doldurur.                                                                                                                                        |
| Limit emir | `IncreaseLimitOrder`                                             | Mevcut açık bir emre ekleme yapar.                                                                                                                                                                                                                                    |
| Limit emir | `DecreaseLimitOrder`                                             | Açık bir emri azaltır veya iptal eder; doldurulmamış kalanı artı önceden gerçekleşmiş çıktıyı öder.                                                                                                                                                                   |
| Limit emir | `SettleLimitOrder`                                               | Doldurulmuş çıktı tokenlarını emir sahibine gönderir. Sahibi veya operasyonel tutucu tarafından çağrılabilir.                                                                                                                                                         |
| Limit emir | `CloseLimitOrder`                                                | Tamamen tüketilmiş bir emir hesabını kapatır. Kira bedeli her zaman emrin `owner`'ına iade edilir. Sahibi veya tutucu tarafından çağrılabilir.                                                                                                                        |
| Ücretler   | `CollectProtocolFee`                                             | Protokol ücretlerinin yönetici tarafından taranması.                                                                                                                                                                                                                  |
| Ücretler   | `CollectFundFee`                                                 | Fon ücretlerinin yönetici tarafından taranması.                                                                                                                                                                                                                       |
| Ödüller    | `InitializeReward`                                               | Bir havuza yeni bir ödül akışı ekler.                                                                                                                                                                                                                                 |
| Ödüller    | `SetRewardParams`                                                | Mevcut bir ödülün emisyon hızını/bitiş zamanını değiştirir.                                                                                                                                                                                                           |
| Ödüller    | `UpdateRewardInfos`                                              | Ödül büyümesini şimdiki zamana kadar dengeler (her swap / pozisyon değişikliğinde çağrılır).                                                                                                                                                                          |
| Ödüller    | `TransferRewardOwner`                                            | Bir ödül akışını ayarlayabilen veya doldurabilecek yetkiyi devreder.                                                                                                                                                                                                  |
| Ödüller    | `CollectRemainingRewards`                                        | Bir ödül akışının `end_time`'ından sonra, tahsis edilmemiş tokenları fon sağlayıcıya geri süpürür.                                                                                                                                                                    |
| Yardımcı   | `InitTickArray`                                                  | Bir tick-array hesabı başlatır (genellikle `OpenPosition` ile paketlenir).                                                                                                                                                                                            |

Çoğu yalnızca-yönetici talimatı (`CreateAmmConfig`, `UpdateAmmConfig`, `UpdatePoolStatus`, `CreateSupportMintAssociated`, `CreateOperationAccount`, `UpdateOperationAccount`, `CloseProtocolPosition`), programın sabit kodlanmış `admin` pubkey'i tarafından kısıtlanmıştır. Ödül akışı yönetici talimatları (`TransferRewardOwner`, `CollectRemainingRewards`) ise program yöneticisi değil, ödül fon sağlayıcısı tarafından kısıtlanmıştır.

V2 son eki "vault'larda / NFT'de Token-2022'yi destekler, bitmap genişletme yuvası gerektirir" anlamına gelir. SDK, yeni havuzlar için varsayılan olarak V2'yi seçer.

## `CreatePool`

**Argümanlar**

```
sqrt_price_x64: u128           // başlangıç fiyatı
open_time:      u64            // bu zamandan önce swap'lar reddedilir
```

**Hesaplar (özet)**

| #  | Ad                            | W | S | Notlar                                       |
| -- | ----------------------------- | - | - | -------------------------------------------- |
| 1  | `pool_creator`                | W | S |                                              |
| 2  | `amm_config`                  |   |   | Seçilen ücret kademesi.                      |
| 3  | `pool_state`                  | W |   | Burada `init`.                               |
| 4  | `token_mint_0`                |   |   | Sıralı.                                      |
| 5  | `token_mint_1`                |   |   |                                              |
| 6  | `token_vault_0`               | W |   | Burada `init`, havuz authority PDA'sına ait. |
| 7  | `token_vault_1`               | W |   |                                              |
| 8  | `observation_state`           | W |   | Burada `init`.                               |
| 9  | `tick_array_bitmap_extension` | W |   | Burada `init` (V2).                          |
| 10 | `token_program`               |   |   |                                              |
| 11 | `token_program_2022`          |   |   |                                              |
| 12 | `system_program`, `rent`      |   |   |                                              |

**Ön koşullar**

* Bayt sırasına göre `token_mint_0 < token_mint_1`.
* `amm_config.disable_create_pool == false`.
* Mint'ler Token-2022 uzantı izin listesi tarafından reddedilmemiş olmalıdır.

**Son koşullar**

* `pool_state.sqrt_price_x64 = sqrt_price_x64`, `tick_current = floor(log_{1.0001}(price))`.
* `pool_state.liquidity = 0` (henüz pozisyon yok).
* `pool_state.fee_on = FromInput` (eski varsayılan).
* `pool_state.dynamic_fee_info` sıfırlanmış (dinamik ücret devre dışı).

## `CreateCustomizablePool`

Yeni havuzlar için önerilir. `CreatePool` ile aynı etkiyi sağlar; ek olarak havuz başına ücret toplama modu ve isteğe bağlı dinamik ücret katılım seçeneği sunar.

**Argümanlar**

```rust theme={null}
pub struct CreateCustomizableParams {
    pub sqrt_price_x64:    u128,
    pub collect_fee_on:    CollectFeeOn,   // FromInput | Token0Only | Token1Only
    pub enable_dynamic_fee: bool,
}
```

**Hesaplar (özet)** — `CreatePool` ile aynı; `enable_dynamic_fee = true` olduğunda ek olarak:

| # | Ad                   | W | S | Notlar                                                                  |
| - | -------------------- | - | - | ----------------------------------------------------------------------- |
| N | `dynamic_fee_config` |   |   | Anlık görüntü alınacak paylaşılan yapılandırma. Zaten mevcut olmalıdır. |

**Ön koşullar** — `CreatePool` ile aynı. `enable_dynamic_fee = false` ise `dynamic_fee_config` yoksayılır.

**Son koşullar**

* `pool_state.fee_on`, seçilen `CollectFeeOn` varyantına ayarlanır.
* Dinamik ücret etkinleştirildiyse: `pool_state.dynamic_fee_info`, sağlanan `DynamicFeeConfig`'den başlatılır (beş kalibrasyon parametresi kopyalanır; durum alanları sıfırlanır).
* Aksi takdirde: `pool_state.dynamic_fee_info` sıfırlanır (= bu havuz için dinamik ücret sonsuza kadar etkin değil).

`fee_on` ve dinamik ücret etkinleştirme biti **yalnızca** havuz oluşturulurken ayarlanır. Yerinde yükseltme mevcut değildir — eski `CreatePool` aracılığıyla oluşturulan havuzlar geriye dönük olarak dinamik ücret veya tek taraflı ücret kazanamaz. Yeni dağıtımlar bu talimatı varsayılan olarak kullanmalıdır.

## `OpenPositionV2` / `OpenPositionWithToken22Nft`

Mevcut bir havuz içinde yeni bir pozisyon oluşturur.

**Argümanlar**

```
tick_lower_index: i32
tick_upper_index: i32
tick_array_lower_start_index: i32
tick_array_upper_start_index: i32
liquidity:  u128              // istenen L (veya aşağıdaki miktarları kullanmak için 0)
amount_0_max: u64
amount_1_max: u64
with_metadata: bool           // NFT meta verilerini yaz (Metaplex)
base_flag: Option<bool>       // true = amount0'a göre ayarla; false = amount1'e göre ayarla
```

**Hesaplar (özet)**

| #  | Ad                                        | W | S           |                                               |
| -- | ----------------------------------------- | - | ----------- | --------------------------------------------- |
| 1  | `payer`                                   | W | S           |                                               |
| 2  | `position_nft_owner`                      |   |             |                                               |
| 3  | `position_nft_mint`                       | W | S (keypair) |                                               |
| 4  | `position_nft_account`                    | W |             | NFT için sahibin ATA'sı.                      |
| 5  | `metadata_account`                        | W |             | Metaplex (isteğe bağlı, `with_metadata` ise). |
| 6  | `pool_state`                              | W |             |                                               |
| 7  | `protocol_position`                       |   |             |                                               |
| 8  | `tick_array_lower`                        | W |             | Başlatılmamışsa oluşturulur.                  |
| 9  | `tick_array_upper`                        | W |             | Aynı şekilde.                                 |
| 10 | `personal_position`                       | W |             | Burada oluşturulur.                           |
| 11 | `token_account_0`, `token_account_1`      | W |             | Kullanıcı kaynak ATA'ları.                    |
| 12 | `token_vault_0`, `token_vault_1`          | W |             |                                               |
| 13 | `rent`, `system_program`, `token_program` |   |             |                                               |
| 14 | `associated_token_program`                |   |             |                                               |
| 15 | `metadata_program`                        |   |             | İsteğe bağlı.                                 |
| 16 | `token_program_2022`                      |   |             | V2.                                           |
| 17 | `vault_0_mint`, `vault_1_mint`            |   |             | V2.                                           |
| 18 | `tick_array_bitmap_extension`             | W |             | V2 (dokunulduysa).                            |

**Matematik** — bkz. [`products/clmm/math`](/tr/products/clmm/math). `base_flag`'e göre program, `liquidity`'yi veya `(amount_0_max, amount_1_max)`'ı gerçek `L`'ye ve tüketilen gerçek token miktarlarına dönüştürür.

**Ön koşullar**

* `tick_lower < tick_upper`, her ikisi de `pool.tick_spacing`'in katları olmalı ve `[MIN_TICK, MAX_TICK]` aralığında olmalıdır.
* Gerekli tick dizileri iletilmiş ve başlatılmış olmalıdır (veya işlem içinde `InitTickArray` CPI aracılığıyla burada oluşturulmuş olmalıdır).
* Kullanıcı, kaynak ATA'larında en az `amount_0_max` ve `amount_1_max` kadar token bulundurmalıdır.

**Son koşullar**

* `personal_position` mevcut, `liquidity` ayarlı, `fee_growth_inside_last` anlık görüntü alınmış.
* `tick_lower` ve `tick_upper`'daki tick-array girişleri güncellendi (`liquidity_gross += L`, `liquidity_net ± L`, ücret büyüme anlık görüntüleri korunuyor).
* Pozisyon aralık içindeyse (`tick_lower ≤ tick_current < tick_upper`) `pool_state.liquidity += L`.

**Yaygın hatalar** — `InvalidTickIndex`, `NotApproved`, `ZeroAmountSpecified`, `TransactionTooLarge` (çok fazla tick dizisi varsa).

## `IncreaseLiquidityV2`

Halihazırda açık bir pozisyona likidite ekler.

**Argümanlar**

```
liquidity: u128
amount_0_max: u64
amount_1_max: u64
base_flag: Option<bool>
```

**Hesaplar** — `OpenPosition` gibi, NFT mint'i olmadan (pozisyon zaten mevcut; NFT, 1 token tutan sahibin ATA'sı olarak iletilir).

**Etki**

* `amount_0_actual` / `amount_1_actual`'ı kullanıcıdan vault'lara aktarır.
* `personal_position.liquidity` ve `pool_state.liquidity`'yi (aralık içindeyse) ve buna göre uç nokta tick `liquidity_gross` / `liquidity_net`'i artırır.
* **Son dokunuştan bu yana biriken ücret ve ödülleri dengeler** ve bunları `tokens_fees_owed_{0,1}` / `reward_amount_owed`'a yazar. Bunlar yalnızca `DecreaseLiquidity` veya `CollectReward`'da ödenir, artırmada değil.

## `DecreaseLiquidityV2`

Bir pozisyondan likidite kaldırır.

**Argümanlar**

```
liquidity: u128
amount_0_min: u64
amount_1_min: u64
```

**Hesaplar** — `IncreaseLiquidity` ile aynı yapı.

**Etki**

* Mevcut `sqrt_price_x64`'e göre kaldırılan `L` için `(amount_0, amount_1)`'i hesaplar.
* Son dokunuştan bu yana biriken ücret/ödülleri `IncreaseLiquidity` ile aynı şekilde dengeler.
* `amount_0 + fees_owed_0` ve `amount_1 + fees_owed_1`'i vault'lardan kullanıcıya aktarır.
* Likidite sayaçlarını azaltır; yeni `personal_position.liquidity == 0` ise pozisyon `ClosePosition` için uygun hale gelir.

**Slippage** — `amount_0_min` ve `amount_1_min`, kullanıcının çıkış tarafındaki Token-2022 transfer ücretleri net olarak kabul edeceği minimum miktarlardır.

## `ClosePosition`

Pozisyon NFT'sini yakar ve `PersonalPositionState`'i kapatır.

**Ön koşullar**

* `personal_position.liquidity == 0`.
* `tokens_fees_owed_{0,1} == 0`.
* Tüm ödül sayaçları `reward_amount_owed == 0`.

(Yani önce her şeyi toplayın ve sıfıra kadar azaltın.)

**Etki**

* NFT'yi yakar.
* NFT mint hesabını ve `personal_position` hesabını kapatır, kira bedelini `payer`'a iade eder.

## `SwapV2`

Likidite eğrisini dolaşır; `is_base_input`'a bağlı olarak tam girdi *veya* tam çıktı.

**Argümanlar**

```
amount: u64                  // is_base_input=true ise girdi, aksi takdirde çıktı
other_amount_threshold: u64  // minimum çıktı veya maksimum girdi
sqrt_price_limit_x64: u128   // sabit sınır; 0 ⇒ sınırsız
is_base_input: bool
```

**Hesaplar (özet)**

| #   | Ad                                           | W | S | Notlar                                            |
| --- | -------------------------------------------- | - | - | ------------------------------------------------- |
| 1   | `payer`                                      |   | S |                                                   |
| 2   | `amm_config`                                 |   |   |                                                   |
| 3   | `pool_state`                                 | W |   |                                                   |
| 4   | `input_token_account`                        | W |   |                                                   |
| 5   | `output_token_account`                       | W |   |                                                   |
| 6   | `input_vault`                                | W |   |                                                   |
| 7   | `output_vault`                               | W |   |                                                   |
| 8   | `observation_state`                          | W |   |                                                   |
| 9   | `token_program`                              |   |   |                                                   |
| 10  | `token_program_2022`                         |   |   | V2.                                               |
| 11  | `memo_program`                               |   |   | V2 (bazı Token-2022 yolları için gerekli).        |
| 12  | `input_vault_mint`, `output_vault_mint`      |   |   | V2.                                               |
| 13  | `tick_array_bitmap_extension` (isteğe bağlı) | W |   | Swap genişletmeye girerse.                        |
| 14+ | `tick_array` (kalan)                         | W |   | Beklenen yürüyüş aralığını kapsayacak kadar dizi. |

Çağıranlar, beklenen swap yürüyüşünü kapsayan sıralı bir tick dizisi listesi iletir; program ihtiyaç duyduğu kadarını kullanır. SDK bu listeyi `PoolUtils.computeAmountOutFormat` veya API'nin fiyat teklifi uç noktası aracılığıyla hesaplar.

**Ön koşullar**

* `pool_state.status` swap'a izin veriyor olmalıdır.
* `now >= open_time`.
* `sqrt_price_limit_x64`, yön için `sqrt_price_x64`'ün doğru tarafında olmalıdır.

**Yaygın hatalar** — `ExceededSlippage`, `SqrtPriceLimitOverflow`, `TickArrayNotFound`, `LiquidityInsufficient`.

**Çağıranların bilmesi gereken `SwapV2`'nin dahili işlemleri** (2025 sonrası sürüm):

1. **Dinamik ücret ek bedeli** — `pool.dynamic_fee_info` sıfır değilse, program son swap'tan bu yana kat edilen tick mesafesini kullanarak volatilite akümülatörünü günceller ([`products/clmm/fees`](/tr/products/clmm/fees) içindeki filtre/bozunma kurallarıyla) ve `AmmConfig.trade_fee_rate`'in üzerine bir `dynamic_fee_component` ekler. Toplam ücret %10 ile sınırlıdır (`MAX_FEE_RATE_NUMERATOR / 1_000_000`).
2. **Limit emir eşleştirme** — fiyat yürüyüşü açık limit emirleri barındıran bir tick'i geçtiğinde, program önce o tick'teki mevcut limit emri likiditesini (`order_phase`'e göre FIFO) doldurur, ardından LP likidite eğrisi boyunca devam eder. Doldurulan miktarlar, sonraki uzlaşma için `tick.unfilled_ratio_x64` ve `tick.part_filled_orders_remaining`'i günceller; emirlerin kendisi, sahibi `SettleLimitOrder`'ı çağırana kadar harcanmamış kalır.
3. **Tek taraflı ücret yönlendirmesi** — `pool.fee_on = Token0Only` veya `Token1Only` olduğunda, swap adımı aynı girdi-çıktı ticaretini hesaplar; ücret daha sonra yapılandırılmış tarafa yönlendirilir. Yapılandırılmış ücret tarafının çıktı olduğu yönler için ücret, swap çıktısından düşülür (kullanıcı `çıktı − ücret` alır); girdi olduğu yönler için davranış `FromInput` ile eşleşir. `PoolState` üzerindeki `is_fee_on_input(zero_for_one)` ve `is_fee_on_token0(zero_for_one)` yöntemlerine bakın.

`Swap` (V1), `SwapV2` ile aynı dinamik ücret, tek taraflı ücret yönlendirmesi ve limit emir eşleştirmeyi uygular; tek eksik özelliği Token-2022 desteğidir — her iki vault da klasik SPL Token olmalıdır. Herhangi bir Token-2022 mint'i olan havuzlar `SwapV2` aracılığıyla swap yapılmalıdır. Toplayıcı ve SDK, her CLMM bacağı için zaten V2'yi tercih ettiğinden çağıranların mint türüne göre dallanması gerekmez.

## `OpenLimitOrder`

Belirli bir tick'te satış emri verir. Emir, tick başına FIFO kohortunda oturur ve fiyat geçtikçe dolduruluir.

**Argümanlar**

```
nonce_index:    u8       // kullanıcının seçtiği nonce-account indeksi (cüzdan başına 0..255)
zero_for_one:   bool     // true: token0'ı token1 için sat; false: token1'i token0 için sat
tick_index:     i32      // pool.tick_spacing'in katı olmalıdır
amount:         u64      // girdi token miktarı
```

**Hesaplar (özet)**

| #  | Ad                       | W | S | Notlar                                                                                 |
| -- | ------------------------ | - | - | -------------------------------------------------------------------------------------- |
| 1  | `payer`                  | W | S | Emir sahibi; kira öder.                                                                |
| 2  | `pool_state`             | W |   |                                                                                        |
| 3  | `tick_array`             | W |   | `tick_index`'i içeren tick dizisi.                                                     |
| 4  | `limit_order_nonce`      | W |   | PDA. `init_if_needed` — bu `nonce_index` altında kullanıcının ilk emrinde oluşturulur. |
| 5  | `limit_order`            | W |   | PDA. Burada `init`.                                                                    |
| 6  | `input_token_account`    | W |   | Kullanıcının girdi ATA'sı.                                                             |
| 7  | `input_vault`            | W |   | Havuz girdi vault'u.                                                                   |
| 8  | `input_vault_mint`       |   |   | Token-2022 ücret işleme.                                                               |
| 9  | `input_token_program`    |   |   | SPL veya Token-2022.                                                                   |
| 10 | `system_program`, `rent` |   |   |                                                                                        |

**Ön koşullar**

* `tick_index % pool.tick_spacing == 0` ve `[MIN_TICK, MAX_TICK]` aralığında olmalıdır.
* `tick_index`, seçilen yön için `pool.tick_current`'ın **doğru tarafında** olmalıdır (token0 satışı → tick mevcut tick'in üzerinde olmalı, tersi de geçerli). Zaten geçilmiş bir tick'te satış yapmak anında eşleşmeye yol açacağından reddedilir.
* `pool_state.status`, limit emir işlemine izin veriyor olmalıdır (bit 5).

**Son koşullar**

* `limit_order` mevcut, açılış zamanında `tick.order_phase` ve `tick.unfilled_ratio_x64`'ün anlık görüntüsünü alıyor.
* `tick.orders_amount += amount` (mevcut kohortta).
* `limit_order_nonce.order_nonce += 1`.
* `OpenLimitOrderEvent` yayımlandı.

**Yaygın hatalar** — `InvalidLimitOrderAmount` (sıfır veya havuzun minimumunun altında), `InvalidTickIndex` (`[MIN_TICK, MAX_TICK]` dışında veya seçilen yön için `tick_current`'ın yanlış tarafında), `TickAndSpacingNotMatch` (`tick_index % pool.tick_spacing != 0`), `OrderPhaseSaturated`.

## `IncreaseLimitOrder`

Mevcut açık bir emre ekleme yapar. Yalnızca emrin `owner`'ı tarafından çağrılabilir.

**Argümanlar**

```
amount: u64    // ek girdi token miktarı
```

**Hesaplar** — nonce hesabı olmadan `OpenLimitOrder` gibi; `limit_order` PDA'sı doğrudan iletilir.

**Ön koşullar**

* `limit_order.owner == signer`.
* Emir hâlâ aynı kohortta (`tick.order_phase == limit_order.order_phase`). Kohort doldurmaya başlamışsa, emir kısmen uzlaşılmıştır — çağıran önce ilerlemek için `DecreaseLimitOrder` veya `SettleLimitOrder`'ı çağırmalıdır.

**Etki**

* `amount`'ı sahip ATA'sından `input_vault`'a aktarır.
* `limit_order.total_amount += amount`; `tick.orders_amount += amount`.

## `DecreaseLimitOrder`

Açık bir emri azaltır veya tamamen iptal eder. Doldurulmamış kalanı sahibe iade eder; geçmiş kısmi dolgularla önceden uzlaşılmış çıktıları da öder.

**Argümanlar**

```
amount:     u64    // geri çekilecek girdi token miktarı (maksimum = doldurulmamış kalan)
amount_min: u64    // girdi tarafı geri çekimi için slippage tabanı
```

**Hesaplar** — hem girdi hem de çıktı token tarafları:

| #  | Ad                                      | W | S |
| -- | --------------------------------------- | - | - |
| 1  | `owner`                                 |   | S |
| 2  | `pool_state`                            | W |   |
| 3  | `tick_array`                            | W |   |
| 4  | `limit_order`                           | W |   |
| 5  | `input_token_account`                   | W |   |
| 6  | `output_token_account`                  | W |   |
| 7  | `input_vault`                           | W |   |
| 8  | `output_vault`                          | W |   |
| 9  | `input_vault_mint`, `output_vault_mint` |   |   |
| 10 | `token_program`, `token_program_2022`   |   |   |

**Etki**

* Açılıştan bu yana kohortun `unfilled_ratio_x64`'ünden emrin doldurulan miktarını yeniden hesaplar.
* Doldurulan çıktıyı `output_token_account`'a gönderir.
* Doldurulmamış girdiden `amount` kadarını `input_token_account`'a geri gönderir.
* `limit_order`'ı buna göre günceller. Yeni doldurulmamış kalan sıfırsa, program hesabı kapatır ve kira bedelini `owner`'a iade eder.

## `SettleLimitOrder`

Doldurulan çıktı tokenlarını, emrin doldurulmamış kalanını değiştirmeden sahibe gönderir. `auto_withdraw` tutucularının uzun süreli kısmi dolguları damlatarak ödemek istediğinde kullanışlıdır.

**Çağıran** — emrin `owner`'ı veya programın `limit_order_admin`'i (otomatik tutucu döngüsü çalıştıran, çevrimdışı bir operasyonel sıcak cüzdan). Tutucunun başka yetkisi yoktur — kullanıcı fonlarını yalnızca doldurulan çıktıyı emrin `owner` ATA'sına itmek dışında hareket ettiremez.

**Hesaplar**

| # | Ad                     | W | S |                                  |
| - | ---------------------- | - | - | -------------------------------- |
| 1 | `signer`               |   | S | sahip *veya* `limit_order_admin` |
| 2 | `pool_state`           |   |   |                                  |
| 3 | `tick_array`           |   |   |                                  |
| 4 | `limit_order`          | W |   |                                  |
| 5 | `output_token_account` | W |   | Sahibin çıktı ATA'sı.            |
| 6 | `output_vault`         | W |   | Havuz çıktı vault'u.             |
| 7 | `output_vault_mint`    |   |   |                                  |
| 8 | `output_token_program` |   |   |                                  |

**Etki**

* `(limit_order.unfilled_ratio_x64, tick.unfilled_ratio_x64)` kullanılarak borçlu birikimli çıktıyı hesaplar.
* Deltayı `output_token_account`'a aktarır.
* `limit_order.settled_output`'u günceller.
* Emri **kapatmaz**; kalan girdi için hâlâ açıktır.

## `CloseLimitOrder`

Tamamen tüketilmiş bir emir hesabını kapatır. Kira bedeli, imzalayanından bağımsız olarak her zaman `limit_order.owner`'a iade edilir.

**Çağıran** — `owner` veya `limit_order_admin`.

**Ön koşullar**

* Emrin doldurulmamış kalanı sıfırdır (ya `amount == total_amount` dolduruldu ve uzlaşıldı, ya da sahip daha önce emri sıfıra düşürüp kapatmayı unuttu).

**Etki**

* `limit_order`'ı kapatır; kira bedeli `limit_order.owner`'a gönderilir.

## `CreateDynamicFeeConfig` (yönetici)

Bir u16 indeksi altında yeniden kullanılabilir parametre seti oluşturur.

**Argümanlar**

```
index:                       u16
filter_period:               u16   // saniye; örn. 30
decay_period:                u16   // saniye; örn. 600. filter_period'dan büyük olmalıdır
reduction_factor:            u16   // 1..10_000; örn. 5_000 = bozunma penceresi başına %50 saklama
dynamic_fee_control:         u32   // 1..100_000; volatilite-ücret eğrisindeki kazanım
max_volatility_accumulator:  u32   // tavan
```

**Hesaplar**

| # | Ad                   | W | S | Notlar                             |
| - | -------------------- | - | - | ---------------------------------- |
| 1 | `owner`              | W | S | Sabit kodlanmış yönetici pubkey'i. |
| 2 | `dynamic_fee_config` | W |   | PDA, burada `init`.                |
| 3 | `system_program`     |   |   |                                    |

**Yaygın hatalar** — `decay_period <= filter_period` ise veya herhangi bir sınır dışı 0 değerli alan varsa `InvalidDynamicFeeConfigParams`.

## `UpdateDynamicFeeConfig` (yönetici)

Mevcut bir `DynamicFeeConfig`'i değiştirir. Oluşturma zamanında yapılandırmayı anlık görüntü almış havuzlar **geriye dönük olarak güncellenmez**; yalnızca bu yapılandırmaya başvuran yeni oluşturulan havuzlar yeni değerleri alır.

**Argümanlar** — `CreateDynamicFeeConfig` ile aynı beş kalibrasyon alanı (`filter_period`, `decay_period`, `reduction_factor`, `dynamic_fee_control`, `max_volatility_accumulator`); `index` oluşturma zamanında sabitlenir ve burada yeniden iletilmez.

## `CollectProtocolFee` / `CollectFundFee`

CPMM'nin `CollectProtocolFee` / `CollectFundFee`'siyle özdeş yapı. İmzalayan `AmmConfig.owner` / `AmmConfig.fund_owner` ile eşleşmelidir. Havuzun vault'larından alıcıya birikmiş protokol/fon ücretlerini süpürür, ilgili `PoolState.protocol_fees_*` / `fund_fees_*` alanlarını sıfırlar.

## `InitializeReward`

Bir havuza yeni bir ödül akışı ekler. Aynı anda en fazla 3 akış aktif olabilir.

**Argümanlar**

```
open_time:     u64
end_time:      u64
emissions_per_second_x64: u128   // Q64.64
```

**Hesaplar**

| # | Ad                       | W | S |                                                       |
| - | ------------------------ | - | - | ----------------------------------------------------- |
| 1 | `reward_funder`          | W | S |                                                       |
| 2 | `funder_token_account`   | W |   |                                                       |
| 3 | `amm_config`             |   |   |                                                       |
| 4 | `pool_state`             | W |   |                                                       |
| 5 | `operation_state`        |   |   | Ödül oluşturmayı kısıtlayan CLMM işlem durumu PDA'sı. |
| 6 | `reward_token_mint`      |   |   |                                                       |
| 7 | `reward_token_vault`     | W |   | Burada `init`.                                        |
| 8 | `reward_token_program`   |   |   |                                                       |
| 9 | `system_program`, `rent` |   |   |                                                       |

**Ön koşullar**

* Havuzda şu anda 3'ten az aktif akış var.
* Fon sağlayıcı, bu talimatın bir parçası olarak vault'a `total_emission = emissions_per_second × (end_time − open_time)` değerinde ödül tokeni yatırır.
* `operation_state` uyarınca beyaz listedeki ödül mint'i.

## `SetRewardParams`

Mevcut bir ödül akışını uzatır, doldurur veya emisyon oranını değiştirir. Genellikle bir havuz oluşturucu veya Raydium çoklu imzası tarafından çağrılır. Kısıtlamalar zincir üzerindedir: genellikle `end_time`'ı uzatabilir veya emisyonları artırabilirsiniz, geriye dönük olarak azaltamazsınız. `operation_state`'in sahip listesini kontrol edin.

## `UpdateRewardInfos`

Saf muhasebe — `reward_growth_global_x64`'ü `emissions_per_second × Δt / liquidity` çarparak şimdiki zamana dengeler. Her likiditeye dokunan talimat tarafından dahili olarak çağrılır. Harici aktörlerin (kullanıcı arayüzleri, krank'lar) bazen tetiklemek istediği için bağımsız bir talimat olarak sunulur.

## `CollectReward`

Pozisyon sahibi borçlu ödül tokenlarını talep eder.

**Hesaplar**

| # | Ad                        | W | S |                                         |
| - | ------------------------- | - | - | --------------------------------------- |
| 1 | `nft_owner`               |   | S |                                         |
| 2 | `nft_account`             |   |   | Pozisyon NFT'sini tutan sahibin ATA'sı. |
| 3 | `personal_position`       | W |   |                                         |
| 4 | `pool_state`              | W |   |                                         |
| 5 | `protocol_position`       |   |   |                                         |
| 6 | `reward_token_vault`      | W |   |                                         |
| 7 | `recipient_token_account` | W |   |                                         |
| 8 | `token_program`           |   |   |                                         |
| 9 | `token_program_2022`      |   |   |                                         |

**Etki**

* Ödül büyümesini dengeler (ücretlerle aynı model).
* Borçlu miktarı alıcı ATA'sına aktarır, `reward_amount_owed[i]`'yi sıfırlar.

## Durum değişikliği matrisi

| Talimat                  | `pool.liquidity`   | `pool.fee_growth_global` | `pool.reward_growth_global` | `personal_position.liquidity` | Tick dizisi                                               |
| ------------------------ | ------------------ | ------------------------ | --------------------------- | ----------------------------- | --------------------------------------------------------- |
| `CreatePool`             | 0                  | 0                        | —                           | —                             | —                                                         |
| `OpenPosition`           | aralık içindeyse + | —                        | —                           | yeni                          | liquidity\_gross/net ekle                                 |
| `IncreaseLiquidity`      | aralık içindeyse + | borçluyu dengele         | borçluyu dengele            | +                             | ayarla                                                    |
| `DecreaseLiquidity`      | aralık içindeyse − | borçluyu dengele         | borçluyu dengele            | −                             | ayarla                                                    |
| `ClosePosition`          | —                  | —                        | —                           | yok edildi                    | —                                                         |
| `SwapV2`                 | geçişlerde ±       | +                        | —                           | —                             | geçiş ve dışarıyı çevir; limit emir kohortlarını eşleştir |
| `OpenLimitOrder`         | —                  | —                        | —                           | —                             | hedef tick'te `orders_amount += amount`                   |
| `IncreaseLimitOrder`     | —                  | —                        | —                           | —                             | `orders_amount += amount`                                 |
| `DecreaseLimitOrder`     | —                  | —                        | —                           | —                             | `orders_amount -=`, kohortu kapatabilir                   |
| `SettleLimitOrder`       | —                  | —                        | —                           | —                             | — (tick'te salt okunur)                                   |
| `CloseLimitOrder`        | —                  | —                        | —                           | —                             | —                                                         |
| `CreateCustomizablePool` | 0                  | 0                        | —                           | —                             | —                                                         |
| `UpdateRewardInfos`      | —                  | —                        | +                           | —                             | —                                                         |
| `CollectReward`          | —                  | —                        | borçluyu dengele            | —                             | —                                                         |

## Sonraki adımlar

* [`products/clmm/code-demos`](/tr/products/clmm/code-demos) — çalıştırılabilir TypeScript örnekleri.
* [`products/clmm/fees`](/tr/products/clmm/fees) — ücret ve ödül tahakkuku hakkında ayrıntılar.
* [`reference/error-codes`](/tr/reference/error-codes) — eksiksiz CLMM Anchor hata tablosu.

Kaynaklar:

* [`raydium-io/raydium-clmm` — `programs/amm/src/instructions`](https://github.com/raydium-io/raydium-clmm)
* Raydium SDK v2 — `@raydium-io/raydium-sdk-v2`
