Repo-lab
開発ツール

MEVアービトラージBotとは?Ethereumで動く自動裁定取引スマートコントラクトの仕組みと使い方

⭐ 2,678 stars GitHub →

「DeFiのMEVという言葉は聞いたことがあるが、実際の仕組みがわからない」「Solidityのコードを読んで理解したいが、良い教材が見つからない」——DeFiに入門しようとするエンジニアにとって、実装まで踏み込んだ教材は限られています。

GitHubで2,678スターを獲得している「ai-trader-bot」は、Ethereum上のDeFiプロトコル(Uniswap V2/V3)間の価格差を自動検出・実行するMEVアービトラージBotです。Solidityで記述されたスマートコントラクトとPythonの自動化スクリプトを組み合わせることで、継続的な市場監視と取引実行を実現します。

重要な前提: このBotは2026年のMEV競争環境において、「本番で安定収益を得るツール」ではなく「DeFiとSolidityの仕組みを学ぶ教材」として価値があります。本記事ではその両面を率直に評価します。

MEVアービトラージBotとは何か

MEV(Maximal Extractable Value)とは、ブロックチェーンのバリデーターやボットオペレーターがトランザクションの順序を操作することで得られる最大利益を指します。アービトラージBotはその一種で、分散型取引所間に生じた一時的な価格差を検出し、同一トランザクション内で買いと売りを完結させることで差益を狙います。

ai-trader-botはこの仕組みをSolidityスマートコントラクトとして実装し、Python自動化スクリプトが24時間継続的に市場を監視します。スマートコントラクトが保有するETH/トークン残高を使って取引を実行するため、外部ウォレットへの都度送金が不要な設計です。

アービトラージの仕組み:原子的トランザクションの核心

MEVアービトラージが成立するのは、同じトークンペアでも取引所によって価格が異なる瞬間が生じるからです。たとえば、UniswapのETH/USDCプールで1 ETH = 2000 USDCの場合でも、SushiswapのETH/USDCプールでは1 ETH = 2010 USDCで売れるケースがあります。この10 USDCの差益を「アトミックスワップ」(原子的トランザクション)でリスクなく取得するのがアービトラージBotの基本動作です。

アトミックスワップの重要な特性は「全か無か」という性質です。UniswapでETHを購入してSushiswapで売却する2つの操作を1つのトランザクションにまとめることで、一方が失敗した場合はトランザクション全体がロールバックされ、損失が発生しない仕組みになっています。

主要な機能と設計

コアとなるスマートコントラクト関数

このBotの中心となる関数群は以下のように設計されています:

  • executeArbitrage() — Uniswapプール/ルーター間のアービトラージ機会を一トランザクションで検出・実行するメイン関数
  • quickSwap() / quickSwapFromBalance() — ホワイトリスト登録済みルーターを通じたコントラクト残高からの即時スワップ
  • setRouterAllowed() / setTokenAllowed() — 利用可能なルーターとトークンのホワイトリスト管理
  • setPaused() — 緊急停止機能(全コントラクト操作を即時中断)
  • withdraw() / withdrawETH() — コントラクト残高からのトークン/ETH引き出し(オーナー限定)

コントラクトオーナーのみが設定変更や資金引き出しを行えるアクセス制御が実装されており、セキュリティ上の基本設計は整っています。

Solidity実装の要点:executeArbitrageの構造

Solidityでアービトラージを実装する際の典型的なパターンは以下のようになります。ai-trader-botのexecuteArbitrage()はこの構造を踏襲しています:

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;

interface IUniswapV2Router {
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    
    function getAmountsOut(
        uint amountIn,
        address[] calldata path
    ) external view returns (uint[] memory amounts);
}

contract ArbitrageBot {
    address public owner;
    mapping(address => bool) public allowedRouters;
    mapping(address => bool) public allowedTokens;
    bool public paused;

    modifier onlyOwner() {
        require(msg.sender == owner, "Not owner");
        _;
    }

    modifier notPaused() {
        require(!paused, "Contract paused");
        _;
    }

    // アービトラージのメイン関数
    // routerA: 購入先DEX(例: Uniswap V2)
    // routerB: 売却先DEX(例: Sushiswap)
    function executeArbitrage(
        address routerA,
        address routerB,
        address tokenIn,
        address tokenOut,
        uint256 amountIn
    ) external onlyOwner notPaused {
        require(allowedRouters[routerA] && allowedRouters[routerB], "Router not allowed");
        require(allowedTokens[tokenIn] && allowedTokens[tokenOut], "Token not allowed");

        address[] memory pathA = new address[](2);
        pathA[0] = tokenIn;
        pathA[1] = tokenOut;
        
        uint[] memory amountsOut = IUniswapV2Router(routerA).swapExactTokensForTokens(
            amountIn,
            1,
            pathA,
            address(this),
            block.timestamp + 300
        );

        address[] memory pathB = new address[](2);
        pathB[0] = tokenOut;
        pathB[1] = tokenIn;

        IUniswapV2Router(routerB).swapExactTokensForTokens(
            amountsOut[1],
            amountIn, // 元本以上を要求(差益がなければ自動revert)
            pathB,
            address(this),
            block.timestamp + 300
        );
    }

    function setPaused(bool _paused) external onlyOwner {
        paused = _paused;
    }

    function setRouterAllowed(address router, bool allowed) external onlyOwner {
        allowedRouters[router] = allowed;
    }
}

このパターンのポイントは、Step 2のamountOutMinに元本(amountIn)以上を要求することです。差益がガス代を下回る場合、トランザクション全体がrevertされ損失を防ぎます。

Python自動化スクリプトの動作原理

Python側スクリプトは一定間隔でexecuteArbitrage()のdry-run(eth_estimateGasによる事前検証)を実行します。dry-runが成功した場合のみ実際のトランザクションを送信し、MetaMask/Phantomでの承認を求めます。また、バックグラウンドでUniswap V2/V3のswapイベントをリアルタイム監視し、ログパネルに取引履歴を表示します。

ガス代最適化の考え方

アービトラージで利益を確保するには、ガス代を差益以下に抑える必要があります。ai-trader-botが採用するdry-run戦略以外にも、以下の手法が一般的です:

# 利益計算の基本ロジック(参考実装)
def is_profitable(amount_in, amount_out, gas_price, gas_limit):
    gas_cost_eth = gas_price * gas_limit / 1e18
    profit_eth = (amount_out - amount_in) / 1e18
    return profit_eth > gas_cost_eth * 1.2  # 20%のバッファを確保

DeFiエンジニアへのラーニングパス:このBotで何を学ぶか

ai-trader-botは「使って稼ぐツール」よりも「Solidityで学ぶ教材」として活用するのが2026年の適切な使い方です。以下の順序で学習を進めると効果的です。

ステップ1: コードを読む(学習コスト:週末2日)

executeArbitrage() のSolidityコードを読んで、以下の概念を理解します:

  • onlyOwner modifier によるアクセス制御パターン
  • amountOutMin による損失防止の仕組み
  • block.timestamp + 300 によるトランザクション期限設定

ステップ2: Hardhat でローカルテストネットを構築する(学習コスト:1週間)

ai-trader-botはEtherLab(ブラウザ)で動作しますが、本格的な学習にはHardhatとMainnetフォークを使ったローカル環境が必要です:

# Hardhat + Mainnetフォーク環境の構築
npm install --save-dev hardhat @nomicfoundation/hardhat-toolbox
npx hardhat init

# Mainnetのフォーク(Alchemyの無料APIキーが必要)
npx hardhat node --fork https://eth-mainnet.g.alchemy.com/v2/YOUR_KEY

ステップ3: Flashbotsへの移行を検討する(学習コスト:2〜4週間)

シンプルなアービトラージで競合に先を越されるようになったら、Flashbots Bundleを使ったPrivate mempoolへの移行を学びます。これがプロのMEVサーチャーへの道です。

導入手順:ステップバイステップガイド

必要なもの

  • MetaMaskまたはPhantomウォレット
  • 初期資金:0.5〜1 ETH(入門レベル)
  • ブラウザ(EtherLab環境)

デプロイ手順

Step 1: EtherLab環境を開く

ブラウザでEtherLabを開き、ファイルマネージャーで新しい.solファイルを作成します。

Step 2: スマートコントラクトのコンパイル

Compilerタブでコンパイラバージョン0.8.20を選択し、コンパイルを実行します。

// pragma solidity ^0.8.20;
// EVM Version: London または Paris を選択(最新mainnet対応)

コンパイル時には「Optimization」を有効化(runs: 200)することでデプロイ時のガス代を削減できます。

Step 3: デプロイと資金注入

Deployタブでウォレットを接続し、コントラクトをデプロイします。表示されたコントラクトアドレスに0.5〜1 ETHを送金してBot残高を確保します。デプロイ後にEtherscanでトランザクションが確認できれば成功です。

Step 4: ルーターとトークンのホワイトリスト設定

デプロイ後すぐには取引できません。まず利用するDEXルーターとトークンを承認します:

setRouterAllowed(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D, true)
// ↑ Uniswap V2 Router アドレス(mainnet)

setTokenAllowed(0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2, true)
// ↑ WETH アドレス(mainnet)

Step 5: Botの起動

Python Automationタブで設定を確認し、「Start」をクリック。MetaMaskで承認するとBotが動作を開始します。

なぜ今このツールが注目されているのか

他のMEV Botとの違い

既存のMEVツールとai-trader-botを比較すると、ターゲットユーザー層の違いが明確です:

ツール 特徴 難易度 フラッシュローン対応
ai-trader-bot ブラウザベースEtherLab、最小限の環境構築 初級〜中級
flashbots/searcher-mev-bot Flashbots Protectとの統合、フロントランニング対策 上級
mev-geth バリデーター向け、MEVブースト対応 専門家向け
Hardhat Arbitrage Template ローカル環境でのテスト重視、フォーク検証可能 中級〜上級
aave-flashloan-template フラッシュローンを使ったゼロ資本アービトラージ 上級 ✅(Aave)

ai-trader-botはHardhatや複雑なローカル開発環境のセットアップなしに動作する点が差別化ポイントで、DeFiの仕組みを学習したいエンジニアの入門ツールとして位置付けられています。一方、本番運用でより高い収益を狙う場合は、Flashbots統合やPrivate mempoolへの送信が実装されたflashbots/searcher-mev-botや、フラッシュローンを使ったゼロ資本アービトラージへの移行を検討することになります。

2026年のMEVエコシステム:競争と進化

2024〜2026年にかけてEthereumのMEVエコシステムは大きく変化しました。PBS(Proposer-Builder Separation)の普及により、MEV-Boostを介したブロック構築の専門化が進んでいます。個人のアービトラージBotが単純な価格差を狙うだけでは、高速化されたプロのMEVサーチャーに先を越される(フロントランニング)リスクが高まっています。

ai-trader-botのようなシンプルなアービトラージBotは、学習目的・小額の機会の探索・DeFiの仕組み理解には今も有効ですが、競争の激化を踏まえると本番運用の期待値は下がっています。

こんな人に向いている

ブロックチェーンエンジニア・DeFi開発者 には、MEVメカニズムの実装例として非常に参考になります。特にSolidity初中級者がアービトラージの概念をコードベースで理解するための学習教材として活用できます。executeArbitrage()の実装を読むことで、アトミックスワップとアクセス制御の実装パターンを実際のコードで体得できます。

スマートコントラクト研究者 は、executeArbitrage()の内部実装を参照することで、原子的トランザクション(アトミックスワップ)の実装パターンを学べます。特に「利益が出ない場合は自動的にrevert」する設計が、スマートコントラクトのセキュリティ設計として参考になります。

DeFiプロトコル開発者 は、ホワイトリスト管理やアクセス制御の実装例として、コントラクトのセキュリティ設計の参考にできます。setPaused()による緊急停止機能は、プロダクション環境でのリスク管理手法として実用的です。

使う前に知っておきたいこと

リスクと制限事項

収益保証はない: READMEには「~$500/day」という記載がありますが、これは特定の市場条件下での推定値です。実際の収益はボット競争の激化、ネットワークガス代の変動、市場のボラティリティに大きく依存します。損失のリスクも当然あります。

技術的な制限:

  • Ethereum mainnet専用設計(テストネット対応は要確認)
  • ガス代が高い時期(50 Gwei超)はアービトラージ機会がコスト超過になる可能性が高い
  • eth_estimateGasベースのdry-runは常に完全ではなく、フロントランニングにより実際のトランザクションが失敗するケースあり
  • サンドイッチ攻撃のリスク:大きなスワップを実行する際に他のMEVボットに挟まれる可能性がある
  • フラッシュローン未対応:自己資金が必要(Aaveフラッシュローンを使ったゼロ資本アービトラージはサポート外)

スリッページ設定に注意: 上記のサンプルコードではamountOutMin1に設定していますが、本番環境では適切なスリッページ(0.5〜1%程度)を設定しないと不利なレートで取引が完了するリスクがあります。

ライセンス: リポジトリにはLICENSEファイルが存在しますが、商用利用前に必ず内容を確認してください。

コントリビューターが1名: 個人プロジェクトのためメンテナンス継続性は不確実です。本番運用前に十分なコードレビューを推奨します。

まとめ

ai-trader-botは、MEVアービトラージの仕組みをSolidityとPythonで実装した教育的価値の高いオープンソースプロジェクトです。

この記事のポイントを振り返ります:

  • 最大の価値は「学習教材」: 2026年のMEV競争環境では本番収益ツールよりも学習ツールとして使うのが現実的
  • アトミックスワップの核心: 差益がガス代を下回れば自動revert、元本割れしない設計
  • ラーニングパス: コードを読む → Hardhatでローカルテスト → Flashbotsへ移行という段階的学習が効果的
  • 他ツールとの違い: ブラウザのみで動作する入門のしやすさ、フラッシュローン未対応が差別化点

DeFiエンジニアやブロックチェーン学習者が原子的トランザクションとUniswapプール間裁定取引の実装を実際のコードで理解するのに適しています。実際の運用では市場リスクとガス代を十分に考慮した上で、小額から始めることを強く推奨します。

関連ツール・おすすめサービス

  • DigitalOcean — 開発者向けクラウド・App Platformでかんたんデプロイ

この技術を学ぶ

DevToolに興味を持った方には、Udemyのオンラインコースもおすすめです。

毎日更新のGitHubツール情報

LINEで受け取って最新情報をキャッチアップしよう

友達追加する(無料)

関連記事

この記事が役に立ったらシェアしてください