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:
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):
TypeScript istemcisini yeniden oluşturma
Anchor’ın codegen’i IDL’den yazılı bir istemci üretir: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;anchorpyaltında kullanılır.
sdk-api/python-integration bölümüne bakın.
IDL değişiklik politikası
Raydium, IDL kararlılığı için şu kuralları izler:- 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.
- 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.
- Hata enum kodları yalnızca ekleme yöntemiyle yapılır. Mevcut bir hata kodu her zaman aynı şeyi ifade eder.
- 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.
IDL değiştiğinde ne yapılır
- SDK’yı güncelleyin.
npm update @raydium-io/raydium-sdk-v2. - İstemci kodunuzu yeniden oluşturun Anchor codegen’i doğrudan kullanıyorsanız.
- 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.
- Eski talimat ayırıcılarının geçersiz olduğunu varsaymayın. Kural 1’e göre, hala çalışırlar.
- 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 birname’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
sdk-api/rust-cpi— Rust CPI crate’lerini kullanma.sdk-api/python-integration—anchorpyaracılığıyla Python.sdk-api/typescript-sdk— daha yüksek seviyeli TS istemcisi.

