Skip to main content
Halaman ini diterjemahkan secara otomatis oleh AI. Versi bahasa Inggris adalah acuan resmi.Lihat versi bahasa Inggris →

Dua konsep yang berbeda

Dampak harga dan slippage sering kali disamakan dalam UI tetapi mengacu pada hal yang berbeda.
  • Dampak harga adalah sifat deterministik dari perdagangan terhadap keadaan pool tertentu. Diberikan (Δin, reserves), dampak harga dapat sepenuhnya dihitung sebelum perdagangan diajukan.
  • Slippage adalah perbedaan yang terealisasi antara harga yang Anda harapkan pada saat quote dan harga yang Anda dapatkan pada saat eksekusi. Ini adalah fungsi dari latensi, transaksi bersamaan, dan urutan penyertaan blok — bukan dari matematika pool.
Kutipan 1% terhadap pool yang sebaliknya idle memiliki slippage 0% jika mendarat di blok berikutnya; 1% adalah dampak harga. Kutipan yang sama mendarat 0,2% lebih buruk jika perdagangan lain mengenai pool terlebih dahulu — 0,2% tambahan adalah slippage.

Definisi formal

Dampak harga

Untuk CPMM: impact ≈ 2 · Δin / reserve_in untuk perdagangan kecil. Untuk CLMM: tergantung berapa banyak tick yang dilintasi perdagangan; sering kali datar dalam rentang tick saat ini, melompat di setiap persilangan tick.

Slippage yang terealisasi

Slippage selalu non-negatif (atau nol), dengan asumsi kutipan jujur. Nilai negatif berarti Anda mendapatkan lebih dari yang dikutip — mungkin jika keadaan pool bergerak menguntungkan Anda antara quote dan eksekusi.

Menentukan ukuran minAmountOut dan maxAmountIn

Setiap swap Raydium memerlukan batas perlindungan slippage:
  • SwapBaseInput(amount_in, min_amount_out) — input-tepat, batas-bawah output.
  • SwapBaseOutput(max_amount_in, amount_out) — output-tepat, batas-atas input.
SDK menghitung ini per produk — ketiganya tidak berbagi satu tanda tangan:
Di ketiga modul, minAmountOut adalah amountOut × (1 − slippage) dan itulah yang masuk on-chain sebagai batas; priceImpact deterministik dari keadaan pool saja; fee adalah total yang dikenakan. Toleransi slippage adalah buffer di sekitar dampak harga, bukan dampak harga itu sendiri. Toleransi 0,5% berarti “terima paling banyak 0,5% lebih buruk dari kutipan saya” — terlepas dari apakah dampak harga adalah 0,01% (perdagangan kecil) atau 2% (perdagangan besar). Untuk perdagangan dengan dampak harga 2% dengan toleransi 0,5%, minAmountOut adalah 2,5% di bawah spot pra-perdagangan — pada dasarnya jumlah dampak dan toleransi.

Toleransi slippage yang direkomendasikan

Tidak ada satu angka yang benar; batas yang tepat tergantung pada:
  1. Stabilitas pasangan. Pool stablecoin-stablecoin dapat dengan aman menggunakan 0,1%. Pool pasangan meme yang volatil sering memerlukan 3–5% hanya untuk mendarat dengan andal.
  2. Ukuran perdagangan. Perdagangan yang lebih besar memiliki dampak harga yang lebih besar, jadi toleransi perlu diskalakan dengannya untuk menghindari pembalikan. Default auto-slippage SDK sekitar max(0.5%, 2 × price_impact) untuk alasan ini.
  3. Latensi penyertaan blok. Transaksi yang duduk di mempool selama beberapa blok terbuka terhadap lebih banyak perdagangan bersamaan. Bundle Jito dan biaya prioritas mengurangi ini.
Aturan praktis (default UI Raydium):

Perbedaan antar jenis AMM

CPMM

Dampak harga halus dan berkelanjutan (bentuk tertutup 2 · Δin / reserve_in). Toleransi slippage diskalakan secara linear dengan ukuran perdagangan.

AMM v4

Matematika kurva yang sama dengan CPMM. Sejak penghapusan OpenBook, “reserve efektif” hanyalah dua saldo vault:
  • Kutipan dari saldo vault mentah. Tidak ada komponen on-book untuk ditambahkan — Initialize2 menulis AmmInfo.open_orders = Pubkey::default() di setiap pool baru, dan tidak ada instruksi yang membaca akun OpenOrders.
  • Kurangi PnL protokol yang terkumpul (state_data.need_take_pnl_coin / need_take_pnl_pc) dari saldo vault untuk mendapatkan reserve yang sebenarnya digunakan invariant.
  • Tidak ada crank untuk pre-run: MonitorStep sekarang panik dengan unimplemented! dan tidak boleh dikirim.

CLMM

Dampak harga adalah piecewise. Dalam rentang tick saat ini, dampak kira-kira linear dalam Δin / L. Melewati batas tick dapat mengubah L secara diskrit, menyebabkan lompatan tiba-tiba dalam harga marginal. Perdagangan yang melintasi beberapa tick yang jarang dihuni dapat memiliki dampak jauh lebih tinggi daripada aturan praktis 2 · Δin / reserve. Kutipan CLMM SDK mengulangi langkah swap secara deterministik untuk mengembalikan amountOut yang diharapkan dengan tepat, jadi minAmountOut = amountOut · (1 − slippage) benar. Tetapi nilai pengembalian priceImpact harus ditafsirkan sebagai “spread antara spot pra-perdagangan dan spot pasca-perdagangan”, yang pada CLMM dapat jauh lebih besar daripada slippage efektif swap untuk pengguna yang hanya peduli dengan amount_out.

Kurva LaunchLab

Mirip dengan CPMM tetapi dengan kurva asimetris (kuadratik atau virtual-reserves). Dampak tumbuh lebih cepat untuk pembeli akhir saat kurva curam menjelang kelulusan. UI pembeli awal harus memperingatkan ketika pembelian diharapkan mendorong kurva lebih dari ~5% dari quote_reserve_target dalam satu transaksi.

Pertimbangan MEV

Di Solana, ekstraksi MEV terhadap swap sebagian besar berbentuk sandwich attacks: bot menempatkan transaksi back-run yang berdagang setelah milik Anda, ditambah front-run yang berdagang sebelumnya, keduanya di slot yang sama. Perdagangan Anda diisi dengan harga lebih buruk daripada yang seharusnya tanpa sandwich; back-run menangkap perbedaannya. Mitigasi:
  1. minAmountOut ketat. Batas slippage agresif menyebabkan transaksi korban kembali jika sandwich berat, melindungi dana (tetapi membuang gas). Di Solana ini adalah praktik standar — penolakan murah.
  2. Bundle Jito. Mengirimkan melalui Jito dengan tip bundel mengecualikan perantara dari pengurutan ulang tx Anda. Bundle mendarat sebagai blok atom.
  3. Biaya prioritas. Biaya prioritas tinggi meningkatkan kemungkinan perdagangan Anda mendarat di blok pemimpin saat ini sebelum sandwicher dapat bereaksi. Kurang kuat daripada bundle, lebih standar.
  4. RPC pribadi. Mengirimkan melalui RPC pribadi (atau melalui endpoint langsung validator) mengurangi jendela di mana sandwicher mempool dapat mengamati transaksi Anda.
SDK Raydium tidak bundle; integrator biasanya melapisi Jito di atas. Lihat integration-guides/routing-and-mev untuk pola.

Slippage untuk rute multi-hop

Ketika swap merutekan melalui beberapa pool (misalnya USDC → SOL → RAY), toleransi slippage harus diterapkan per-hop, bukan hanya end-to-end:
Router SDK menerapkan batas per-hop secara otomatis ketika Anda memanggil raydium.tradeV2.swap. (Fasade adalah tradeV2 — raydium.trade tidak ada.) Untuk router khusus, replikasi pola.

Pelaporan kepada pengguna

Aturan praktis untuk UI swap yang baik:
  • Tampilkan keduanya dampak harga yang diharapkan dan toleransi slippage secara terpisah.
  • Sorot ketika dampak harga melebihi ~2% — peringatan “dampak tinggi”.
  • Sorot ketika dampak harga melebihi toleransi — transaksi hampir pasti akan kembali.
  • Untuk pasangan volatil, tawarkan “mode slippage tinggi” yang melonggarkan batas dan menampilkan peringatan yang lebih kuat.

Penunjuk

Sumber:
  • Implementasi slippage / dampak SDK Raydium v2.
  • Flashbots / Jito di Solana MEV.