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

2 つの異なる概念

価格インパクトとスリッページは UI では混同されることが多いですが、異なるものを指します。
  • 価格インパクトは、特定のプール状態に対するトレードの決定論的な特性です。(Δin, reserves) が与えられれば、価格インパクトはトレード送信前に完全に計算可能です。
  • スリッページは、クォート時に予想した価格と実行時に実際に得た価格の実現差です。これはレイテンシ、同時トランザクション、ブロック包含順序の関数であり、プール数学の関数ではありません。
それ以外がアイドル状態のプールに対する 1% のクォートは、次のブロックに着地すれば 0% のスリッページを持ちます。その 1% は価格インパクトでした。別のトレードが最初にプールにヒットした場合、同じクォートは 0.2% 悪くなります。その追加の 0.2% がスリッページです。

正式な定義

価格インパクト

CPMM の場合:小さなトレードでは impact ≈ 2 · Δin / reserve_in。CLMM の場合:トレードが横切るティック数に依存します。現在のティック範囲内ではほぼフラットで、各ティック交差時にジャンプします。

実現スリッページ

スリッページは常に非負(またはゼロ)です。クォートが正直であると仮定した場合。負の値は、クォートより多く得たことを意味します。クォートと実行の間にプール状態があなたに有利に動いた場合に可能です。

minAmountOut と maxAmountIn のサイズ設定

すべての Raydium スワップはスリッページ保護バウンドを取ります:
  • SwapBaseInput(amount_in, min_amount_out) — 正確な入力、出力の下限。
  • SwapBaseOutput(max_amount_in, amount_out) — 正確な出力、入力の上限。
SDK は製品ごとにこれらを計算します。3 つは 1 つのシグネチャを共有しません:
3 つすべてで、minAmountOut は amountOut × (1 − slippage) であり、オンチェーンバウンドとして使用されます。priceImpact はプール状態のみから決定論的です。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 デフォルト):

AMM タイプ間の違い

CPMM

価格インパクトは滑らかで連続的です(クローズドフォーム 2 · Δin / reserve_in)。スリッページ許容度はトレードサイズとともに線形にスケールします。

AMM v4

CPMM と同じ曲線数学。OpenBook 削除以降、「有効リザーブ」は単に 2 つのボルト残高です:
  • 生のボルト残高からクォートします。オンブック成分を追加するものはありません。Initialize2 はすべての新しいプールで AmmInfo.open_orders = Pubkey::default() を書き込み、OpenOrders アカウントを読み込む命令はありません。
  • 蓄積されたプロトコル PnL(state_data.need_take_pnl_coin / need_take_pnl_pc)をボルト残高から差し引いて、不変量が実際に使用するリザーブを取得します。
  • 事前実行するクランクはありません:MonitorStep は unimplemented! でパニックし、送信してはいけません。

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 を通じてバンドルされたチップで送信すると、仲介者があなたの tx を並べ替えることから除外されます。バンドルはアトミックブロックとして着地します。
  3. 優先度フィー。 高い優先度フィーは、サンドイッチャーが反応する前にあなたのトレードが現在のリーダーのブロックに着地する可能性を高めます。バンドルより堅牢性は低いですが、より標準的です。
  4. プライベート RPC。 プライベート RPC(またはバリデータの直接エンドポイント)を通じて送信すると、メモリプール サンドイッチャーがあなたのトランザクションを観測できるウィンドウが削減されます。
Raydium の SDK はバンドルしません。インテグレータは通常、その上に Jito をレイヤーします。パターンについては integration-guides/routing-and-mev を参照してください。

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

スワップが複数のプールを通じてルーティングされる場合(例:USDC → SOL → RAY)、スリッページ許容度はエンドツーエンドだけでなく、ホップごとに適用される必要があります:
SDK のルータは、raydium.tradeV2.swap を呼び出すときにホップごとのバウンドを自動的に適用します。(ファサードは tradeV2 です。raydium.trade は存在しません。)カスタムルータの場合、パターンを複製してください。

ユーザーへのレポート

良いスワップ UI のための経験則:
  • 予想価格インパクトとスリッページ許容度を両方別々に表示します。
  • 価格インパクトが約 2% を超える場合は強調表示します。「高インパクト」警告。
  • 価格インパクトが許容度を超える場合は強調表示します。トランザクションはほぼ確実にリバートします。
  • ボラティルペアの場合、バウンドを緩和し、より強い警告を表示する「高スリッページモード」を提供します。

ポインタ

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