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 →
Halaman ini adalah referensi instruksi otoritatif untuk program AMM Routing. Untuk contoh kode, lihat products/routing/code-demos. Untuk penjelasan kesalahan, lihat reference/error-codes.

Ringkasan instruksi

TagDiscriminatorEksakVarian
0SwapBaseInWithUserAccountInputLegacy
1SwapBaseOutWithUserAccountOutputLegacy
5CreateSyncNativeUtilitas
6CloseTokenAccountUtilitas
8SwapBaseInInputSaat Ini
9SwapBaseOutOutputSaat Ini
Keterangan:
  • Eksak: jumlah mana yang ditetapkan oleh pemanggil (Input = exact-input amount_in; Output = exact-output amount_out).
  • Varian: Instruksi Legacy memerlukan limit_prices deque yang tidak kosong bahkan jika tidak ada hop CLMM dalam rute. Instruksi Saat Ini (8 / 9) memperlakukan limit_prices kosong sebagai “tidak ada pemeriksaan”, yang merupakan jalur yang disarankan untuk kode baru.
Semua varian swap merutekan token intermediate melalui ATA yang dikendalikan pengguna — pengguna memiliki ATA input, setiap ATA intermediate, dan ATA output. Untuk integrasi baru, gunakan tag 8 (SwapBaseIn) atau tag 9 (SwapBaseOut) kecuali Anda memiliki alasan khusus untuk memanggil varian Legacy.

Instruksi swap saat ini (direkomendasikan)

Ini adalah titik masuk yang harus digunakan oleh kode baru. Struktur argumen sama dengan varian Legacy tetapi limit_prices dapat kosong.

SwapBaseIn (tag 8)

Swap multi-hop dengan input-eksak. Pemanggil menetapkan amount_in; router menjalankan hop-by-hop dan menegaskan bahwa jumlah akhir mencapai atau melampaui minimum_amount_out. Argumen
amount_in:            u64
minimum_amount_out:   u64
limit_prices:         VecDeque<u128>  // opsional; deque kosong berarti tidak ada pemeriksaan harga CLMM per-hop
Akun
[
  <user_input_ata> W S,         // penandatangan; saldo >= amount_in
  <user_intermediate_ata_1> W,  // satu per hop intermediate
  ... <user_intermediate_ata_N> W,
  <user_output_ata> W,
  <token_program>,

  <pool_program_hop_1>,         // mengidentifikasi keluarga AMM mana hop 1 berada
  <pool_state_hop_1> W,
  ... <akun lain yang diperlukan oleh program hop 1>,

  <pool_program_hop_2>,
  <pool_state_hop_2> W,
  ... <akun hop 2>,

  ... [ulangi per hop]
]
Daftar akun yang tepat per hop tergantung pada program AMM yang mendasar (AMM v4 / CPMM / CLMM / Stable). Router CPI ke masing-masing secara bergantian dan memvalidasi bahwa ID program cocok dengan salah satu dari empat program yang didukung. Kondisi pra-eksekusi
  • Pemanggil menandatangani dengan user_input_ata.
  • user_input_ata.amount >= amount_in.
  • Setiap ATA pengguna intermediate ada dan dimiliki oleh pemanggil.
  • Jika ada hop yang merupakan CLMM dan Anda menginginkan penegakan terikat harga, berikan satu entri limit_prices per hop CLMM.
Kondisi pasca-eksekusi
  • Saldo user_input_ata berkurang sebesar amount_in.
  • Saldo user_output_ata meningkat sebesar ≥ minimum_amount_out.
  • Setiap ATA intermediate dibiarkan tanpa perubahan bersih (rute menggunakan apapun yang dihasilkannya satu hop sebelumnya).
Kesalahan umum
  • ExceededSlippage — output akhir < minimum_amount_out.
  • InvalidInput — rute kosong, akun tidak terformat, atau pool_program tidak didukung.
  • SqrtPriceX64 — harga hop CLMM bergerak di luar batas limit_prices yang disediakan (hanya ketika limit_prices tidak kosong).

SwapBaseOut (tag 9)

Swap multi-hop dengan output-eksak. Pemanggil menetapkan amount_out; router menegaskan bahwa input aktual tidak melebihi maximum_amount_in. Argumen
maximum_amount_in:   u64
amount_out:          u64
limit_prices:        VecDeque<u128>  // opsional; deque kosong berarti tidak ada pemeriksaan harga CLMM per-hop
Akun — struktur yang sama seperti tag 8. Kondisi pra-eksekusi
  • Pemanggil menandatangani dengan user_input_ata; saldo >= maximum_amount_in (kasus terburuk).
  • Setiap ATA intermediate dan output ada.
Kondisi pasca-eksekusi
  • user_input_ata berkurang sebesar jumlah aktual yang diperlukan (≤ maximum_amount_in).
  • user_output_ata meningkat sebesar amount_out secara tepat.
Kesalahan umum
  • ExceededSlippage — input yang diperlukan melebihi maximum_amount_in.
  • InvalidInput, SqrtPriceX64 — seperti untuk tag 8.

Instruksi swap legacy

Varian yang lebih lama ini masih dapat dipanggil pada program aktif dan didokumentasikan di sini untuk kelengkapan. Lebih suka tag 8 / tag 9 untuk kode baru; kedua varian Legacy di bawah memerlukan limit_prices deque yang tidak kosong bahkan ketika tidak ada hop CLMM yang terlibat, yang membuatnya sulit untuk digunakan.

SwapBaseInWithUserAccount (tag 0)

Swap multi-hop dengan input-eksak, identik dalam bentuk ke tag 8 tetapi dengan persyaratan limit_prices yang lebih ketat. Argumen
amount_in:           u64
minimum_amount_out:  u64
limit_prices:        VecDeque<u128>  // diperlukan, tidak kosong
Akun — bentuk yang sama seperti SwapBaseIn (tag 8). Semua slot intermediate harus berupa ATA yang dimiliki oleh pemanggil. Kondisi pra-eksekusi
  • Pemanggil menandatangani dengan user_input_ata.
  • user_input_ata.amount >= amount_in.
  • Semua ATA pengguna intermediate ada dan dimiliki oleh pemanggil.
  • limit_prices tidak kosong (satu entri per hop CLMM; isi dengan nilai placeholder jika tidak ada hop CLMM yang terlibat).
Kondisi pasca-eksekusi
  • Saldo user_input_ata berkurang sebesar amount_in.
  • Saldo user_output_ata meningkat sebesar ≥ minimum_amount_out.
Kesalahan umum
  • ExceededSlippage.
  • InvalidInputlimit_prices kosong ditolak pada varian Legacy ini.
  • SqrtPriceX64.

SwapBaseOutWithUserAccount (tag 1)

Swap dengan output-eksak, varian Legacy yang sesuai dengan SwapBaseOut (tag 9). Argumen
maximum_amount_in:   u64
amount_out:          u64
limit_prices:        VecDeque<u128>  // diperlukan, tidak kosong
Akun — bentuk yang sama seperti tag 0 / tag 9. Kondisi pra-eksekusi
  • Pemanggil menandatangani dengan user_input_ata.
  • user_input_ata.amount >= maximum_amount_in.
  • Semua ATA pengguna intermediate ada dan dimiliki oleh pemanggil.
  • limit_prices tidak kosong.
Kondisi pasca-eksekusi
  • user_input_ata berkurang sebesar jumlah aktual yang diperlukan (≤ maximum_amount_in).
  • user_output_ata meningkat sebesar amount_out secara tepat.
Kesalahan umum
  • ExceededSlippage.
  • InvalidInput.
  • SqrtPriceX64.

Instruksi utilitas

CreateSyncNative (tag 5)

Buat (jika tidak ada) dan sinkronkan ATA wSOL dalam satu langkah. Nyaman ketika membungkus SOL secara inline bersama swap. Argumen
amount: u64    // SOL yang akan dibungkus (lamports)
Akun
[
  <user_wsol_ata> W,            // ATA untuk wSOL; dibuat jika tidak ada
  <user_native_account> W S,    // penandatangan; SOL dikurangi dari sini
  <wsol_mint>,
  <system_program>,
  <token_program>,
  <associated_token_program>,
]
Efek
  • Membuat user_wsol_ata jika belum ada.
  • Mentransfer amount lamports dari saldo SOL asli penandatangan ke ATA.
  • Memanggil SyncNative pada ATA sehingga saldo tokennya mencerminkan lamports baru.
Kesalahan umum
  • InvalidOwner — pemilik user_wsol_ata bukan penandatangan.

CloseTokenAccount (tag 6)

Tutup akun token dan kembalikan rentnya ke dompet tujuan. Berpasangan dengan CreateSyncNative: setelah swap leg wSOL, panggil CloseTokenAccount untuk memulihkan rent yang mendukung ATA wSOL. Argumen — tidak ada. Akun
[
  <token_account_to_close> W,
  <destination_for_rent> W,
  <owner> S,
  <token_program>,
]
Efek
  • Menutup token_account_to_close.
  • Mentransfer saldo lamports yang bebas rent (~0.00203928 SOL di mainnet untuk akun SPL Token vanilla) ke destination_for_rent.
  • Akun token harus memiliki saldo token nol.
Kesalahan umum
  • InvalidOwner — pemanggil bukan pemilik ATA.
  • Saldo akun token tidak nol.

Ke mana selanjutnya