Skip to main content
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 struct şemalarını açıklayan bir IDL (Interface Definition Language) dosyası yayınlar. IDL, istemci kodu oluşturmanın kaynağıdır — TS SDK, Rust CPI crate’i ve üçüncü taraf istemcilerin tümü bundan oluşturulur (veya buna karşı elle yazılır). Raydium, CPMM, CLMM ve LaunchLab için IDL’ler yayınlar. AMM v4, Stable AMM ve Farm (v3 / v5 / v6) Anchor’dan önceki dönemde oluşturulmuştur veya başka nedenlerle Anchor tarafından dağıtılmaz — hesap yapıları SDK’da elle tutulur.

Nerede bulunur

IDL’ler özel bir depoda bulunur:
Tam dosyalar: IDL dosyaları deponun git geçmişinde sürümlendirilir; bayt-bayt yeniden üretilebilirlik gerekiyorsa belirli bir commit’e sabitleyin. Bazı IDL’ler doğrudan mainnet’ten de çekilebilir:
Şu anda iki zincir üstü IDL mekanizması vardır ve Raydium’un programları bunlar arasında bölünmüştür — bu önemlidir çünkü belirli bir Anchor CLI sürümü yalnızca birini tanıyabilir:
CPMM’nin eski anchor:idl hesabı yoktur. IDL’si Program Metadata programına taşındı, bu nedenle anchor idl fetch CPMMoo8L3F4NbTegBCKVNunggL7H1ZpdTHKxQB5qKP1C yalnızca eski PDA’yı kontrol eden herhangi bir Anchor CLI’de başarısız olur. CLI’niz metadata programını destekleyene kadar SDK ile gönderilen IDL’yi kullanın veya yukarıdaki metadata hesabını okuyun.
Üç eski IDL hesabının tümü, programların BPF yükseltme yetkilisinden ayrı olan IDL yetkilisi 2XVnob28A5Qnpcy95UVeHWNT6G8Poy3tpA3AFyAMoZDt tarafından yazılabilir — bu nedenle bir IDL yeniden dağıtmadan yenilenebilir ve ayrıca bir yeniden dağıtımdan geride kalabilir. Zincir üstü IDL’yi bir kolaylık olarak değerlendirin, dağıtılan bytecode’un şeklinin kanıtı olarak değil.

TypeScript istemcisini yeniden oluşturma

Anchor’un codegen, IDL’den yazılı bir istemci oluşturur:
Çoğu entegratör bunu yapmaz — bunun yerine Anchor yöntemlerini ve tüm muhasebe işlemlerini (ATA oluşturma, transfer ücreti ayarlaması, compute bütçesi, Token-2022 program yönlendirmesi) sarmalayan daha yüksek seviyeli raydium.cpmm.swap(...) yardımcısını kullanırlar. Yalnızca SDK’nın altında bir katmana ihtiyacınız olduğunda yeniden oluşturun.

Rust istemcisini yeniden oluşturma (CPI crate)

Raydium, IDL’leri olan programlar için Anchor crate’leri yayınlar:
Kodda, bunlara lib adlarıyla başvurun: raydium_cp_swap ve raydium_clmm. Hiçbir yazımda raydium_amm_v3 adında bir crate yoktur. Şubelerin farklı olduğuna dikkat edin: raydium-cp-swap’ın master hala anchor-lang 0.32.1’i sabitlediğinden, Anchor-1.0 entegrasyonu chore/upgrade-anchor gerektirir; CLMM her iki şekilde de 0.32.1’dedir, bu nedenle ikisi bir crate paylaşamaz. 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 bölümüne bakın. Taze bağlamalar oluşturmayı tercih ederseniz:

Python istemcisini yeniden oluşturma

Resmi bir Raydium Python SDK’sı yoktur. Üçüncü taraf oluşturucular şunları içerir:
  • anchorpy — Anchor’un TypeScript istemcisinin Python portu. IDL’lerden yazılı yöntem oluşturucuları oluşturur.
  • solders — düşük seviyeli Solana ilkelleri (işlemler, keypair’ler, pubkey’ler) Rust bağlamalarında; anchorpy altında kullanılır.
Daha kapsamlı bir anlatım için sdk-api/python-integration bölümüne bakın.

IDL değişiklik politikası

Raydium, IDL kararlılığı için şu kuralları izler:
  1. Talimat ayırıcıları asla değişmez. Yeni talimatlar eklenmesi enum’u sonunda genişletir; mevcut ayırıcılar kararlı kalır.
  2. Hesap boyutları kararlıdır; yeni alanlar ayrılmış dolgudan çıkar. Her Raydium durum struct’ı, oluşturulduğunda boyutlandırılmış bir sondaki dolgu bölgesi taşır ve yeni bir alan eklenmek yerine bu dolgulardan oyulur — bu nedenle hesabın bayt uzunluğu ve tüm önceden var olan alanların ofsetleri sabit kalır. Sonuç olarak, daha önce dolgu olarak okuduğunuz baytlar anlamlı hale gelebilir ve bir alan dolguya geri çekilebilir (2026-08-31 sürümünde PlatformConfig.curve_params gibi). Yükseltmeden sonra struct tanımını yeniden okuyun; dolgunun sıfır kalacağını varsaymayın.
  3. Hata enum kodları yalnızca ekleme yönelidir. Mevcut bir hata kodu her zaman aynı şeyi ifade eder.
  4. Kırıcı değişiklikler yeni programlarda gönderilir. Bir yeniden tasarım gerektiğinde, ekip yeni bir program ID’si dağıtır (örn. CPMM, AMM v4’ü yükseltmek yerine taze bir program olarak). Eski havuzlar eski programda çalışmaya devam eder; yeni havuzlar yenisine gider.
Bu politika, yeniden oluşturulan istemcileri çoğunlukla geriye dönük uyumlu tutar: eski bir IDL’ye karşı oluşturulan istemci, bildiği alanları bildiği ofsetlerde çözmeye devam eder. Görmeyeceği şey, hala dolgu olarak değerlendirdiği şeyden oyulan bir alandır — ve nadir emeklilik durumunda, çözdüğü bir alan artık yazılmayabilir. “Ekstra sondaki baytlar” görmez: hesap uzunluğu değişmez.

IDL değiştiğinde ne yapılır

  1. SDK’yı güncelleyin. npm update @raydium-io/raydium-sdk-v2.
  2. İstemci kodunuzu yeniden oluşturun Anchor codegen’i 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ı doğrulayın.
  4. Eski talimat ayırıcılarının geçersiz olduğunu varsaymayın. Kural 1’e göre, hala çalışırlar.
  5. Entegrasyon testlerini yeniden çalıştırın mainnet’e geçmeden önce devnet’te.

IDL sorun giderme

”Invalid discriminator” hataları

Genellikle IDL’nin N sürümüne karşı oluşturulan bir istemcinin, yalnızca programın ön dağıtım sürümünde var olan bir talimata çağrı yapmaya çalıştığı anlamına gelir. IDL’yi canlı programdan yeniden çekin:
CPMM için bu işe yaramaz — yukarıdaki IDL konum tablosuna bakın; bunun yerine SDK’nın paketlenmiş IDL’sini çekin.

Hesap çözme hataları

program.account.<Name>.fetch(pubkey) “Invalid account discriminator” ile hata fırlatırsa, hesap önceki bir program sürümü tarafından oluşturulmuştur ve Anchor 8 baytlık ayırıcısını reddediyor. Çözüm, Anchor ayırıcılarını uygulamayan SDK’dan ham düzen ayrıştırıcısını kullanmaktır (PoolInfoLayout.decode(accountData)).

Oluşturulan istemcide eksik talimatlar

Anchor’un TS codegen’i, yalnızca IDL girişi 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 tümü bunu karşılar, ancak bir uyumsuzluk görürseniz, IDL dosyasının geçerli SDK sürümünden olup olmadığını kontrol edin.

İşaretçiler

Kaynaklar: