Ana içeriğe atla

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.

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 →

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:
ProgramIDL dosyası
CPMMraydium_cpmm/raydium_cp_swap.json
CLMMraydium_clmm/raydium_clmm.json
LaunchLabraydium_launchpad/raydium_launchpad.json
AMM v4resmi IDL yok — el ile yazılmış düzenler için raydium-sdk-V2/src/raydium/liquidity/layout.ts dosyasına bakın
Stable AMMresmi IDL yok — SDK’deki düzenler
Farmresmi 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):
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:
# 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:
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:
# 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 dosyasına bakın. Taze bağlamalar oluşturmayı tercih ederseniz:
# 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.
pip install anchorpy solders solana
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 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:
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

Kaynaklar: