Halaman ini diterjemahkan secara otomatis oleh AI. Versi bahasa Inggris adalah acuan resmi.Lihat versi bahasa Inggris →
Program Raydium yang lebih baru (CPMM, CLMM, Farm v6, LaunchLab) ditulis dalam Anchor — framework Rust yang dibangun di atas model program native Solana untuk menyediakan validasi akun, penanganan error, dan IDL (interface description). AMM v4 dan farm yang lebih lama mendahului Anchor. Memahami kedua paradigma membantu Anda membaca kode, membuat klien dari IDL, dan men-debug error yang tidak terduga.
Model deployment program
Setiap program Solana berada di sebuahPubkey. Bytecode program disimpan dalam akun executable yang dimiliki oleh BPF Upgradable Loader (BPFLoaderUpgradeab1e11111111111111111111111).
Deployment program terdiri dari tiga akun:
- Program account: akun metadata kecil di ID program. Pemilik: BPF Upgradable Loader.
- ProgramData account: menyimpan bytecode sebenarnya. Diturunkan sebagai
[program_id, "programdata"]. - Buffer account (sementara): menyimpan bytecode baru selama upgrade. Dibuang setelah upgrade.
security/admin-and-multisig.
Memverifikasi program yang di-deploy
Untuk memastikan apa yang ada di on-chain cocok dengan sumber yang disetujui audit:Anchor: framework di atas Solana
Program Solana mentah adalah fungsi Rust dengan signature ini:- Auto-generate discriminator 8-byte deterministik untuk setiap instruksi dan tipe akun.
- Validasi constraint akun (pemilik, seeds, writable, signer, mint-matches, token-program-matches) sebelum kode Anda berjalan.
- Generate IDL — file deskripsi interface yang digunakan klien untuk memanggil program.
- Dilengkapi dengan library klien-side Rust, TypeScript, dan Python.
Discriminator 8-byte
Setiap akun Anchor dan setiap instruksi Anchor dimulai dengan discriminator 8-byte — 8 byte pertama dari SHA-256 dari string tetap:getProgramAccounts yang menghitung semua akun dari tipe.
Error
Program Anchor mendefinisikan error melalui#[error_code]:
reference/error-codes.
IDL
File IDL (Interface Description Language) Anchor adalah deskripsi JSON dari program: instruksi, akun, tipe, error, dan event-nya. Ini setara dengan ABI Ethereum. Raydium menerbitkan IDL untuk semua program Anchor. Ambil langsung dari on-chain:src/raydium/*/idl/*.json.
Struktur IDL
Membuat klien dari IDL
CLIanchor Anchor membuat tipe TypeScript dan Rust:
Ketika IDL adalah teman Anda
Jika Anda ingin membangun integrasi kustom yang tidak melalui Raydium SDK:- Ambil IDL (langsung dari on-chain atau dari sumber SDK).
- Cari instruksi yang Anda inginkan (misalnya,
swap_base_input). - Bangun data instruksi: discriminator 8-byte + encoded args.
- Lewatkan akun dalam urutan yang ditentukan IDL.
sdk-api/anchor-idl untuk contoh yang dikerjakan.
Program pre-Anchor: AMM v4 dan Farm v3/v5
Program ini mendahului Anchor. Mereka menggunakan:- Manual instruction dispatch: tag
u8dalaminstruction_datadengan pernyataanmatch. - Manual account validation:
if accounts[0].owner != &expected_program { ... }. - Borsh-serialized instruction args: tidak ada discriminator, hanya
instruction_data[1..]. - Layout via
#[repr(C, packed)]: layout binary struct C.
Mekanik upgrade program
Hanyaupgrade_authority ProgramData yang dapat upgrade. Langkah-langkah:
- Kompilasi bytecode baru.
- Tuliskan ke akun buffer (
solana program write-buffer). - Kirimkan instruksi upgrade:
BpfLoaderUpgradeable::Upgrade { buffer, program, authority }. - Runtime secara atomik mengganti bytecode program dengan konten buffer.
security/admin-and-multisig.
Membuat program immutable
Upgrade authority dapat diatur keNone, di mana program menjadi permanen immutable. Raydium belum melakukan ini untuk produk apa pun — tim mempertahankan kemampuan untuk mendorong perbaikan keamanan. Trade-off: pengguna harus mempercayai proses multisig + timelock.
Program dan rent
Men-deploy program mengonsumsi lamport rent-exempt:- Program 50 KB: ~0.35 SOL dalam rent.
- Program 200 KB: ~1.4 SOL dalam rent.
solana program close) mengembalikan lamport. Program Raydium tetap aktif dan tidak dijadwalkan untuk ditutup.
Men-debug program Anchor
Output log
Macromsg! Anchor menulis ke log transaksi. Simulasikan transaksi untuk melihat log:
- Program invocation (
Program CPMMoo8... invoke [1]). - Panggilan
msg!dari kode program. - Konsumsi compute unit (
consumed 137842 of 400000 compute units). - Kesuksesan atau error program.
Kode error
Jika program Anchor melempar, log menunjukkan:SlippageExceeded). Cross-reference dengan array errors IDL.
Lihat reference/error-codes untuk tabel error lengkap Raydium.
Ketidakcocokan layout akun
Jika Anda melewatkan akun yang salah di slot yang salah, macro validasi akun Anchor mengembalikan error seperti:ErrorCode Anchor); error ≥6000 adalah kode kustom program.
Pointer
solana-fundamentals/account-model— cara program memiliki akun.solana-fundamentals/pdas-and-cpis— PDA seperti yang dideklarasikan Anchor.sdk-api/anchor-idl— mengambil dan menggunakan IDL Raydium.reference/program-addresses— ID program.reference/error-codes— referensi kode error.security/admin-and-multisig— kontrol upgrade-authority.
- Anchor docs.
- Solana program deployment.
- IDL Raydium (diterbitkan dalam SDK
src/raydium/*/idl/*.json).

