Flashbots Alpha ~Flashbots Arbitrageサンプルの手引き~
※simple-arbitrageのエラー対応中 #21
EIP-1559が導入されました。Ethのパフォーマンスが良くなってきているような気がします。Ethの価格が上がるとフィアット建ての手数料が上がるので考えものですね。前回の記事でMEVとFlashbotsについての概要、またFlashbotsの提供する開発ツールの紹介をしました。そして実際にFlashbots Coreを使用したFlashbots Bundleのトランザクション作成とテストをしました。今回は公式のgithubリポジトリにあるアービトラージのコードであるsimple-arbitrageを試してみたいと思います。コードはUniswapなど複数のAMMのマーケットペアの価格を探索して、アービトラージの機会を発見、MEV-Gethマイナーへトランザクションを含むような手数料を払う”Flashbots Bundle”を作成します。コードはこのままではプロフィッタブルなアービトラージとならないようですが、サンプルコードとして参照できると思います。
目次です。
- MEV(Miner Extractable Value)とは(再掲)
- Flashbotsについて
- Flashbotsを使った実例
- simple-arbitrageの手引き
MEV(Miner Extractable Value)とは
MEV(Miner Extractable Value)とは、Ethereumでマイナーがトランザクションを任意に含めたり、除外したり、並べ替えたりする機能を通じて得られる利益のことであるとされています。MEVにはトランザクション手数料とブロックリワードからなる「従来の」利益と、トランザクションの並べ替え、挿入、またはトランザクションの検閲からの「非従来の」利益の両方が含まれます。マイナーは基本的にトランザクションをガス代の高い順に並べますが、このトランザクションを並べ替えることでより多くのガス代を受領したり、また自身が有利となるようなトランザクションを作成し挿入したりして利益を得ることが可能です。
DeFiやDEXのプロトコル上では、裁定機会や清算の機会が常に発生しており、プロフィットに繋がる取引機会を発見してトランザクションを作成するボットが数多く利用されています。ボットは自身のトランザクションを有利な条件とするために、mempoolにあるトランザクションのガス代より高い価格でトランザクションを作成することができます(Priority Gas Auction)。Ethereum is a Dark Forestでは、“generalized frontrunner”としてmempoolのトランザクションをコピーしより有利な条件で執行させることでプロフィットを得るようなボットが存在することを確認されていました。このようなフロントランニング等の手法よって多くの問題が引き起こされています。[1]
‘High-Frequency Trading on Decentralized On-Chain Exchanges’の論文で言及されるフロントランニングやバックランニングを使用するサンドウィッチ攻撃もよく知られるようになりました。攻撃者が故意にトランザクションの前後にトランザクションを挿入することでアービトラージを成功させるというもので流動性プールの利用側でフロントランニングするパターンと流動性の提供側で同様の処理を行うパターンの2種類が説明されています。[2]
最初のパターンの例です。Tvは被害者でTAは攻撃者です。DEXでアセットXとアセットYを交換するより先に同様のトランザクションを攻撃者が成功させることで、被害者がより悪いレートでXからYへスワップをせざるを得ない状況を作り出します。後にアセットYをアセットXへと交換してバックランニングすることで攻撃者はリスクフリーのアービトラージを成功させることが可能となりました。
次のパターンの例です。被害者のアセットXとアセットYの交換より先に流動性を取り除いてしまいます。このことによってスワップレートを操作し、流動性を加えたあとで攻撃者はアセットYとアセットXの交換を実行します。被害者が悪いレートでスワップしたことでTAはリスクフリーでアービトラージを行えます。これらのテクニックの詳細は論文に記載されています。
※論文自体を詳細には読んでいないので少し間違ってるかもしれません
MEVには、MEV抽出によって引き起こされるネットワーク輻輳、ガス代の高騰やタイムバンディット攻撃などのコンセンサスのセキュリティを脅かす負の外部性が問題であると指摘されています。このようなネガティブな外部性やリスクを軽減するために組成された研究開発組織がFlashbotsです。一般的にはMEV抽出自体が公平性や社会的な利益に欠けると言われます。たとえばこれは税収の不足を補うために盗難オークションを開催するかのようであり、どの家がその盗難のターゲットなるかについては検討されていないと揶揄されています。MEV抽出にリスク等があることは分かるが、Flashbotsとは反対にMEV自体を回避する方向を取るべきだとの意見があります。追加の参考記事です。[3] [4] [5]
Flashbotsについて
前述のとおりFlashbotsはMEVのネガティブな外部性やリスクを軽減するために組成された研究開発組織です。このMEVの危機に対処するにあたりFlashbotsは3つのアプローチへと対応方法をブレイクダウンしています。
- Dark Forestを照射する
MEVはほとんどのEthereumのDappsユーザにとって不透明で意識されていません。MEVを理解するにはデータ分析とスマートコントラクトの深い知識が必要です。セキュリティ上クリティカルなインフラがオフチェーンへ移動し、チェーンサイズが増加するにつれて透明性を担保することが難しくなります。具体的にはMEVによって引き起こされる負の外部性を客観的に評価し、MEVによるユーザ影響を定量化するツールを提供することです。MEV-inspectはEthereumのブロックデータをスキャンしてMEVメトリックを可視化するツールです。またflashbotsのブロックやトランザクションデータを探索するAPIとしてmev-blocks APIが提供されています。[6] - MEVを民主化する
MEV抽出は大規模なハッシュレートにアクセスできる一部のダークプールに限定されたり、大口トレーダーと一部マイナー間の一方的なオフチェーン取引を通じて、少数のプレーヤーに集中化される可能性があります。これらの可能性はEthereumのようなパブリックブロックチェーンのパーミッションレス・分散性という特性を侵害することになりセキュリティ上の弱点となってきます。パーミッションレスなMEV抽出のために、中立でパブリックなオープンソースインフラが必要です。MEV抽出を民主化することで、パーミッションレス・分散性という特性を侵害せずにすべてのプレイヤーは低レベルな金融プリミティブに平等にアクセスできるようになります。
Flashbotsではgo-ethereumクライアントを改変したMEV-Gethを提供しています。MEV-Gethはトランザクションをブロックに含めるため、マイナーとトレーダーに効率的な通信チャネルを作成することができます。MEV-Gethを採用することで、フロントランニング・バックランニングによって引き起こされるp2pネットワークやチェーンの輻輳の多くが緩和されるはず、とのことです。MEV-GethはFlashbots Coreに含まれています。 - MEVを再配分する
MEVはEthereumエコシステムの全てのプレイヤーに係ります。Flashbotsの予備調査によると、MEV抽出はマイナーとトレーダーに不釣り合いな利益をもたらしており、 MEV抽出の規模が拡大する場合には、ユーザとシステムの安定性に向けた「ある程度の」利益の再配布が必要になると予想されます。Ethereumエコシステム全体にとってEthereumのバリュープロポジションであるパーミッションレス・分散性を脅かすリスクを低減し、MEVを中心にインセンティブを調整することが全体的に不可欠です。
Why Flashbots?? 2020年から2021年にかけて、DEXの盛り上がりに伴いEthereumの利用が拡大しました。この利用拡大によってトランザクションの順序を優先するPrice Gas Auctionボットのオペレーターとマイナー間の非効率的な通信によって引き起こされたEtherem p2pネットワークの輻輳、ブロックチェーンのブロックスペースの輻輳などの負の外部性が露呈してしまいました。
前述のとおりMEV抽出に伴うインセンティブはEthereumのコンセンサスセキュリティへリスクをもたらす可能性があります。過去のMEV利益を抽出するためのタイムバンディット攻撃を通じたリオーグのインセンティブ、またプライベート・低遅延・オーダー順序コントロールのためのトランザクションルーティング集権化のインセンティブなどです。
現状ではEthereumの中立性、透明性、分散化、公平性を損なう可能性があるため、パーミッションドなトランザクションルーティングインフラストラクチャ(プライベートトランザクションサービス等)の開発が観察され懸念されています。 Flashbots Coreは、負の外部性と存在するリスクを軽減することを目的としたオープンソースで民主的な組織で、中立的な手段を提供しています。
Flashbotsを使った実例
FlashbotsのMediumのパブリケーションを見ると実際にFlashbotsのインフラを使用したMEV抽出やアービトラージのトランザクションが紹介されています。その中で紹介されているものの内で興味深いものをいくつかピックアップしてみました。Flashbotsを使用した高額な手数料のトランザクションはこのTwitter Botで情報収集できるのでフォローしておくと便利です。最初にご紹介する例はこのアカウントでも固定されている101.112 ETHもの手数料をマイナーへ支払った超高額な取引例です。
3月30日にUniswap V2に上場された$MARSHの流動性提供を検知して大量購入し、売り抜けることで利益を上げたトランザクションがあります。ボットか何かで新規の流動性供給を監視できるようにしていたものと考えられます。250 WETHで$MARSHを購入し、それらを売却することで莫大な利益を上げています。トランザクション手数料は0 Ethでマイナーへ直接101.112 ETHを送金しています。これが今現在最も高額な手数料のようです。
https://etherscan.io/tx/0xed3f658f0b812a17c1af4e39033c4b684ff64987dc26abcfed006080eac4c68d
Big boy arb — UniswapとSushiswapを使ったなんの変哲もないアービトラージです。Aaveからフラッシュローンで借りてきた1000 Ethを原資としてWETH/DAIでDEX間の価格差を利用したアービトラージを行い45 Ethほどの利益を上げています。そのうち40 Ethをマイナーへ直接送金し、5 Ethをアービトラージの利益として回収しています。これまでトランザクションがリバートしてガス代を無駄にするケースがあったと思いますが、Flashbotsであればガス代は0でマイナーが取り込んだ場合のみ手数料を支払えばよいのでアービトラージャーはリスクフリーでトランザクションをMEV-Relayへ投げることができます。
https://etherscan.io/tx/0x5e1657ef0e9be9bc72efefe59a2528d0d730d478cfc9e6cdd09af9f997bb3ef4
Multigrain Toast — dYdXのSoloMargin、UniswapとBalancerを使ったアービトラージです。dYdXのSoloMarginでまずは110,627 Ethほど借りてきます。一部のWETHをHYPE、METRIC、BUILDなどを経由してWETHへ戻しています。トータルの利益は8.6 Ethほどでそのうち2.6 Ethをマイナーへ直接支払っています。Searchersの利益としては6 Ethですね。
https://etherscan.io/tx/0xe7692082844eb95d5e0946cd6f17031f435e1bf8ef5e14a2d14e7bd423f4e75e
Sandwitching — 3月ごろに議論を巻き起こしていたサンドウィッチ攻撃です。サンドウィッチ攻撃については上記の”MEVとは”でも紹介しましたが、ここではサルモネラにも触れておこうと思います(後述します)。サンドウィッチ攻撃はUniswapなどのAMM上での価格スリッページを利用して利益を得る取引です。例えばある交換トランザクションの前に同様の取引を行うトランザクションと、ある交換トランザクションの後に対象トークンを売るトランザクションを差し込むことでターゲットにされたトランザクションを犠牲にして利益を得る方法です。
従来MEVのない状態ではサンドウィッチ攻撃を行うことにリスクがありました。なぜなら他のボットや取引がmempoolのオーダリングによってサンドウィッチ攻撃のトランザクション間に差し込まれる可能性があり、トランザクションの順番を制御することはできなかったからです。Flashbotsのトランザクションバンドルではサンドウィッチのトランザクションが成功しブロックに取り込まれたときだけ手数料を支払うため攻撃が容易になったという側面が考えられます。[7]
このようなサンドウィッチ攻撃を行うボットはかなりの数存在するようですが、サンドウィッチャーを攻撃するサルモネラというコントラクトもあるのでご紹介します。このサルモネラ菌のコントラクトは通常のERC-20のトークンコントラクトの _transfer
関数が改良されています。トークンオーナー以外からの呼び出しの場合に trapAmount
として10分の1のトークン量しか返しません。この差分は Ownable
などを使ってトークンオーナーが回収できるようにします。
このサルモネラ菌コントラクトを開発した方が実際にデプロイしてテストしたところサンドウィッチ攻撃を行うボットによって攻撃され、68 Ethと35 Ethを回収できたそうです。ただし数日後にはサンドウィッチャー側の対応によってこのコントラクトは有効ではなくなってしまったとのこと。10%のトークンしか戻ってこないためその点を考慮すれば、このトークンがおかしいということはすぐに判明してしまいそうです。[8]
- サルモネラ菌コントラクトをデプロイする
- UniswapでサルモネラとEthの流動性プールを作成する
- サンドウィッチボットが好みそうなトランザクションを作成する
※低いガス手数料の設定、ガス代を柔軟に変更可能とする、等 - トランザクションを送出してサンドウィッチ攻撃を待つ
ただし以下のスレッドで言及されているとおりサルモネラコントラクトをワークさせるためにはUniswapへのある程度大きな流動性提供や、サンドウィッチ攻撃を誘因するためのトランザクション作成、モニタリングシステムなどが必要なため誰もが作成可能なものではないという点は重要です。疑わしいトークンのプールは対象にしない、少額で挙動を確認するなどサンドウィッチャー側の対応も洗練されてくると考えられます。
simple-arbitrageの手引き
Flashbots Transparency Reportでテンプレートとして発表されたsimple-arbitrageというリポがあります。これはMEV Searcherボットで単純な2方向のアービトラージの機会を探索し、Flashbotsへブロックの先頭に含まれるような手数料を払う”Flashbots Bundle”を作成するものです。今回はこのレポをフォークしてGoerliテストネットで動作を確認してみました。FlashbotsのインフラはメインネットとGoerliテストネットのみで現在展開されているようです。RinkebyやKovanなど他のテストネットにはエンドポイントがありませんのでご注意ください。
dotenvを使ってGoerliテストネット用の環境変数を .env
ファイルへと格納しています。以下はこのボット動かすために実施した作業ステップです。UniswapFlashQueryはメインネットであれば既にデプロイされているものを使用できます。Goerliのものは新規にデプロイしました。BundleExecutor.solのデプロイ時にはコントラクトを実行できる executor
をコンストラクタへ渡しますがコントラクトを操作するために1. で作成するボット用のウォレットアドレスを渡します。
- Goerliテストネットでボット用のウォレットアドレスを作成
- (GoerliテストネットでUniswapFlashQuery.solのデプロイ)
- GoerliテストネットでBundleExecutor.solをデプロイ
※IWETHのコントラクトアドレスをWETH9へ変更要 - デプロイしたBundleExecutorのコントラクトへWETHを送金
※デプロイ時にETHを渡すことでWETHへラップできます - (対象とするAMMをUniswapとSushiswapへ限定)
// src/addresses.ts
export const FACTORY_ADDRESSES = [
// CRO_FACTORY_ADDRESS,
// ZEUS_FACTORY_ADDRESS,
// LUA_FACTORY_ADDRESS,
SUSHISWAP_FACTORY_ADDRESS,
UNISWAP_FACTORY_ADDRESS,
]
準備ができたら npm run start
でボットを実行できます。ただしいま現在エラーが発生しておりIssueを投げています。simple-arbitrageのエラー対応中 #21。今回フォークしたリポでは環境変数をGoerli用にセットしたり、コードへコメントを付けたりしているので参考にしてみてください。
※Goerliで動いたらここを更新
Flashbotsの今後ですがMEV-sgxというソリューションが将来的なデザインとして計画されているようです。現在のsealed-bid MEVをさらに推し進めMEV-Relayを経由せずにサーチャーが直接マイナーへトランザクションバンドルを送り、トランザクションがマイニングされるまでトランザクションが秘匿化されプライバシーが保たれるというアーキテクチャです。以下、従来のPGAとダークプール、現在のMEV-Geth AlphaとMEV-sgxの比較表になっています。
MEV-sgxやETH2.0におけるMEVの取り扱い等については今後の議論となっているようです。今後動向を追っていきたいと思っています。[9] [10]
まとめ
- MEV(Miner Extractable Value)とは、Ethereumにおいて主としてマイナーがトランザクションを任意に含めたり、除外したり、並べ替えたりすることを通じて得られる利益のことである
- FlashbotsはMEVのネガティブな外部性やセキュリティリスクを軽減するために組成された研究開発組織で、Dark Forestの照射、MEVの民主化、MEVの再配分の3つのアプローチでMEVの危機へ対応している
- SearchersはEthereum p2pネットワークではなく、MEV-relayへFlashbots Bundleを送り、トランザクションの入札をガス価格もしくは直接マイナーのコインベースアドレスへの支払いとして設定します
- Flashbots BundleのトランザクションはMEV-Relayを通じてMEV-Gethを動かしているマイナーのノードへ送られ、MEV-Gethはバニラブロックよりバンドルを含むブロックの方が有益であればそれを優先します
Reference
- [1] Ethereum is a Dark Forest
- [2] Demystify the dark forest on Ethereum — Sandwich Attacks
- [3] Ethereum’s Dark Forest is worth cultivating
- [4] Ethology: A Safari Tour in Ethereum’s Dark Forest
- [5] Miners, Front-Running-as-a-Service Is Theft
- [6] mev-blocks API
- [7] Critical analysis of Flashbots
- [8] Wrecking sandwich traders for fun and profit
- [9] Released ethresearch post: MEV-SGX Proposal
- [10] Released research post: MEV in ETH2 — an early exploration