「板(オーダーブック)やチャート」だけを見ていると、同じ取引でも約定価格がブレたり、スリッページやサンドイッチ攻撃で成績が崩れることがあります。根本原因はトランザクション層(メンプール、ノンス、ガス、EIP‑1559)の設計にあります。本稿では、ウォレットやボットが発行する取引の“通し方”を最適化し、DEXでの約定品質と一貫性を引き上げる実装知識を、初歩から実務レベルまでまとめます。
全体像:なぜ「メンプール」を読むのか
メンプールは、ブロックに取り込まれる前のトランザクション待合室です。ここでの“順番争い”に勝てるかが、DEXの価格インパクトやサンドイッチ被害、約定速度を左右します。価格優位を作る鍵は次の4点です。
- ノンス管理:連番の欠落や詰まりが発生すると、後続がすべて足止めになります。
- ガスリミット:足りないと失敗、過大でも無駄。処理の複雑さに応じた適正値が必要です。
- EIP‑1559手数料:
maxFeePerGas
とmaxPriorityFeePerGas
の設計でブロック内の実行優先度が決まります。 - 公開/非公開送信:公開メンプールに投げるか、プライベート送信でサンドイッチを避けるか。
基礎:EIP‑1559の最小限
EIP‑1559では、ブロック毎に変動するbaseFee
があり、ユーザーはmaxFeePerGas
(総上限)とmaxPriorityFeePerGas
(チップ)を指定します。実際の支払いは
effectiveGasPrice = baseFee + min(priorityFee, maxFee - baseFee)
です。
これにガス使用量(gasUsed
)を掛けると総手数料になります。
DEX約定に効くポイント
- 優先度:同一タイミングでは、より高いeffectiveガス価格の取引が先に入ります。
- 競合:同じプールに向かう大口が同ブロックで殺到すると、スリッページが拡大します。
- 私設メンプール:マイナー/ビルダーのプライベートルート(例:Protect系RPC)経由は観測されにくく、
サンドイッチ耐性が高まります。
実務1:ノンス運用の基本
ノンスはアカウント毎の通し番号です。欠番(ギャップ)や詰まりを作ると、以降の注文がすべて待機になり、急所でのエントリー/イグジットを逃します。
- 連続発行:ボットは送信前に最新ノンスをRPCでフェッチし、常に +1 で採番します。
- キャンセル/差し替え:失敗しそうなトランザクションは、同じノンスでpriorityFeeを上げて再送(Replace)します。
- 速度調整:加速(speed up)はpriorityFeeを一定パーセンタイル(例:直近5分の70–80%位)に上げるのが目安です。
実務2:ガスリミットの決め方
ガスリミットは「上限」です。過大でも未使用分の支払いは発生しませんが、低すぎると失敗し、機会損失になります。典型例として、Uniswap V3 の exactInputSingle
は15–25万Gas程度が目安ですが、
ルーティングが複雑になると30万超も珍しくありません。
推奨:過去成功トランザクションのgasUsed
に1.2倍の安全係数を掛けた値を一律設定します。
実務3:1559手数料の設計パターン
市場混雑の度合いで使い分けます。
- 平常時:
maxFee = baseFee × 2
、priority = 1–2 gwei
。 - 混雑時:
maxFee = baseFee × 3–4
、priority = P70–P90
(直近5分の分位点)。 - 最優先時:ブロック直近の成功例を参照し、effectiveが上位10%に入るようチューニング。
なお、maxFee
を極端に高くしてもbaseFee次第で実支払いが跳ね上がるわけではありません。重要なのはpriorityの“相対順位”です。
実務4:メンプール観測
RPCのeth_pendingTransaction
やプロバイダのメトリクスで、pending tx数、直近ブロックのbaseFee推移、同一プール宛ての大口を把握します。直後に巨大スワップが控えていれば、スリッページ回避のため送信タイミングを1–2ブロック遅らせる選択も合理的です。
実務5:サンドイッチ回避の実行パス
- プライベート送信:Flashbots系のProtect/MEV Blocker等のRPCを利用し、公開メンプールに出さない。
- スリッページ許容幅の最適化:広すぎる許容は攻撃者の利益確定を助けます。板厚/プールTVLに応じて1–30bpsで調整。
- 小分割:一撃の大口より、複数ブロックに分散した方が価格影響が小さいことが多いです。
実務6:裁定・戦略にガスコストを内在化する
トレードが“儲かる”条件は、価格優位(edge)がガスコスト+予想スリッページを上回ることです。次式でブレークイーブンを評価します。
必要エッジ(bps) ≈ (gasUsed × effectiveGasPrice × ETHUSD / 注文名目額) × 10,000 + 想定スリッページ(bps)
例:ETH=3,000USD、gasUsed=200,000
、effective=30 gwei
(=3e-8 ETH/ガス)、名目額=10,000USD のとき、ガスコストはおよそ
200,000 × 3e-8 × 3,000 ≈ 18 USD
、名目比18bps。スリッページ見込み12bpsなら、合計30bpsを上回るエッジが必要です。
実務7:束化と原子性
裁定では、複数のスワップ/ブリッジ/返済を同一ブロックで原子的に通す必要がある場面があります。パブリック送信では競合に割り込まれるリスクがあるため、バンドル送信(例:Flashbots)やプライベートルートでのbundle化を検討します。
実務8:失敗パターンと対策
- ノンス詰まり:失敗Txが先頭に残り、後続が全滞。→ 同ノンスでpriority引き上げ再送。
- Out of Gas:ルーティングが複雑化。→ 直近成功Txの
gasUsed
×1.2で再計算。 - 過小priority:ブロックに入らず価格だけ悪化。→ 分位点基準で増額、またはプライベート送信。
チェックリスト:送信前の3点確認
- 最新ノンスを取得し、欠番がないか。
- 推定
gasUsed
に安全係数(1.2倍)を掛けたガスリミットか。 priority
が直近5分のP70以上、またはプライベート送信を選択しているか。
ミニQ&A
Q. maxFeeを極端に高くすると危険?
A. 実支払いはbaseFeeに依存します。priorityの上げ過ぎには注意が必要ですが、maxFee自体を高めに取るのは安全弁として合理的です。
Q. いつプライベート送信を使うべき?
A. 大口、薄いプール、目立つトークンのスワップは原則プライベートを推奨します。
まとめ
メンプールの混雑度、ノンス、ガスリミット、EIP‑1559手数料、送信経路の4点を整えるだけで、同じ戦略でも約定品質は明確に向上します。まずは「ノンス欠番ゼロ」「ガスリミット=推定×1.2」「priorityは分位点」「大口はプライベート」の4ルールを自動化し、勝率と一貫性を底上げしましょう。
コメント