Halaman ini diterjemahkan secara otomatis oleh AI. Versi bahasa Inggris adalah acuan resmi.Lihat versi bahasa Inggris →
Apa itu IDL
Program Anchor di Solana menerbitkan file IDL (Interface Definition Language) yang menjelaskan instruksi, tata letak akun, enum kesalahan, dan skema struct mereka. IDL adalah sumber kebenaran untuk pembuatan kode klien — TS SDK, crate CPI Rust, dan klien pihak ketiga semuanya dihasilkan dari (atau ditulis tangan terhadap) IDL tersebut. Raydium menerbitkan IDL untuk CPMM, CLMM, dan LaunchLab. AMM v4, Stable AMM, dan Farm (v3 / v5 / v6) mendahului Anchor atau tidak didistribusikan melalui Anchor — struktur akun mereka dipertahankan secara manual di SDK.Tempat menemukannya
IDL berada di repositori khusus:
File IDL diversi dalam riwayat git repositori; pin ke commit tertentu jika Anda memerlukan reproduktibilitas byte-for-byte.
Beberapa IDL juga dapat ditarik langsung dari mainnet:
Ketiga akun IDL warisan dapat ditulis oleh otoritas IDL
2XVnob28A5Qnpcy95UVeHWNT6G8Poy3tpA3AFyAMoZDt, yang terpisah dari otoritas upgrade BPF program — jadi IDL dapat disegarkan tanpa redeploy, dan juga dapat tertinggal dari redeploy. Perlakukan IDL on-chain sebagai kenyamanan, bukan sebagai bukti bentuk bytecode yang diterapkan.
Membuat ulang klien TypeScript
Codegen Anchor menghasilkan klien yang diketik dari IDL:raydium.cpmm.swap(...) yang membungkus metode Anchor ditambah semua pembukuan (pembuatan ATA, penyesuaian biaya transfer, anggaran komputasi, perutean program Token-2022). Buat ulang hanya ketika Anda memerlukan lapisan di bawah SDK.
Membuat ulang klien Rust (crate CPI)
Raydium menerbitkan crate Anchor untuk program yang memiliki IDL:raydium_cp_swap dan raydium_clmm. Tidak ada crate bernama raydium_amm_v3 dengan ejaan apa pun. Perhatikan bahwa cabang berbeda: raydium-cp-swap master masih menyematkan anchor-lang 0.32.1, jadi integrasi Anchor-1.0 memerlukan chore/upgrade-anchor; CLMM berada di 0.32.1 bagaimanapun, itulah mengapa keduanya tidak dapat berbagi crate.
Fitur cpi mengekspos struct akun cpi::accounts::<Ix> dan invoker cpi::<ix>() — pembungkus CPI siap pakai. Lihat sdk-api/rust-cpi untuk pola penggunaan.
Jika Anda lebih suka membuat ulang binding segar:
Membuat ulang klien Python
Tidak ada SDK Python Raydium resmi. Generator pihak ketiga meliputi:anchorpy— port Python dari klien TypeScript Anchor. Menghasilkan pembuat metode yang diketik dari IDL.solders— primitif Solana tingkat rendah (transaksi, keypair, pubkey) dalam binding Rust; digunakan di bawahanchorpy.
sdk-api/python-integration untuk panduan yang lebih lengkap.
Kebijakan perubahan IDL
Raydium mengikuti aturan ini untuk stabilitas IDL:- Diskriminator instruksi tidak pernah berubah. Menambahkan instruksi baru memperluas enum di akhir; diskriminator yang ada tetap stabil.
- Ukuran akun stabil; bidang baru keluar dari padding yang dicadangkan. Setiap struct status Raydium membawa wilayah padding trailing yang diukur saat pembuatan, dan bidang baru diukir dari padding itu daripada ditambahkan — jadi panjang byte akun dan offset semua bidang yang sudah ada sebelumnya tetap tetap. Konsekuensinya adalah bahwa byte yang sebelumnya Anda baca sebagai padding dapat menjadi bermakna, dan bidang dapat ditarik kembali ke padding (seperti
PlatformConfig.curve_paramsdalam rilis 2026-08-31). Baca ulang definisi struct setelah upgrade; jangan asumsikan padding tetap nol. - Kode enum kesalahan hanya ditambahkan. Kode kesalahan yang ada selalu berarti hal yang sama.
- Perubahan yang merusak dikirim dalam program baru. Ketika desain ulang diperlukan, tim menerapkan ID program baru (misalnya CPMM sebagai program segar daripada upgrade AMM v4). Pool lama terus berjalan di program lama; pool baru pergi ke yang baru.
Apa yang harus dilakukan ketika IDL berubah
- Perbarui SDK.
npm update @raydium-io/raydium-sdk-v2. - Buat ulang kode klien Anda jika Anda menggunakan Anchor codegen secara langsung.
- Diff tata letak akun. Bidang trailing tata letak baru adalah satu-satunya hal yang belum dilihat kode Anda; konfirmasi apakah Anda membutuhkannya.
- Jangan asumsikan diskriminator instruksi lama tidak valid. Per aturan 1, mereka masih bekerja.
- Jalankan kembali tes integrasi terhadap devnet sebelum bergulir ke mainnet.
Pemecahan masalah IDL
Kesalahan “Invalid discriminator”
Biasanya berarti klien yang dibangun terhadap versi N dari IDL mencoba memanggil instruksi yang hanya ada dalam versi program pra-deploy. Tarik ulang IDL dari program langsung:Kegagalan dekode akun
Jikaprogram.account.<Name>.fetch(pubkey) melempar dengan “Invalid account discriminator”, akun dibuat oleh versi program sebelumnya dan Anchor menolak diskriminator 8-byte-nya. Perbaikannya adalah menggunakan parser tata letak mentah dari SDK (PoolInfoLayout.decode(accountData)) yang tidak memberlakukan diskriminator Anchor.
Instruksi yang hilang di klien yang dihasilkan
Codegen TS Anchor hanya menghasilkan metode untuk instruksi yang entri IDL-nya memilikiname yang diuraikan sebagai pengidentifikasi yang valid. Instruksi Raydium semuanya memenuhi ini, tetapi jika Anda melihat ketidaksesuaian, periksa apakah file IDL berasal dari rilis SDK saat ini.
Penunjuk
sdk-api/rust-cpi— menggunakan crate CPI Rust.sdk-api/python-integration— Python melaluianchorpy.sdk-api/typescript-sdk— klien TS tingkat lebih tinggi.

