Skip to main content
Halaman ini diterjemahkan secara otomatis oleh AI. Versi bahasa Inggris adalah acuan resmi.Lihat versi bahasa Inggris →
Sejak upgrade program 2026-07, ketergantungan OpenBook / Serum AMM v4 telah dihapus. Instruksi v1 SwapBaseIn / SwapBaseOut, Deposit, dan Withdraw yang lama mempertahankan tata letak akun lama untuk kompatibilitas mundur: akun pasar masih diterima di posisi lama mereka, tetapi mereka tidak lagi divalidasi atau digunakan (tidak ada CPI yang dikeluarkan). Integrasi baru harus menggunakan titik masuk swap V2, yang menghilangkan akun pasar sepenuhnya. Beberapa instruksi telah dihapus dan sekarang kembali — lihat entri changelog. Daftar akun di bawah menggunakan nama bidang dari Raydium SDK; IDL yang mendasar kadang-kadang menggunakan awalan serum_*.Upgrade program 2026-09 menambahkan satu instruksi admin, WithdrawExcessLamports (tag 18), dan menghapus rent sysvar dari CreateConfigAccount. Semua yang dipanggil trader atau LP tidak berubah. Lihat entri changelog 2026-09-09.

Inventaris instruksi

SDK mengekspos builder hanya untuk instruksi yang menghadap pengguna. Instruksi pemeliharaan biasanya dipanggil oleh keeper Raydium. Dihapus / tidak lagi dapat dipanggil (builder klien mereka dihapus): Initialize (tag 0, gunakan Initialize2), MonitorStep (2), MigrateToOpenBook (5), WithdrawSrm (8), PreInitialize (10, gunakan Initialize2), SimulateInfo (12), AdminCancelOrders (13). Transaksi yang membawa salah satu tag ini gagal; program tidak pernah mengeksekusi instruksi. Perlakukan ketujuh sebagai hilang daripada sebagai jalur kesalahan untuk ditangani.

Initialize2

Bootstrap pool AMM v4 baru yang terikat ke pasar OpenBook yang ada. Argumen
Akun (dapat ditulis W, penandatangan S)
Dua tata letak yang diterima. Daftar 19-akun di atas adalah yang direkomendasikan. Untuk kompatibilitas mundur program juga membaca tata letak warisan 21-akun, yang menyisipkan amm_open_orders yang diabaikan pada posisi 7 dan market_program yang diabaikan pada posisi 16 — inilah yang masih dipancarkan oleh instruction builder initialize2 di dalam repo. Panjang lain apa pun akan diurai secara posisional terhadap tata letak warisan dan akan gagal.
Kondisi pasca
  • LP yang di-mint ke kreator = sqrt(init_coin_amount × init_pc_amount) − 10^coin_mint.decimals. Desimal LP sama dengan coin_mint.decimals, sehingga jumlah yang dikurangi tepat satu token LP utuh; jumlah itu tidak pernah di-mint dan permanen berada di luar sirkulasi. Jika sqrt(...) berada di bawah nilai itu, instruksi dibatalkan dengan InitLpAmountTooLess.
  • AmmInfo.lp_amount menyimpan sqrt(...) penuh, bukan jumlah yang di-mint — sehingga lp_mint.supply permanen lebih rendah satu token LP utuh dibanding amm.lp_amount. Semua matematika pro-rata memakai amm.lp_amount.
  • Tidak ada pesanan OpenBook yang diposting (grid order-book telah dihapus). AmmInfo.market mencatat akun yang dilewatkan pada slot 15, tetapi AmmInfo.open_orders dan AmmInfo.market_program keduanya ditulis sebagai Pubkey::default(), dan coin_lot_size / pc_lot_size / min_size diinisialisasi ke 0. Pada tata letak warisan 21-akun, akun tambahan amm_open_orders dan market_program dibaca lalu dibuang.
Kesalahan umum — InvalidCoinMint (mint coin dan pc identik), InvalidConfigAccount (PDA amm_config salah), InvalidFee (tujuan biaya pembuatan pool salah), InvalidProgramAddress (amm_authority salah atau nonce salah), RepeatCreateAmm (pool sudah ada untuk pasar ini), InitLpAmountTooLess, InvalidSupply (salah satu jumlah init adalah 0, atau LP mint sudah memiliki supply), AlreadyInUse.

Deposit

Tambah likuiditas. Argumen
Akun (ringkas)
Jumlah akun yang diterima adalah 11, 14 atau 15 — tidak ada yang lain. Tata letak warisan memiliki 14 akun (atau 15 dengan satu akun tambahan yang diabaikan di akhir): daftar yang sama dengan amm_open_orders yang diabaikan pada posisi 4, market yang diabaikan pada posisi 9, dan market_event_queue yang diabaikan ditambahkan pada posisi 14. Jumlah lain apa pun dibatalkan dengan WrongAccountsNumber.
Matematika — pro-rata standar. Menggunakan cadangan efektif pool (vault + on-book), SDK menghitung pasangan coin/pc yang menghasilkan jumlah LP yang diberikan dan memeriksanya terhadap max_*. Kembali dengan ExceededSlippage jika salah satu sisi melebihi batas.

Withdraw

Bakar LP, terima kedua sisi. Argumen
Akun — tata letak 11-akun yang direkomendasikan
Withdraw bukan Deposit yang dibalik. Jumlah akun yang diterima adalah 11, atau 20 hingga 23. Tata letak warisan 20-akun menempatkan akun LP pengguna sebelum dua ATA penerima dan menyelipkan lima akun pasar yang diabaikan: token_program, amm(W), amm_authority, amm_open_orders(W), amm_target_orders(W), lp_mint(W), pool_coin_token_account(W), pool_pc_token_account(W), market_program, market(W), market_coin_vault(W), market_pc_vault(W), market_vault_signer, user_lp_token_account(W), user_coin_token_account(W), user_pc_token_account(W), user_owner(S), market_event_queue(W), market_bids(W), market_asks(W). Bentuk 22- dan 23-akun menyisipkan dua akun padding yang diabaikan setelah posisi 8. Jumlah lain apa pun dibatalkan dengan WrongAccountsNumber.
Tidak ada lagi langkah settle-from-OpenBook — matematika pro-rata menggunakan saldo vault secara langsung.

SwapBaseIn

Swap input-tepat. Selalu swap jalur AMM (tidak merutekan melalui pencocokan OpenBook).
Gunakan varian V2 untuk kode baru. Karena ketergantungan OpenBook AMM v4 telah dihapus, titik masuk V1 (SwapBaseIn, SwapBaseOut) masih mengharapkan daftar akun lengkap 17 (atau 18 dengan akun target-orders opsional), tetapi akun OpenBook/pasar sekarang diterima secara posisional dan diabaikan — mereka tidak divalidasi dan tidak ada CPI yang dikeluarkan. Melewatkan jumlah akun yang salah masih kembali dengan WrongAccountsNumber, tetapi isi akun pasar tidak lagi diperiksa. Integrasi baru harus menggunakan SwapBaseInV2 / SwapBaseOutV2, yang mengambil daftar akun yang jauh lebih kecil dan mewakili jalur eksekusi kanonik hari ini. Bentuk V1 didokumentasikan di sini untuk kelengkapan dan untuk membaca transaksi on-chain yang ada.
Argumen
Akun (ringkas) Matematika — lihat products/amm-v4/math. Kondisi pra
  • AmmStatus::from_u64(amm.status).swap_permission() bernilai true — artinya, status adalah 1 (Initialized), 6 (SwapOnly) atau 7 (WaitingTrade). status adalah nilai enum, bukan bitmask; lihat products/amm-v4/accounts.
  • amm.state_data.pool_open_time <= now.
  • amount_in > 0.
  • user_source_token_account memegang setidaknya amount_in.
Kondisi pasca
  • Pengguna kehilangan amount_in dari token sumber, mendapatkan amount_out ≥ minimum_amount_out dari token tujuan.
  • Biaya swap tetap berada di vault, menaikkan invariant k. Penghitung need_take_pnl_* tidak disentuh oleh swap — PnL protokol dihitung ulang dari delta k pada Deposit, Withdraw atau WithdrawPnl berikutnya (Processor::calc_take_pnl).
  • Catatan: penghitung analitik state_data.swap_*_in_amount / swap_*_out_amount tidak lagi diperbarui — nilainya dibekukan. Gunakan log perdagangan untuk analitik volume.
Kesalahan umum — ExceededSlippage, InvalidInput, InvalidStatus, NotAllowed (mint coin/pc identik).

SwapBaseOut

Output-tepat, kebalikan dari SwapBaseIn. Akun yang sama. Argumen

SwapBaseInV2 / SwapBaseOutV2

Varian titik masuk swap (tag 16 / 17) yang melewatkan akun OpenBook sepenuhnya. Matematika identik dengan jalur V1, tetapi daftar akun menyusut menjadi hanya sisi AMM dan pengguna — 8 akun, dan amm_open_orders tidak dilewatkan: Cadangan pool sekarang adalah saldo vault (minus PnL yang tertunda), jadi matematika quote sederhana dan identik dengan jalur v1. Gunakan V2 untuk menghemat compute dan menghindari melewatkan akun pasar (sekarang diabaikan). Router Raydium selalu menggunakan bentuk V2 saat merutekan melalui AMM v4. Argumen sama dengan bentuk V1 (amount_in / minimum_amount_out untuk SwapBaseInV2; max_amount_in / amount_out untuk SwapBaseOutV2).

MonitorStep dan instruksi dihapus lainnya

Dihapus — tidak lagi dapat dipanggil. Sejak upgrade 2026-07, MonitorStep (tag 2) telah dihapus dari program dan sekarang kembali (unimplemented!) jika dipanggil. Builder klien juga dihapus. Hal yang sama berlaku untuk MigrateToOpenBook (5), WithdrawSrm (8), SimulateInfo (12), AdminCancelOrders (13), dan titik masuk pembuatan pool lama Initialize (0) / PreInitialize (10) — gunakan Initialize2 sebagai gantinya.
Secara historis, MonitorStep menggerakkan interaksi OpenBook pool: ia menyelesaikan pesanan yang diisi (memindahkan hasil dari vault pasar ke vault pool melalui CPI OpenBook), membatalkan pesanan basi, dan memposting pesanan baru untuk menutup celah antara target_orders dan amm_open_orders. Dengan ketergantungan OpenBook dihapus, tidak ada yang perlu dikgerakkan dan instruksi hilang. Setiap keeper atau integrasi yang masih memanggilnya harus menghapus panggilan.

WithdrawPnl / TakePnl

Kumpulan admin biaya protokol yang terkumpul. Argumen
  • WithdrawPnl tidak mengambil argumen; ia membaca need_take_pnl_* dan memindahkan jumlah yang tepat.
Perubahan breaking (admin saja). Daftar akun turun dari 17 (+1 opsional) menjadi 10 — amm_open_orders dan keenam akun pasar dihapus — tanpa parsing kompatibilitas. Tata letak lama tidak selaras (lama #5 adalah amm_open_orders, sekarang pool_coin_token_account) dan gagal dengan kesalahan seperti InvalidCoinVault. Alat admin harus diperbarui.
Akun (tata letak 10-akun baru) Efek
  • Mentransfer need_take_pnl_coin dari pool_coin_token_account ke pnl_coin_token_account.
  • Sama untuk pc.
  • Mengosongkan need_take_pnl_coin dan need_take_pnl_pc.
  • Perubahan logika: jika saldo vault tidak cukup untuk menutupi PnL yang terkumpul, instruksi mengembalikan TakePnlError secara langsung (tidak lagi memanipulasi status order-book).
Tidak ada perubahan pada cadangan karena PnL yang terkumpul sudah dikecualikan dari invarian.

SetParams

Perubahan parameter admin, dipanggil oleh multisig Raydium. Argumen adalah tag param: u8 + payload.
Perubahan breaking (admin saja). Daftar akun dikurangi menjadi hanya [amm (W), admin (S)] (otoritas, open-orders, target-orders, vault, dan semua akun pasar dihapus). Enum param dinomori ulang dan dipangkas: Status = 0, State = 1, Fees = 2 (sebelumnya 9), SetOpenTime = 3 (sebelumnya 11). Semua parameter grid order-book dan AmmOwner, LastOrderDistance, UpdateOpenOrder dihapus, dan struct SetParamsInstruction menghapus new_pubkey dan last_order_distance. Alat admin harus diperbarui.

CreateConfigAccount / UpdateConfigAccount

Manajemen admin PDA AmmConfig tingkat program (seed ["amm_config_account_seed"]). Akun ini menyimpan tepat tiga bidang bermakna — pnl_owner, cancel_owner dan create_pool_fee — ditambah dua wilayah padding cadangan; tidak ada flag pembuatan pool. UpdateConfigAccount menetapkan pnl_owner dengan param = 0, cancel_owner dengan param = 1, dan create_pool_fee dengan param = 2.
Berubah di 2026-09, dan kompatibel mundur. CreateConfigAccount tidak lagi membaca rent sysvar. Daftar akun sekarang 4 akun, turun dari 5:Program membaca parameter sewa dari Rent::get() alih-alih mendeserialisasi akun sysvar yang dilewatkan — apa yang membuat bump ketergantungan Solana 3.0 alami.Akun yang dihapus adalah terakhir dalam daftar, dan handler membaca akun secara posisional melalui next_account_info tanpa pemeriksaan panjang. Alat admin yang ada yang masih melewatkan daftar 5-akun lama karena itu terus bekerja: akun sewa trailing tidak pernah dibaca. Perbarui ketika nyaman, bukan mendesak. UpdateConfigAccount tidak berubah.
Initialize2 menyimpan rent sysvar di posisi 3, dan masih menggunakannya: program berhenti memanggil Rent::from_account_info padanya, tetapi masih diteruskan ke CPI spl_token::initialize_account dan initialize_mint yang membuat vault dan LP mint pool. Jangan hapus dari daftar akun.

WithdrawExcessLamports

Kumpulan admin lamport yang duduk di atas minimum bebas sewa pada akun yang dikendalikan program. Ditambahkan dalam upgrade 2026-09 untuk memulihkan over-funding yang SIMD-0437 rent reduction tinggalkan pada akun yang dibuat sebelum setiap langkah. Ini hanya memindahkan kelebihan. Saldo token, data akun, pemilik, dan status pool tidak tersentuh, dan instruksi adalah no-op pada akun yang sudah di minimum — jadi aman untuk menjalankan berulang kali dan lagi setelah setiap langkah rollout. Argumen — tidak ada. Payload adalah byte tag tunggal 18. Akun Bagaimana setiap akun sumber ditangani Program mengirim pada pemilik akun sumber: Kesalahan umum — InvalidSignAccount (penandatangan salah), InvalidSplTokenProgram (program salah di slot 3), InvalidProgramAddress (amm_authority salah), LamportsCalculateError (kode kustom 60; putaran wSOL tidak nol), dan InsufficientFunds dari jalur yang dikendalikan program ketika akun memegang kurang dari minimum sewa sendiri. Tidak ada builder SDK. @raydium-io/raydium-sdk-v2 tidak mengirimkan builder untuk instruksi ini, begitu juga repo raydium-sdk-V2-demo — ini adalah jalur admin. Enkode dengan tangan, cara yang dilakukan sweep sisi dompet di solana-fundamentals/rent-and-reclaimable-rent untuk instruksi program token.

Matriks perubahan status

Kolom OpenBook hilang — tidak ada instruksi yang menyentuh order book lagi.

Ke mana selanjutnya

Sumber: