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

# Routing komutları

> Mainnet'te etkinleştirilen AMM Routing komutlarının referansı — tam giriş / tam çıkış takaları ve wSOL yardımcı programlarını kapsayan altı varyant.

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

## Komut özeti

| Etiket | Ayırt Edici                  | Tam   | Varyant  |
| ------ | ---------------------------- | ----- | -------- |
| 0      | `SwapBaseInWithUserAccount`  | Giriş | Eski     |
| 1      | `SwapBaseOutWithUserAccount` | Çıkış | Eski     |
| 5      | `CreateSyncNative`           | —     | Yardımcı |
| 6      | `CloseTokenAccount`          | —     | Yardımcı |
| 8      | `SwapBaseIn`                 | Giriş | Güncel   |
| 9      | `SwapBaseOut`                | Çıkış | Güncel   |

**Açıklamalar:**

* **Tam:** hangi tutarın çağıran tarafından sabitlendiğini gösterir (Giriş = tam giriş `amount_in`; Çıkış = tam çıkış `amount_out`).
* **Varyant:** Eski komutlar, rotada CLMM hopunun olmadığı durumlarda bile boş olmayan bir `limit_prices` deque'si gerektirir. Güncel komutlar (8 / 9) boş `limit_prices`'ı "kontrol yok" olarak işler; bu yeni kod için önerilen yoldur.

Tüm swap varyantları, ara tokenleri **kullanıcı kontrollü ATA'lar** üzerinden yönlendirir — kullanıcı giriş ATA'sına, her ara ATA'ya ve çıkış ATA'sına sahiptir. Yeni entegrasyonlar için, belirli bir nedeniniz olmadığı sürece **tag 8 (`SwapBaseIn`)** veya **tag 9 (`SwapBaseOut`)** kullanın.

## Güncel swap komutları (önerilen)

Bunlar yeni kodun kullanması gereken giriş noktalarıdır. Argüman yapısı Eski varyantlarla aynıdır ancak `limit_prices` boş olabilir.

### `SwapBaseIn` (tag 8)

Tam giriş çok-hop takas. Çağıran `amount_in`'i sabitler; router hop-by-hop yürütür ve son tutarın `minimum_amount_out`'a eşit veya üstünde olduğunu doğrular.

**Argümanlar**

```
amount_in:            u64
minimum_amount_out:   u64
limit_prices:         VecDeque<u128>  // isteğe bağlı; boş deque "hop başı CLMM kontrolü yok" anlamına gelir
```

**Hesaplar**

```
[
  <user_input_ata> W S,         // signer; bakiye >= amount_in
  <user_intermediate_ata_1> W,  // ara hop başı bir tane
  ... <user_intermediate_ata_N> W,
  <user_output_ata> W,
  <token_program>,

  <pool_program_hop_1>,         // hop 1'in hangi AMM ailesinde olduğunu belirtir
  <pool_state_hop_1> W,
  ... <hop 1 programı tarafından gerekli diğer hesaplar>,

  <pool_program_hop_2>,
  <pool_state_hop_2> W,
  ... <hop 2 hesapları>,

  ... [her hop için tekrarla]
]
```

Hop başı tam hesap listesi, temel AMM programına (AMM v4 / CPMM / CLMM / Stable) bağlıdır. Router her birine sırayla CPI yapar ve program ID'nin desteklenen dört programdan biriyle eşleştiğini doğrular.

**Ön koşullar**

* Çağıran `user_input_ata` ile imzalar.
* `user_input_ata.amount >= amount_in`.
* Her ara kullanıcı ATA'sı vardır ve çağıran tarafından sahiplenilir.
* Herhangi bir hop CLMM ise ve fiyat sınırlaması istiyorsanız, her CLMM hop başı bir `limit_prices` girişi sağlayın.

**Son koşullar**

* `user_input_ata` bakiyesi `amount_in` kadar azalır.
* `user_output_ata` bakiyesi ≥ `minimum_amount_out` kadar artar.
* Her ara ATA, net olarak sıfır değişiklik ile kalır (rota bir önceki hop'tan ürettiği her şeyi tüketir).

**Yaygın hatalar**

* `ExceededSlippage` — son çıkış \< `minimum_amount_out`.
* `InvalidInput` — boş rota, hatalı biçimlendirilmiş hesaplar veya desteklenmeyen `pool_program`.
* `SqrtPriceX64` — bir CLMM hop'unun fiyatı sağlanan `limit_prices` sınırı dışında hareket etti (sadece `limit_prices` boş olmadığında).

***

### `SwapBaseOut` (tag 9)

Tam çıkış çok-hop takas. Çağıran `amount_out`'u sabitler; router gerçek girdinin `maximum_amount_in`'i aşmadığını doğrular.

**Argümanlar**

```
maximum_amount_in:   u64
amount_out:          u64
limit_prices:        VecDeque<u128>  // isteğe bağlı; boş deque "hop başı CLMM kontrolü yok" anlamına gelir
```

**Hesaplar** — tag 8 ile aynı yapı.

**Ön koşullar**

* Çağıran `user_input_ata` ile imzalar; bakiye `>= maximum_amount_in` (en kötü durum).
* Her ara ve çıkış ATA'sı vardır.

**Son koşullar**

* `user_input_ata` gerekli gerçek tutar kadar azalır (≤ `maximum_amount_in`).
* `user_output_ata` tam olarak `amount_out` kadar artar.

**Yaygın hatalar**

* `ExceededSlippage` — gerekli giriş `maximum_amount_in`'i aşar.
* `InvalidInput`, `SqrtPriceX64` — tag 8 için olduğu gibi.

***

## Eski swap komutları

Bu eski varyantlar canlı programda hala çağrılabilir ve tamlık için burada belgelenmiştir. Yeni kod için tag 8 / tag 9 tercih edin; aşağıdaki her iki Eski varyant da CLMM hopunun olmadığı durumlarda bile boş olmayan bir `limit_prices` deque'si gerektirir; bu da onları kullanımı zor hale getirir.

### `SwapBaseInWithUserAccount` (tag 0)

Tam giriş çok-hop takas, tag 8 ile birebir aynı şekilde ancak daha katı `limit_prices` gereksinimi ile.

**Argümanlar**

```
amount_in:           u64
minimum_amount_out:  u64
limit_prices:        VecDeque<u128>  // gerekli, boş olmayan
```

**Hesaplar** — `SwapBaseIn` (tag 8) ile aynı şekil. Tüm ara yuvalar çağıran tarafından sahiplenilen ATA'lar olmalıdır.

**Ön koşullar**

* Çağıran `user_input_ata` ile imzalar.
* `user_input_ata.amount >= amount_in`.
* Tüm ara kullanıcı ATA'ları vardır ve çağıran tarafından sahiplenilir.
* `limit_prices` boş değildir (her CLMM hop başı bir giriş; CLMM hopunun olmadığı durumlarda yer tutucu değerlerle doldur).

**Son koşullar**

* `user_input_ata` bakiyesi `amount_in` kadar azalır.
* `user_output_ata` bakiyesi ≥ `minimum_amount_out` kadar artar.

**Yaygın hatalar**

* `ExceededSlippage`.
* `InvalidInput` — boş `limit_prices` bu Eski varyantında reddedilir.
* `SqrtPriceX64`.

***

### `SwapBaseOutWithUserAccount` (tag 1)

Tam çıkış takas, `SwapBaseOut` (tag 9) için Eski karşılığı.

**Argümanlar**

```
maximum_amount_in:   u64
amount_out:          u64
limit_prices:        VecDeque<u128>  // gerekli, boş olmayan
```

**Hesaplar** — tag 0 / tag 9 ile aynı şekil.

**Ön koşullar**

* Çağıran `user_input_ata` ile imzalar.
* `user_input_ata.amount >= maximum_amount_in`.
* Tüm ara kullanıcı ATA'ları vardır ve çağıran tarafından sahiplenilir.
* `limit_prices` boş değildir.

**Son koşullar**

* `user_input_ata` gerekli gerçek tutar kadar azalır (≤ `maximum_amount_in`).
* `user_output_ata` tam olarak `amount_out` kadar artar.

**Yaygın hatalar**

* `ExceededSlippage`.
* `InvalidInput`.
* `SqrtPriceX64`.

***

## Yardımcı komutlar

### `CreateSyncNative` (tag 5)

Bir adımda wSOL ATA'sını oluştur (eksikse) ve senkronize et. Bir takas ile birlikte SOL sarmalanırken uygun.

**Argümanlar**

```
amount: u64    // Sarmalanacak SOL (lamports)
```

**Hesaplar**

```
[
  <user_wsol_ata> W,            // wSOL için ATA; eksikse oluşturulur
  <user_native_account> W S,    // signer; SOL buradan borçlandırılır
  <wsol_mint>,
  <system_program>,
  <token_program>,
  <associated_token_program>,
]
```

**Etki**

* `user_wsol_ata` henüz mevcut değilse oluşturur.
* `amount` lamports'u imzalayanın yerel SOL bakiyesinden ATA'ya aktarır.
* ATA üzerinde `SyncNative` çağırır böylece token bakiyesi yeni lamports'u yansıtır.

**Yaygın hatalar**

* `InvalidOwner` — `user_wsol_ata`'nın sahibi signer değil.

***

### `CloseTokenAccount` (tag 6)

Bir token hesabını kapat ve kirasını hedef cüzdana geri döndür. `CreateSyncNative` ile eşleşir: bir wSOL-leg takastan sonra, wSOL ATA'sını destekleyen kirayi geri almak için `CloseTokenAccount` çağırın.

**Argümanlar** — yok.

**Hesaplar**

```
[
  <token_account_to_close> W,
  <destination_for_rent> W,
  <owner> S,
  <token_program>,
]
```

**Etki**

* `token_account_to_close` kapatır.
* Kira-muaf lamport bakiyesini (\~mainnet'teki vanilya SPL Token hesabı için 0.00203928 SOL) `destination_for_rent`'e aktarır.
* Token hesabının sıfır token bakiyesi olması gerekir.

**Yaygın hatalar**

* `InvalidOwner` — çağıran ATA sahibi değil.
* Token hesabı bakiyesi sıfır değil.

***

## Sonraki adımlar

* [`products/routing/code-demos`](/tr/products/routing/code-demos) — bu komutların her birini TypeScript'te oluşturmak.
* [`products/routing/accounts`](/tr/products/routing/accounts) — AMM başı gönderme anahtarları ve hop başı hesap düzeni.
* [`reference/error-codes`](/tr/reference/error-codes) — tam `RouteError` listesi.
