slippage と price impact のやさしい解説

·7 分で読める·SSP Editorial Team 著
swap の見積もり価格と、price impact と slippage を経た実際の約定価格を対比した図。

slippage と price impact のやさしい解説

見積もりは 1 ETH = 3,200 USDC。あなたは swap を確定する。数秒後、トランザクションが確定して受け取れたのは 3,187 USDC だった。ハッキングされたわけでも、誰かがルールを書き換えたわけでもない。あなたはオンチェーン取引でもっとも誤解されやすい二つの仕組み、price impact(価格への影響)とslippage(見積もりと約定価格のずれ)に出会っただけだ。

この記事では、自己管理型ユーザー向けに両者を分解する。読み終わるころには、なぜ見えた数字が必ずしも受け取る数字ではないのか、「slippage tolerance」の設定が実際には何をしているのか、そして SSP Wallet や dApp から swap するときにどう考えればよいのかが分かるはずだ。

見積もりが「あくまで見積もり」である理由

オンチェーンの swap の大半は、伝統的なオーダーブックを通らない。代わりに Automated Market Maker(AMM)を通る。AMM は二つの資産を liquidity pool に保有し、数式で値付けする smart contract だ。もっとも一般的な式はコンスタント・プロダクトルールで、ふつう x * y = k と書かれる。

  • x はプール内の token A の量。
  • y は token B の量。
  • k はプールが維持しようとする定数。

token A を token B に swap すると、xy の比率が崩れる。プールは k をおおむね一定に保つよう自動的に再価格付けを行う。この再価格付けこそが price impact の出どころだ。

見積もりは、ある瞬間のプール状態のスナップショットでしかない。あなたのトランザクションがマイニングされる頃には、たいていプールはすでに変わっている。他の swap が当たり、ブロックが流れ、自分自身の取引もこれからプールをさらに押す。あなたが見た数字は嘘ではなかった。ただ、約束ではなかった、というだけだ。

price impact:自分の取引が自分に課すコスト

price impact とは、見積もりから約定までの間に他に何も変わらないと仮定したときに、自分の取引だけが引き起こす価格変化のこと。 機械的で予測可能、そして完全にプールの深さの関数だ。

思考実験。ETH/USDC pool が 100 ETH と 320,000 USDC を抱えているとする。限界価格はおよそ 1 ETH = 3,200 USDC。さて:

  • 1 ETH を swap する。プールの準備金からごく小さな塊を取るだけ。価格は髪の毛一本ぶん動く。プール手数料を差し引いて、3,200 USDC に近い量を受け取れる。price impact は小さい——せいぜい数 basis point
  • 10 ETH を swap する。比率がはっきり動く。実際の平均約定価格は 1 ETH = 3,200 USDC をかなり下回る。price impact はすでに数パーセント。
  • 50 ETH を swap する。プールの流動性の三分の一を食う規模だ。約定価格は崩れる。price impact は数十パーセントに達することもある。

教訓:取引サイズがプールの深さに対して大きくなるほど price impact は大きくなる。取引を二倍にすると、コストは二倍以上になる。次の単位ほど悪化した曲線にぶつかるからだ。ウォレットや aggregator は通常、swap 画面でこれをパーセンテージとして表示する。数パーセントを超える値は脚注ではなく警告として受け取ってほしい。

price impact は誰かに支払う手数料ではなく、曲線に対して自分が自分自身のカウンターパーティーになる代償だ。

slippage:見積もりと約定のあいだの差

slippage は、あなたが期待していた価格と、swap が実際に約定した価格との差だ。 price impact を含むが、見積もりを見た瞬間からトランザクションがオンチェーンに着地するまでに起きるすべてのことも含む。

  • 同じプールに当たる他の取引。 同じブロック、あるいはあなたの見積もりと確認のあいだのブロックで swap する人は、誰でもプールの状態を変える。
  • 見積もりから約定までの時間。 ボラタイルな資産ではほんの数秒でもプールは動く。
  • 自分自身の price impact。 上で述べたとおり、取引それ自体が約定価格を押す。
  • MEV。 searcher は、待機中の swap の直前と直後に取引をはさみ込むことができる。詳しくは MEV、フロントランニング、サンドイッチ攻撃 を参照。

price impact はモデル化できるもの。slippage は実際に起きた結果。

slippage tolerance の設定

ネットワークが見積もりから約定までのあいだの正確な価格を保証できない以上、swap インターフェースはslippage tolerance を設定させる。これは見積もり価格に対して許容できる最大の乖離だ。実際の約定が 見積もり - tolerance より悪くなる場合、smart contract はその swap を revert する。

すっきりして見えるが、これは実際のトレードオフだ。

  • 低すぎる。 プールが上限を越えて動くと、トランザクションは revert する。revert にも gas はかかる——失敗した試みに支払って、手元には何も残らない。ボラタイルな日には、ひとつが通るまでに失敗した swap を何度も積み重ねることになる。
  • 高すぎる。 ほぼ何があっても通ってしまう。MEV bot があえて価格をあなたに不利な方向に動かす場合さえ含めて。人気 token で 5% の tolerance は、サンドイッチ攻撃への青信号だ。tolerance が許す範囲でもっとも悪い価格を受け取ることになる。

万能な正解はない。深いステーブルコイン・ペアでの 0.1% は妥当。ニュース真っ最中の薄い token で同じ数字なら、ほぼ確実に revert する。現実的には小さく始めて調整するのがよい。swap が revert するなら tolerance を少しだけ上げ、サンドイッチされているなら下げ、別のルートやより小さなチャンクへの分割を検討する。

SSP から見たときの姿

SSP では swap の経路が二つあり、それぞれ slippage の見え方が違う。

  • ウォレット内蔵 aggregator(SSP 内の buy/sell/swap 画面)。aggregator が venue を跨ぐルートを選び、最終的なひとつの出力見積もりを提示する。ルートレベルの slippage の大半はこのフローの中で処理され、あなたは最終的に表示される数字を見て確定するか取り消すかを決める。この一連のフローの UX については SSP からの暗号資産 swap で扱った。
  • WalletConnect 経由の dApp swap。 SSP を DEX に直接接続すると、swap 画面は dApp 側のものだ。slippage tolerance の設定もそこに含まれる。数字はあなたが決め、結果もあなたが背負う。SSP は、拡張機能で承認し SSP Key で確認したあとに、dApp が要求するトランザクションを共同署名するだけだ。dApp の swap 画面はよく読んでほしい。

SSP の 2-of-2 multisig という性質は AMM の数学を変えないが、すべての swap が二台のデバイスでの確認を必要とすることは意味する。これにより、「確定を押した」と「tx が mempool に届いた」のあいだに数秒の余白が生まれる。見積もりと最終約定が一致しない、もうひとつの理由だ。

実用的なアドバイス

ほとんどのチェーンと DEX で通用する短いチェックリスト。

  1. まず少額で試す。 大きいポジションを swap する前に、同じルートで少額を流してみる。小さい取引でも price impact が不安なら、大きい取引はもっと悪い。
  2. price impact のパーセンテージを見る。 ウォレットが表示するなら、ふつうサイズの取引では 1–2% を超える値は赤信号として扱う。aggregator やより深い pool は通常これを軽減してくれる。
  3. レートだけでなく最終コストを見る。 Ethereum の gas 手数料は、price impact と slippage の上にさらに乗るコストだ。手数料の仕組みは 自己管理ユーザーのための Ethereum の gas 手数料 で解説した。EIP-1559 によって、あなたが署名してからブロックが届くまでに手数料が動きうる——「確認してるあいだに価格が変わった」と感じる、もうひとつの理由だ。
  4. 深い pool を選ぶ。 流動性は price impact の味方だ。流動性 5,000 万ドルのペアは、50 万ドルのペアよりはるかにあなたの取引を吸収してくれる。
  5. tolerance は意図的に設定する。 デフォルトを盲目的に受け入れない。失敗した swap を通すために 5% まで上げない——その失敗はしばしば何かを伝えている���
  6. 何度もサンドイッチされるならルートを変える。 より小さなチャンク、別の aggregator、MEV を意識した RPC で結果が変わることがある。

まとめ

price impact は pool に対して取引することの避けようのない数学だ。取引サイズが大きくなれば膨らみ、流動性が増えれば縮む。slippage は、他のトランザクションや時間、そして自分自身の取引が価格を動かす公開 mempool で約定するという、雑然とした現実そのものだ。slippage tolerance は、tx が revert しやすいか、サンドイッチされやすいかを決めるレバーだ。意識して使ってほしい。

SSP で swap するとき、ウォレット内蔵 aggregator を経由しても、WalletConnect 越しの dApp を経由しても、背後の物理は同じだ。違うのは、誰が tolerance を設定するかだ。そして、自分が何を設定しているかを理解していれば、どちらの選択肢も驚きなしに使いこなせる。

さらに読む

この記事をシェアする

関連記事