メインコンテンツへスキップ

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.

このページは AI による自動翻訳です。すべての内容は英語版を正とします。英語版を表示 →

2 つの異なる概念

プライス・インパクトスリッページは UI では頻繁に混同されますが、別の概念です。
  • プライス・インパクトは特定のプール状態に対するトレードの決定論的なプロパティです。(Δin, reserves) が与えられたとき、プライス・インパクトはトレード送信前に完全に計算可能です。
  • スリッページは見積時に予期した価格と実行時に実際に得た価格の実現差です。レイテンシー、並行トランザクション、ブロック包含順に依存します。プールの数学には依存しません。
それ以外はアイドル状態のプールに対する 1% の見積は、次のブロックで処理されれば 0% のスリッページです。その 1% はプライス・インパクトでした。別のトレードが最初にプールをヒットした場合、同じ見積は 0.2% 悪い結果になります。その追加の 0.2% はスリッページです。

正式な定義

プライス・インパクト

p_before = pool.spot_price()
p_after  = pool.spot_price_if_trade(Δin) applied
impact   = (p_before − p_after) / p_before       // 符号付きの値
CPMM の場合:小さなトレードでは impact ≈ 2 · Δin / reserve_in。CLMM の場合:トレードが越えるティック数に依存します。現在のティック範囲内ではほぼフラットですが、各ティック交差で跳びます。

実現スリッページ

quoted_out = 見積時に計算された amount_out
actual_out = チェーン上で観測された amount_out
slippage   = (quoted_out − actual_out) / quoted_out
スリッページは常に非負です(またはゼロ)。見積が正直であると仮定します。負の値は見積より多く得たことを意味します。見積から実行までの間にプール状態があなたに有利に動いた場合に可能です。

minAmountOutmaxAmountIn の設定

Raydium のすべてのスワップはスリッページ保護バウンドを取ります:
  • SwapBaseInput(amount_in, min_amount_out) — 正確な入力、出力の下限。
  • SwapBaseOutput(max_amount_in, amount_out) — 正確な出力、入力の上限。
SDK はこれらを以下のように計算します:
const computed = raydium.<pool_type>.computeAmountOut({
  poolInfo,
  amountIn,
  mintIn,
  mintOut,
  slippage: 0.005,     // 0.5% 許容度
});

// computed.amountOut         — 「期待される」見積
// computed.minAmountOut      — amountOut × (1 − slippage)、オンチェーンバウンドとして使用
// computed.priceImpact       — 決定論的、プール状態のみ
// computed.fee               — 請求される総手数料(すべてのコンポーネントを合計)
スリッページ許容度はプライス・インパクト自体ではなく、プライス・インパクト周辺のバッファです。0.5% の許容度は「見積より最大 0.5% 悪い結果を受け入れる」という意味です。プライス・インパクトが 0.01%(小さなトレード)であっても 2%(大きなトレード)であっても関係ありません。2% のプライス・インパクトのトレードで 0.5% の許容度の場合、minAmountOut はトレード前のスポット価格より 2.5% 下です。本質的にはインパクトと許容度の合計です。

推奨スリッページ許容度

単一の正しい値はありません。適切なバウンドは以下に依存します:
  1. ペアの安定性。ステーブルコイン・ステーブルコイン プールは安全に 0.1% を使用できます。変動性の高いミーム・ペア プールはリライアブルに処理するために 3~5% が必要なことが多いです。
  2. トレードサイズ。大きなトレードはより大きなプライス・インパクトを持つため、リバージョンを避けるために許容度をスケーリングする必要があります。このため SDK の自動スリッページデフォルトは max(0.5%, 2 × price_impact) 前後です。
  3. ブロック包含レイテンシー。メモリプールに複数ブロック保持されるトランザクションは、より多くの並行トレードにさらされます。Jito バンドルと優先度手数料がこれを低減します。
経験則(Raydium UI デフォルト):
ペアタイプデフォルト許容度
ステーブル・ステーブル(USDC-USDT、USDC-USDS)0.1%
ステーブル・メジャー(USDC-SOL、USDC-BTC)0.5%
メジャー・メジャー(SOL-BTC、SOL-ETH)1%
変動性高(ミームトークン、流動性低のロングテール)3~5%

AMM タイプ間の違い

CPMM

プライス・インパクトは滑らかで連続的です(クローズドフォーム 2 · Δin / reserve_in)。スリッページ許容度はトレードサイズに比例してスケーリングします。

AMM v4

CPMM と同じカーブ数学ですが、「有効リザーブ」にはプールの OpenBook にポストされたリミット注文が含まれます。実際には以下を意味します:
  • 生のボルト残高から見積をとると、リザーブを過小評価するため、インパクトを過大評価します。
  • SDK は AmmInfo をフェッチし、vault + on_book.free + on_book.locked を合計して正しい値を取得します。
  • 古い OpenBook 状態(クランク がブロック)により、見積インパクトがオンチェーンの現実から乖離する可能性があります。アグリゲーターは大きな AMM-v4 トレード前に定期的にプレクランク(パーミッションレス MonitorStep)を実行します。

CLMM

プライス・インパクトは区分的です。現在のティック範囲内では、インパクトは Δin / L にほぼ線形です。ティック境界を越えることで L が離散的に変わり、限界価格に突然の跳びが生じます。スパース人口のティックをいくつか越えるトレードは、2 · Δin / reserve の経験則が示唆するより、はるかに高いインパクトを持つことができます。 SDK の CLMM 見積はスワップステップを決定論的に反復し、正確な期待 amountOut を返すため、minAmountOut = amountOut · (1 − slippage) は正確です。ただしpriceImpact リターン値は「トレード前スポットとトレード後スポット間のスプレッド」として解釈されるべきで、CLMM では amount_out のみを気にするユーザーのスワップ有効スリッページより、はるかに大きくなる可能性があります。

LaunchLab カーブ

CPMM に似ていますが、非対称カーブ(二次またはバーチャルリザーブ)です。グラデュエーションに向かってカーブが急になるにつれて、後期の買い手のインパクトが加速します。プレバイヤー UI は、買いが 1 トランザクションで quote_reserve_target の約 5% 以上カーブをプッシュすることが予想される場合は警告するべきです。

MEV の考慮事項

Solana では、スワップに対する MEV 抽出は主にサンドウィッチ攻撃の形で行われます:ボットはあなたのトランザクション後にトレードするバックラン トランザクション、および前にトレードするフロントラン トランザクションを同じスロットで配置します。あなたのトレードはサンドウィッチなしの場合より悪い価格で実行されます。バックランはこの差を取得します。 軽減策:
  1. タイト minAmountOut。積極的なスリッページバウンドにより、被害トランザクションが大きくサンドウィッチされた場合リバージョンし、資金を保護します(ただしガスが浪費されます)。Solana ではこれが標準実務です。リジェクションは安いです。
  2. Jito バンドル。Jito を通じてバンドルされたティップで送信することで、中仲介者がトランザクション再注文から除外されます。バンドルはアトミック ブロックとして着地します。
  3. 優先度手数料。高い優先度手数料はトレードが現在のリーダーのブロックに着地する可能性を増加させます。サンドウィッチャーが反応する前です。バンドルより堅牢性は劣りますが、より標準的です。
  4. プライベート RPC。プライベート RPC(またはバリデーターの直接エンドポイント経由)で送信することで、メモリプール サンドウィッチャーがトランザクションを観察できるウィンドウを減らします。
Raydium SDK はバンドルしません。インテグレーターは通常 Jito をその上に層化します。パターンは integration-guides/routing-and-mev を参照してください。

マルチホップ ルートのスリッページ

スワップが複数のプールをルーティングする場合(例:USDC → SOL → RAY)、スリッページ許容度はエンドツーエンドだけでなく、ホップごとに適用されるべきです:
// 悪い例:0.5% はエンドでのみ適用されるため、仲介ホップの滑りは 2 番目のホップを失敗させます。
const finalMin = finalAmount * (1 - 0.005);

// より良い例:各ホップは独自のバウンドを適用します。
const hop1Min  = hop1Amount * (1 - 0.005);
const hop2Min  = hop2Amount * (1 - 0.005);
// エンドツーエンドではこれはより厳しい(複合)ですが、アトミックです。ホップのいずれかが低下すれば、トランザクションは早期にリバージョンします。
SDK のルーターは raydium.trade.swap を呼び出すときに自動的にホップごとのバウンドを適用します。カスタムルーターの場合、パターンを複製してください。

ユーザーへのレポート

良いスワップ UI のための経験則:
  • 期待されるプライス・インパクトとスリッページ許容度を両方別々に表示します。
  • プライス・インパクトが ~2% を超えるときはハイライトします。「高インパクト」警告。
  • プライス・インパクトが許容度を超えるときはハイライトします。トランザクションはほぼ確実にリバージョンします。
  • 変動性の高いペアについて、バウンドを緩める「高スリッページ モード」を提供し、より強い警告を表示します。

ポインター

出典:
  • Raydium SDK v2 スリッページ / インパクト実装。
  • Solana 上の Flashbots / Jito MEV。