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 yapı şemalarını açıklayan bir IDL (Interface Definition Language) dosyası yayınlar. IDL, istemci kodu oluşturma için gerçeğin kaynağıdır — TS SDK, Rust CPI crate’i ve üçüncü taraf istemcilerin tümü bundan oluşturulur (veya buna karşı 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 şekilde Anchor tarafından dağıtılmaz — hesap yapıları SDK’da el ile tutulur.

Nerede bulunurlar

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. IDL’ler ayrıca Anchor’ın zincir üstü IDL özelliği aracılığıyla dağıtılan programlardan doğrudan çekilebilir (program yayıncısı bunu seçtiyse):
CPMM, CLMM ve LaunchLab’ın tümü zincir üstü IDL’lere sahiptir. AMM v4, Stable AMM ve Farm’ın yoktur (Anchor öncesi programlar).

TypeScript istemcisini yeniden oluşturma

Anchor’ın codegen’i IDL’den yazılı bir istemci üretir:
Çoğu entegratör bunu yapmaz — bunun yerine Anchor yöntemlerini ve tüm muhasebe işlemlerini (ATA oluşturma, transfer ücreti ayarlaması, işlem 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’i)

Raydium, IDL’leri olan programlar için Anchor crate’leri yayınlar:
cpi özelliği cpi::accounts::<Ix> hesap yapı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. Yeni 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’ın TypeScript istemcisinin Python portu. IDL’lerden yazılı yöntem oluşturucuları oluşturur.
  • solders — düşük seviyeli Solana ilkelleri (işlemler, anahtar çiftleri, genel anahtarlar) 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 yapı düzenleri yalnızca katkı olarak gelişir. Yeni alanlar sonunda yer alır, zincir üstü şemada bir boyut artışından önce gelir. Mevcut alanlar ofsetlerini korur.
  3. Hata enum kodları yalnızca ekleme yöntemiyle yapılır. 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 kimliği dağıtır (örn. CPMM, AMM v4’ü yükseltmek yerine yeni bir program olarak). Eski havuzlar eski programda çalışmaya devam eder; yeni havuzlar yenisine gider.
Bu politika, yeniden oluşturulan istemcileri geriye dönük uyumlu hale getirir: iki sürüm eski bir IDL’ye karşı oluşturulan istemci, mevcut durumu doğru şekilde çözümleyebilir (fazladan sondaki baytları dolgu olarak görür).

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

”Geçersiz ayırıcı” hataları

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

Hesap çözme hataları

program.account.<Name>.fetch(pubkey) “Geçersiz hesap ayırıcısı” ile başarısız olursa, 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ı (PoolInfoLayout.decode(accountData)) kullanmaktır.

Oluşturulan istemcide eksik talimatlar

Anchor’ın 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 mevcut SDK sürümünden olup olmadığını kontrol edin.

İşaretçiler

Kaynaklar: