Langsung ke konten utama

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.

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 mendeskripsikan instruksi, tata letak akun, enum error, dan skema struct mereka. IDL adalah sumber kebenaran untuk pembuatan kode klien — TS SDK, crate Rust CPI, dan klien pihak ketiga semuanya dihasilkan dari (atau ditulis tangan terhadap) IDL. Raydium menerbitkan IDL untuk CPMM, CLMM, dan LaunchLab. AMM v4, Stable AMM, dan Farm (v3 / v5 / v6) mendahului Anchor atau dengan cara lain tidak didistribusikan oleh Anchor — struktur akun mereka dipertahankan secara manual di SDK.

Tempat menemukannya

IDL berada di repositori khusus:
https://github.com/raydium-io/raydium-idl
File yang tepat:
ProgramFile IDL
CPMMraydium_cpmm/raydium_cp_swap.json
CLMMraydium_clmm/raydium_clmm.json
LaunchLabraydium_launchpad/raydium_launchpad.json
AMM v4tidak ada IDL resmi — lihat raydium-sdk-V2/src/raydium/liquidity/layout.ts untuk tata letak yang ditulis tangan
Stable AMMtidak ada IDL resmi — tata letak ada di SDK
Farmtidak ada IDL resmi — tata letak ada di SDK
File IDL diversi dalam riwayat git repositori; pin ke commit tertentu jika Anda memerlukan reproducibility byte-untuk-byte. IDL juga dapat ditarik langsung dari program yang diterapkan melalui fitur on-chain IDL Anchor (jika penerbit program memilih):
anchor idl fetch <PROGRAM_ID> --provider.cluster mainnet
CPMM, CLMM, dan LaunchLab semuanya memiliki IDL on-chain. AMM v4, Stable AMM, dan Farm tidak (program pre-Anchor).

Membuat ulang klien TypeScript

Codegen Anchor menghasilkan klien yang diketik dari IDL:
# Menggunakan CLI anchor
anchor build
anchor idl parse \
  --file target/idl/cpmm.json \
  --out target/types/cpmm.ts

# Atau dengan pembantu TS `@coral-xyz/anchor` saat runtime:
import { Program, AnchorProvider } from "@coral-xyz/anchor";
// Tarik IDL langsung dari repositori raydium-idl (atau vendor ke proyek Anda).
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);

// Pembuat metode yang diketik dihasilkan secara otomatis:
await program.methods
  .swapBaseInput(new BN(amountIn), new BN(minAmountOut))
  .accounts({ ... })
  .rpc();
Sebagian besar integrator tidak melakukan ini — mereka menggunakan pembantu tingkat lebih tinggi raydium.cpmm.swap(...) yang membungkus metode Anchor ditambah semua bookkeeping (pembuatan ATA, penyesuaian biaya transfer, anggaran komputasi, Token-2022 program routing). 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:
# 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"] }
Fitur cpi mengekspos struct akun cpi::accounts::<Ix> dan invoker cpi::<ix>() — pembungkus CPI yang siap digunakan. Lihat sdk-api/rust-cpi untuk pola penggunaan. Jika Anda lebih suka membuat binding segar:
# Dari IDL, menggunakan anchor-client
anchor idl parse \
  --file raydium_cpmm/raydium_cp_swap.json \
  --out src/generated/cpmm_bindings.rs

Membuat ulang klien Python

Tidak ada SDK Python Raydium resmi. Generator pihak ketiga meliputi:
  • anchorpy — port Python dari @coral-xyz/anchor. Menghasilkan pembuat metode yang diketik dari IDL.
  • solders — primitif Solana tingkat rendah (transaksi, keypair, pubkey) dalam binding Rust; digunakan di bawah anchorpy.
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={...}))
Lihat sdk-api/python-integration untuk panduan yang lebih lengkap.

Kebijakan perubahan IDL

Raydium mengikuti aturan ini untuk stabilitas IDL:
  1. Diskriminator instruksi tidak pernah berubah. Menambahkan instruksi baru memperluas enum di akhir; diskriminator yang ada tetap stabil.
  2. Tata letak struct akun berkembang hanya secara aditif. Field baru masuk di akhir, didahului oleh kenaikan ukuran dalam skema on-chain. Field yang ada menyimpan offset mereka.
  3. Kode enum error hanya append. Kode error yang ada selalu berarti hal yang sama.
  4. Perubahan breaking dikirim dalam program baru. Ketika redesain diperlukan, tim menerapkan ID program baru (misalnya CPMM sebagai program segar daripada upgrade AMM v4). Pool lama terus berjalan di program lama; pool baru masuk ke pool baru.
Kebijakan ini membuat klien yang dibuat ulang backward-compatible: klien yang dibuat terhadap IDL berusia dua versi lalu akan tetap mendekode state saat ini dengan benar (ia melihat byte trailing tambahan sebagai padding).

Yang harus dilakukan ketika IDL berubah

  1. Update SDK. npm update @raydium-io/raydium-sdk-v2.
  2. Buat ulang kode klien Anda jika Anda menggunakan Anchor codegen secara langsung.
  3. Diff tata letak akun. Field trailing tata letak baru adalah satu-satunya hal yang belum dilihat kode Anda; konfirmasi apakah Anda membutuhkannya.
  4. Jangan asumsikan diskriminator instruksi lama tidak valid. Menurut aturan 1, mereka masih bekerja.
  5. Jalankan kembali pengujian integrasi terhadap devnet sebelum menerapkan ke mainnet.

Troubleshooting IDL

Kesalahan “Invalid discriminator”

Biasanya berarti klien yang dibangun terhadap versi N dari IDL mencoba memanggil instruksi yang hanya ada dalam versi program pre-deploy. Tarik ulang IDL dari program live:
anchor idl fetch <PROGRAM_ID>

Kegagalan decode akun

Jika program.account.<Name>.fetch(pubkey) melempar “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 memiliki name yang diuraikan sebagai pengidentifikasi valid. Instruksi Raydium semuanya memenuhi ini, tetapi jika Anda melihat ketidaksesuaian, periksa apakah file IDL berasal dari rilis SDK saat ini.

Petunjuk

Sumber: