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

# Anchor IDL

> Her bir Raydium programının IDL'sini nerede bulacağınız, IDL'den TS / Rust / Python istemcilerini nasıl yeniden oluşturacağınız ve protokolün IDL değişim politikası.

<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 →](/sdk-api/anchor-idl)
</Info>

## IDL nedir

Solana üzerindeki Anchor programları, talimatlarını, hesap düzenlerini, hata enum'unu ve yapı şemalarını tanımlayan bir **IDL** (Interface Definition Language) dosyası yayımlar. IDL, istemci kodu oluşturmanın temel referansıdır — TS SDK, Rust CPI crate'i ve üçüncü taraf istemcilerinin tümü bu dosyadan oluşturulur (veya ona karşı yazılır).

Raydium, CPMM, CLMM ve LaunchLab için IDL'ler yayımlar. AMM v4, Stable AMM ve Farm (v3 / v5 / v6) Anchor öncesi çağdan kalma veya Anchor dağıtımı olmayan programlardır — hesap yapılarını SDK'de el ile yönetilir.

## Nerede bulunur

IDL'ler ayrılmış bir depo içinde yer alır:

```
https://github.com/raydium-io/raydium-idl
```

İlgili dosyalar:

| Program    | IDL dosyası                                                                                                                                                                                                |
| ---------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| CPMM       | [`raydium_cpmm/raydium_cp_swap.json`](https://github.com/raydium-io/raydium-idl/blob/master/raydium_cpmm/raydium_cp_swap.json)                                                                             |
| CLMM       | [`raydium_clmm/raydium_clmm.json`](https://github.com/raydium-io/raydium-idl/blob/master/raydium_clmm/raydium_clmm.json)                                                                                   |
| LaunchLab  | [`raydium_launchpad/raydium_launchpad.json`](https://github.com/raydium-io/raydium-idl/blob/master/raydium_launchpad/raydium_launchpad.json)                                                               |
| AMM v4     | resmi IDL yok — el ile yazılmış düzenler için [`raydium-sdk-V2/src/raydium/liquidity/layout.ts`](https://github.com/raydium-io/raydium-sdk-V2/blob/master/src/raydium/liquidity/layout.ts) dosyasına bakın |
| Stable AMM | resmi IDL yok — SDK'deki düzenler                                                                                                                                                                          |
| Farm       | resmi IDL yok — SDK'deki düzenler                                                                                                                                                                          |

IDL dosyaları deponun git geçmişinde sürümlendirilir; bayt-bayt uyumluluğa ihtiyacınız varsa belirli bir commit'e sabitleyin.

IDL'ler ayrıca dağıtılmış programlardan doğrudan Anchor'un **on-chain IDL** özelliği aracılığıyla çekilebilir (program yayıncısı bunu seçtiyse):

```bash theme={null}
anchor idl fetch <PROGRAM_ID> --provider.cluster mainnet
```

CPMM, CLMM ve LaunchLab'ın tümünün on-chain IDL'leri vardır. AMM v4, Stable AMM ve Farm yoktur (Anchor öncesi programlar).

## TypeScript istemcisini yeniden oluşturma

Anchor'un kod oluşturucusu IDL'den yazılı bir istemci üretir:

```bash theme={null}
# anchor CLI kullanarak
anchor build
anchor idl parse \
  --file target/idl/cpmm.json \
  --out target/types/cpmm.ts

# Veya `@coral-xyz/anchor` TS yardımcılarını çalışma zamanında kullanarak:
```

```ts theme={null}
import { Program, AnchorProvider } from "@coral-xyz/anchor";
// IDL'yi raydium-idl deposundan çekin (veya projenize dahil edin).
import cpmmIdl from "./idls/raydium_cp_swap.json";

const provider = new AnchorProvider(connection, wallet, {});
const program  = new Program(cpmmIdl as any, CPMM_PROGRAM_ID, provider);

// Yazılı yöntem oluşturucuları otomatik olarak oluşturulur:
await program.methods
  .swapBaseInput(new BN(amountIn), new BN(minAmountOut))
  .accounts({ ... })
  .rpc();
```

Çoğu entegratör bunu **yapmaz** — bunun yerine Anchor yöntemlerini ve tüm el işçiliğini (ATA oluşturma, transfer ücreti ayarlaması, işlem bütçesi, Token-2022 program yönlendirmesi) sarmalayan daha üst düzey `raydium.cpmm.swap(...)` yardımcısını kullanır. Yalnızca SDK'nin altındaki bir katmana ihtiyacınız olduğunda yeniden oluşturun.

## Rust istemcisini yeniden oluşturma (CPI crate'i)

Raydium, IDL'leri olan programlar için Anchor crate'leri yayımlar:

```toml theme={null}
# Cargo.toml
[dependencies]
raydium_cp_swap = { git = "https://github.com/raydium-io/raydium-cp-swap", branch = "master", features = ["cpi"] }
raydium_amm_v3 = { git = "https://github.com/raydium-io/raydium-clmm",    branch = "master", features = ["cpi"] }
```

`cpi` özelliği `cpi::accounts::<Ix>` hesap struct'larını ve `cpi::<ix>()` çağırıcılarını ortaya çıkarır — kullanıma hazır CPI sarmalayıcıları. Kullanım desenleri için [`sdk-api/rust-cpi`](/tr/sdk-api/rust-cpi) dosyasına bakın.

Taze bağlamalar oluşturmayı tercih ederseniz:

```bash theme={null}
# IDL'den, anchor-client kullanarak
anchor idl parse \
  --file raydium_cpmm/raydium_cp_swap.json \
  --out src/generated/cpmm_bindings.rs
```

## Python istemcisini yeniden oluşturma

Resmi Raydium Python SDK'sı yoktur. Üçüncü taraf oluşturucular şunları içerir:

* **`anchorpy`** — `@coral-xyz/anchor`'un Python portu. IDL'lerden yazılı yöntem oluşturucuları oluşturur.
* **`solders`** — düşük düzey Solana ilkelleri (işlemler, anahtar çiftleri, publike'ler) Rust bağlamalarında; `anchorpy` altında kullanılır.

```bash theme={null}
pip install anchorpy solders solana
```

```python theme={null}
from anchorpy import Program, Provider
from solana.rpc.async_api import AsyncClient
from pathlib import Path
import json

idl = json.loads(Path("cpmm.json").read_text())
provider = Provider(AsyncClient("https://api.mainnet-beta.solana.com"), wallet)
program  = Program(idl, CPMM_PROGRAM_ID, provider)

await program.rpc["swap_base_input"](amount_in, min_amount_out, ctx=Context(accounts={...}))
```

Daha kapsamlı bir anlatım için [`sdk-api/python-integration`](/tr/sdk-api/python-integration) dosyasına bakın.

## IDL değişim politikası

Raydium, IDL kararlılığı için şu kuralları izler:

1. **Talimat ayrımcıları asla değişmez.** Yeni talimatlar eklemek enum'u sonunda genişletir; mevcut ayrımcılar kararlı kalır.
2. **Hesap yapısı düzenleri yalnızca katkı esasıyla gelişir.** Yeni alanlar sona eklenir ve on-chain şemada boyut artışından önce gelir. Mevcut alanlar konumlarını korur.
3. **Hata enum kodları yalnızca ek şeklinde genişletilir.** Mevcut bir hata kodu her zaman aynı şeyi ifade eder.
4. **Kırıcı değişiklikler yeni programlarda sevk edilir.** Bir yeniden tasarım gerektiğinde, ekip yeni bir program ID'sini dağıtır (örneğin, CPMM, AMM v4'ü yükseltmek yerine taze bir program olarak). Eski havuzlar eski programa devam eder; yeni havuzlar yeni olana gider.

Bu politika, yeniden oluşturulan istemcileri geriye dönük olarak uyumlu kılar: iki sürüm eski bir IDL'ye karşı oluşturulan istemci, geçerli durumu doğru şekilde çözebilir (ekstra sondaki baytları dolgu olarak görür).

## IDL değiştiğinde yapılacaklar

1. **SDK'yi güncelleyin.** `npm update @raydium-io/raydium-sdk-v2`.
2. **İstemci kodunuzu yeniden oluşturun** Anchor kod oluşturucuyu doğrudan kullanıyorsanız.
3. **Hesap düzenini karşılaştırın.** Yeni düzenin sondaki alanları kodunuzun görmediği tek şeydir; bunlara ihtiyacınız olup olmadığını onaylayın.
4. **Eski talimat ayrımcılarının geçersiz olduğunu varsaymayın.** 1. kurala göre, hala çalışırlar.
5. **Ana ağa geçmeden önce devnet'te entegrasyon testlerini yeniden çalıştırın**.

## IDL sorun giderme

### "Invalid discriminator" hataları

Genellikle IDL'nin N sürümüne karşı oluşturulan bir istemcinin, yalnızca bir dağıtım öncesi programda var olan bir talimatı çağırmaya çalışması anlamına gelir. IDL'yi canlı programdan yeniden çekin:

```bash theme={null}
anchor idl fetch <PROGRAM_ID>
```

### Hesap çözülememe hataları

`program.account.<Name>.fetch(pubkey)` "Invalid account discriminator" ile başarısız olursa, hesap önceki program sürümü tarafından oluşturulmuş ve Anchor 8 baytlık ayrımcısını reddediyor. Çözüm, SDK'deki ham düzen ayrıştırıcısını (`PoolInfoLayout.decode(accountData)`) kullanmaktır; bu, Anchor ayrımcılarını uygulamaz.

### Oluşturulan istemcide eksik talimatlar

Anchor'un TS kod oluşturması yalnızca, IDL girişinin geçerli bir tanımlayıcı olarak ayrıştırılan bir `name`'e sahip talimatlar için yöntemler oluşturur. Raydium'un talimatlarının hepsi bunu karşılar, ancak bir uyuşmazlık görürseniz, IDL dosyasının mevcut SDK sürümünden olup olmadığını kontrol edin.

## İlgili sayfalar

* [`sdk-api/rust-cpi`](/tr/sdk-api/rust-cpi) — Rust CPI crate'lerini kullanma.
* [`sdk-api/python-integration`](/tr/sdk-api/python-integration) — `anchorpy` ile Python.
* [`sdk-api/typescript-sdk`](/tr/sdk-api/typescript-sdk) — daha üst düzey TS istemcisi.

Kaynaklar:

* [Raydium IDL deposu](https://github.com/raydium-io/raydium-idl)
* [Anchor IDL belirtimi](https://www.anchor-lang.com/docs/idl)
