「スワップしただけなのに、約定がズレて想定より高く買わされた」。その陰にある代表的な要因がMEV(Maximal Extractable Value)のサンドイッチ攻撃です。本稿ではサンドイッチの仕組みを定量的に説明し、個人投資家が今日から実務で使える回避策を、環境設定レベルまで具体的に解説します。
サンドイッチ攻撃の仕組み
サンドイッチは「フロントラン(先回り買い)→被害者の取引→バックラン(売り戻し)」の三段構成です。攻撃者はメンプールに現れたあなたの大口スワップを観測し、先に買って価格を押し上げ、あなたに割高で買わせたのち、直後に売り戻して利鞘を得ます。
AMM曲線での価格影響
代表的な一定積AMM(x*y=k)で、トークンX→Yを購入するトレード量Δxが入ると、理想価格からのズレ(価格インパクト)は概ね
price_impact ≈ Δx / (X_pool - Δx)
で近似できます(プール手数料は別途)。攻撃者の先回り買いΔxattが先行して入ると、あなたの取引の実効価格はさらに悪化します。
損失の近似式
被害者の追加コスト(サンドイッチによる超過スリッページ)は、単純化すると
loss ≈ P_mid × Q_victim × (PI_base(Δx_v) + PI_attack(Δx_att) - PI_base(Δx_v))
≒ P_mid × Q_victim × PI_attack(Δx_att)
に近く、直感的には「攻撃者の先回りで増えた分の価格インパクト」を払わされた格好になります。
数値例
プール準備金がX=1,000,000、Yは省略、あなたがΔx_v=10,000を買うとします。攻撃者が事前にΔx_att=5,000を買えば、あなたの約定価格は本来よりも数十bp〜数百bp悪化し、10,000USDT相当を買う想定で数十ドル〜百数十ドルの超過コストが発生し得ます。さらにバックランで価格が元に戻るため、あなたは含み損を抱えやすくなります。
サンドイッチが起きやすい条件
- メンプールに公開された大きめのマーケットスワップ(ガスプライス/priority feeが低い)
- 薄いプール(TVLが小さい、片サイドに偏り)やボラティリティ上昇時
- スリッページ許容値が過大(例:3〜5%)
- 取引時間が混雑(ブロックスペース逼迫)
実務的な検出フロー
- トレード直後にブロックエクスプローラでトランザクションを開き、前後に自分と同サイズ・同プールの取引が挟まっていないか確認します。
- トランザクションシミュレータ(ローカル/エミュレーション)で、自分のTx単独の場合の受取量を再計算し、実際との差分を記録します。
- 継続発生する場合は、公開メンプール経由の送信をやめ、後述のPrivate/Protect送信に切替えます。
回避戦略(重要度順)
1. 公開メンプールを使わない(Private/Protect RPC)
Uniswap等のスワップは、Protect RPC(例:Flashbots Protectなど)や取引所提供のPrivate Txに切替えるだけで被害が激減します。これによりトランザクションはマイナー/バリデータのプライベートバンドルへ直接配信され、メンプール観測系ボットに見られにくくなります。
2. RFQ/オフチェーン約定を優先
1inch Fusion、CowSwap、UniswapX等のオーダーフロー・オークションやRFQは、見積りがオフチェーンで競争され、最終実行のみオンチェーンとなります。これによりサンドイッチ耐性が高まります。
3. スリッページ許容の最適化
許容を「目標価格±(市場スプレッド+1〜3倍の通常時価格インパクト)」に設定し、既定の3%等は避けます。短時間での分割実行(TWAP)も有効です。
4. 小さい・深いプールを避け、流動性の深いペアを選択
同一ペアでも、ロールアップやCEXブリッジ先の方が深いケースがあります。TVL/深さを比較してルートを選びます。
5. Priority Feeの適正化
EIP-1559ネットワークでは、maxPriorityFeePerGasを適正化し、maxFeeも十分に取ることでブロック取り込み遅延を避けます。遅延は観測時間を与えます。
6. アグリゲータの使い分け
高速・低ガスが必要ならUniswap直、サンドイッチ耐性重視ならCowSwap/1inch Fusion、サイズが大きい時は分割/時間分散。「何で執行するか」を都度決めます。
7. 限定価格指値・オフチェーン注文
DEXのレンジオーダーやCEX指値、RFQの指値を活用し、市場成行の不確実性バケットを減らします。
8. L2の特性を理解
オプティミスティック系はファイナリティまでの時間・検証方式が主鎖と異なります。zk系はファイナリティが速い分、混雑時の挙動が異なります。混雑の少ないL2で執行する選択肢も検討します。
9. ブロックタイムと混雑カレンダー
オンチェーンイベントや人気エアドロップ実施時はメンプールが混雑します。スケジュールを外して執行しましょう。
10. 監査済みコントラクト・信頼できるルーターのみ使用
未知のDEXやブリッジは、サンドイッチ以前にスマートコントラクトリスクが支配的です。既知の監査・実績を優先します。
環境設定:Protect RPCの具体手順
- ウォレット設定から「ネットワークを追加」。
- RPC URLにProtect/Privateエンドポイントを入力(提供元の案内に従う)。
- チェーンID・通貨記号を設定。
- スワップDApp側で「トランザクション送信先」を当該ネットワークに切替。
- 1回目は小口テスト($10程度)で受取量と手数料を検証。
実務シナリオ:,000相当のETHをUSDCへ
(1)CowSwapでRFQ送信→提示が悪ければ1inch Fusion→それでも悪ければUniswap直で分割(5〜10本)+Protect RPC。
(2)各本のスリッページは0.3〜0.5%(通常流動性時)。混雑時はさらに分割。
(3)ガスはbaseFee×1.2〜1.5、priorityはネットワーク状況に応じて適正化。
コストと効果の目安
大口ほどサンドイッチ回避の限界効用が高くなります。例えば通常運用で毎回50〜150ドルの価格劣化が発生していたと仮定し、Protect/RFQでそれを80%低減できれば、年間100回の執行で4,000〜12,000ドルの改善余地があります。
よくある誤解
- 「スリッページ0%にすれば安全」:未約定・失敗が増え、リトライ中に価格が動いて余計に不利になることがあります。現実的な幅を。
- 「L2なら起きない」:観測とバンドルはL2にも存在します。保護手段は同様に有効です。
- 「小口なら関係ない」:小口でも人気ミーム銘柄や薄いプールでは被害が出ます。
チェックリスト(執行前)
- ルート:RFQ/CowSwap/1inch Fusion/UniswapXを優先、不可ならUniswap直+Protect。
- スリッページ:通常0.3〜0.5%、薄い/高ボラは0.8〜1.2%、それ以上は分割。
- サイズ:大きいほど時間分散(TWAP)。
- ネットワーク:混雑時間帯を避ける、priority fee最適化。
- 検証:小口で1回テストし、受取量/ルート/手数料を記録。
まとめ
サンドイッチ攻撃は「避けられるコスト」です。公開メンプールを避け、RFQ/Protectを標準にし、スリッページとサイズを設計する——この3点を徹底するだけで、個人投資家でも執行品質は大きく改善します。今日の次のトレードから実装してください。
コメント