Halaman ini diterjemahkan secara otomatis oleh AI. Versi bahasa Inggris adalah acuan resmi.Lihat versi bahasa Inggris →
CPI (“cross-program invocation”) adalah mekanisme yang memungkinkan satu program Solana memanggil program lain. Program Anchor milik Raydium dilengkapi dengan crate pembungkus CPI yang membuat situs pemanggilan terlihat seperti pemanggilan fungsi yang diketik — struct akun dengan nama bidang tervalidasi dan helper
cpi::<ix>(). Halaman ini mendokumentasikan pola umum; untuk potongan kode spesifik produk, lihat halaman code-demos dari bab produk masing-masing.Dependensi Cargo
cpi membuat crate dikompilasi hanya ke permukaan CPI (struct akun + invoker) daripada program lengkap, sehingga biner Anda tetap kecil.
Untuk contoh CPI yang berfungsi dan menghubungkan struct akun end-to-end, lihat raydium-io/raydium-cpi-example (mencakup AMM v4, CPMM, dan CLMM).
Konstruksi daftar akun
Setiap CPI Raydium memerlukan structAccounts dalam program pemanggil. Bidang cocok dengan urutan akun instruksi program 1-untuk-1, dengan validator tingkat bidang:
UncheckedAccount karena penerima (Raydium) memiliki validasi. Program pemanggil Anda hanya secara ketat memvalidasi akun yang Anda miliki — user ATA, PDA Anda sendiri. Komentar doc /// CHECK: menekan peringatan Anchor tentang kontrol yang hilang.
Membangun panggilan CPI
Anchor menghasilkan satu helper per instruksi:cpi::swap_base_input dihasilkan dari IDL; daftar argumennya mencerminkan daftar argumen instruksi Anchor.
Seed penandatangan (CPI bertanda PDA)
Ketika program Anda menandatangani CPI atas nama PDA (umum untuk vault, escrow, dll.), gunakanCpiContext::new_with_signer:
authority (atau peran penandatangan serupa), runtime Solana memeriksa bahwa PDA menandatangani melalui seed ini.
Akun yang tersisa
Beberapa instruksi Raydium mengambil remaining accounts — daftar panjang variabel yang ditambahkan setelah akun tetap. Contoh kanonis:- CLMM
SwapV2: menambahkan 1–8 akunTickArrayStateyang sesuai dengan array tick yang mungkin dilewati swap. - Farm v6
Deposit: menambahkan pasangan(reward_vault, user_reward_ata)untuk setiap aliran reward aktif.
.with_remaining_accounts(...):
Propagasi kesalahan
Program Raydium mengembalikan enum kesalahan mereka sendiri. Anchor membungkusnya; program pemanggil Anda melihatnya sebagaiErr(ProgramError::Custom(code)). Untuk menangani kesalahan spesifik:
sdk-api/anchor-idl). Anda dapat menguji terhadap kode spesifik dengan membandingkan nilai numerik.
Anggaran komputasi dalam CPI yang disusun
Setiap bingkai CPI memiliki overhead (~1.500 CU untuk panggilan itu sendiri), dan konsumsi CU penerima sendiri ditumpuk di atas milik Anda. Transaksi yang memanggil swap CPMM dari dalam program Anda menghabiskan:ComputeBudgetProgram::set_compute_unit_limit(...) eksplisit dalam transaksi — batas default 200k CU akan diam-diam habis.
AMM v4 — konstruksi Instruction manual
AMM v4 tidak memiliki crate Anchor. BangunInstruction dengan tangan:
products/amm-v4/code-demos untuk daftar akun lengkap.
Farm v6 — remaining accounts pasangan reward
Farm v6’sDeposit / Withdraw / Harvest menggunakan pola pasangan (reward_vault_i, user_reward_ata_i) dalam remaining accounts. Urutan yang tepat:
farm_state.reward_infos[i].reward_state.
Menguji alur CPI
Dev lokal memerlukan program Raydium tersedia di validator pengujian Anda. Pilihan:-
anchor testdengan program clone — dalamAnchor.toml:Ini menarik bytecode yang di-deploy dari mainnet ke validator lokal Anda. -
Devnet — Raydium menerapkan semua program ke devnet dengan ID program yang sama dengan mainnet. Jalankan
anchor test --provider.cluster devnetuntuk menekan kode aktif. -
Deploy lokal — clone repo Raydium dan
anchor deployke validator lokal. Menambah overhead siklus pengujian tetapi memungkinkan Anda memodifikasi penerima untuk debugging.
Penunjuk
products/cpmm/code-demos,products/clmm/code-demos,products/amm-v4/code-demos,products/farm-staking/code-demos— contoh CPI spesifik produk.sdk-api/anchor-idl— pengambilan IDL dan regenerasi klien.integration-guides/cpi-integration— pola tingkat lebih tinggi: escrow, vault, komposisi aggregator.

