DeFiで落ちてるお金を拾いたいブログ

DeFiについてのメモ書きやポエムを投下する予定です

MEV と Flashbots について - 基礎編

f:id:vividot:20210416215913p:plain

はじめに

はじめまして、ビビドット (@vividot) | Twitterと申します。

本記事では、MEVとFlashbotsについてFlashbotsを利用しない一般ユーザ向けに簡単に概要の解説を行います。
間違いや、こういう表現にした方が良いなど、ご指摘がありましたらTwitterかコメントにてよろしくお願いいたします。

MEV とは?

早速本題に入りますが、MEVというのはMiner Extractable Valueの略で、直訳すると「マイナーが抽出することの出来る利益」となります。 イマイチ分からないと思いますが、順を追って説明します。

トランザクションの順番について

まず、マイナーは通常Gas Priceが高いTXから順にブロックに入れていくことで得られる利益を最大化しています。
なので、私達Ethereumユーザは高いGas Priceを提示するとすぐにブロックに入れてもらえて、低いGas Priceを提示するとTXが通るのを待たされる訳です。

また、ブロックに含まれるトランザクションには順番があります。 例えば先着1名しか買えないNFTがある時、ブロック内のトランザクションに順番がなければ、誰が買えているのか分かりません。
順番があることによって、同じブロックでも買えたTX、買えなかったTXがある訳です。 そして、この順番もマイナーの利益を最大化にするためにGas Price順に並べられています。

ここまでは、今までEthereumを利用してきた方ならば、なんとなく感覚と一致していると思います。

実は…

しかし、Ethereumの仕様としては、ブロックにどのTXを入れるかであったり順番であったりは指定されていません。 つまり、Gas Price順に並べてもいいし、マイナーがTXを受け取った順に並べてもいいし、自分が好きなTX(例えばUniswapを利用するTX)だけを入れてもOKです。
そういうことをするマイナーが存在しないのは、より多くのEtherを得るという目的に反するからです。

しかし、DeFiの躍進に伴ってトランザクションの順番というものが重要になりました。 「フロントランニング」や「バックランニング」がその最たる例で、Gas Priceを調整することで自分のTXを他人のTXの1個前や1個後に差し込むことで利益を得ることに誰かが気づき、フロントランナーとして忌み嫌われる存在が生まれました。

その後「マイナーがトランザクションを意図的に選択したり並び替えたりしたら同様の利益を得られるんじゃね?」と考えた天才が現れまして、これをMEVとして「Flash Boys 2.0」という論文で提唱しました。 ちなみに、論文はIEEE Symposium on Security and Privacy 2020というすごい学会で採択されており、ここから同じ内容の論文を読むことができます。


Flashbots とは?

FlashbotsというのはMEVに関する研究開発組織であり、次の3つの目標を掲げています。

① MEVを民主化すること

前述のMEVの説明では、マイナーがブロックに入れるTXを決めると書きましたが、正確にはマイニングプールがブロックに入れるTXを決めています。

また、現状Ethereumのマイニングプールというのは特定のプールにハッシュレート(マイニングするパワーを定量的に示した値)が集中しています。 例えばpoolwatch.ioによると、上位3つでネットワーク全体の50%を超えるハッシュレートがあります。

f:id:vividot:20210416170911p:plain:w750

そのため、MEVの利益というのは、これらのプール自身もしくは関係者などの一部のプレーヤーに独占される可能性があります。 このように権力や資本が集中するのはセキュリティ的な弱点かつEthereumの特性を損なっていると考えられます。

よって、MEVの独占を防ぐためにMEVのためのオープンソースのインフラを用意する必要があり、FlashbotsではMEV-gethやFlashbots Alphaの開発・提供をしています。

②MEVに透明性をもたらすこと

Ethereumの一般ユーザにとってMEVは馴染みがなく、MEVの存在を知っていたとしてもMEVの実態は不透明です。 仮にMEVの実態が明らかになれば、ユーザは自身に損失を発生させないようなTXが出せたり、開発者はMEVを抑える仕組みを用意したりできるかもしれません。

一方、エコシステムの規模が大きくなるにつれて、ますますEthereumの特徴である透明性が失われて実態が不透明になっていくため、FlashbotsではMEVによる影響を可視化するMEV-Exploreを提供しています。

③ MEVを再分配すること

現在、MEVを得ているのはマイナー(マイニングプール)と後述するFlashbots Alphaを利用したトレーダーのみです。

Flashbotsでは、Ethereumのユーザやシステムの安定性のためにMEVの再分配が必要になると考え、目標に入れているようです。 特にまだ具体案などは出てきていません。


Flashbots Alpha

研究開発組織Flashbotsの代表プロダクトがFlashbots Alphaであり、一般にFlashbotsと言ったときにはFlashbots Alphaの事を指す場合も多いです。

Flashbots Alphaの仕組みを単純化して説明すると「マイニングする時、このTXをブロックの一番上に持ってきてくんない?」と頼みながらMEV-gethを利用するマイナーにTXを渡すシステム、それだけです。
もちろんマイナーも慈善事業ではないので、いくつかの条件を満たす必要がありますが、ここでは割愛します。

実際のMEVの例

MEVというのは、裁定取引(アビトラ)から特定のトークンのmint、秘密鍵が流出した/明らかなアドレスに入っているNFTやトークンの救出まで多岐に渡ります。

例えば、このTXは、BalancerとCurveとUniswapを用いた何の変哲もないアビトラです。

注目するところはGas Priceが0ETHになっていることブロック内におけるTXの位置が1番目になっていることです。 そしてガス代の支払いは、マイナーのアドレスへ直接送金されています。

f:id:vividot:20210416185556p:plain

つまり、このユーザはFlashbotsを用いることでアビトラTXをフロントランニングや他の競合から守りながら、成功した場合にのみ(利益から)ガス代を払うことができます。

(補足ですが、Gas Priceはゼロでなくても問題ありません。)

Flashbots Alpha による一般ユーザへの影響

では、Flashbotsが普及することによって一般ユーザに何か影響はあるのでしょうか?

まず、損失を考えてみると、今までフロントランニングされていたTXがFlashbotsで実行されるようになるだけなので、損失面での影響はありません(フロントランナーが儲からないぐらいめっちゃ高いガス代で出してた場合などを除く)。

一方、良い影響としてはGas Priceへの低下が第一に挙げられます。最近、Gas Priceが著しく安くなっており、日や時間帯によっては50gwei代でもTXが通ったと思います(スクリーンショットはgasnowより)。

f:id:vividot:20210416200243p:plain

これが、Flashbotsの影響なのか、それともBSCなどサイドチェーンの影響なのかを断言するには実際にデータを取ってみなければ分かりません。 ただし、要因の1つとしてFlashbotsがあることは事実だと思います。

なぜならFlashbotsに参加するマイニングプールの増加に伴って(現在ネットワーク全体のハッシュレートの58%以上)、裁定取引などを行うユーザのうちFlashbots経由でのみTXを送信するユーザが増えてきたためです。
上の例に出したTXもEthereumのP2Pネットワークには送信されておらず、Flashbots経由でのみに送信されています。

Flashbots経由でのTXもマイニングされた場合にはガスを消費するのでガス消費の需要が減っているわけではありません。
減っているのは、bot同士でのガス代の釣り上げやGas Priceバトルで負けてFailed TXで消費されるガスだけです。 推測ですが、それらの積み重ねがGas Priceの低下に繋がっていると思われます。

一般ユーザがFlashbotsを使う

他にも、前述したMEV「秘密鍵が流出した/明らかなアドレスに入っているNFTやトークンの救出」も一部のユーザにとっては嬉しいかもしれません。

通常、秘密鍵を流出させてしまった場合、アドレスに含まれるEtherは即抜かれます。 一方、NFTであったりERC-20トークンであったりは放置される場合もあります。 攻撃者がそれらの価値を知らない場合もありますし、それらを回収するために被害者がまたEtherを入れるのを待っている場合もあります。
(余談ですが、意図的にトークンが入ったアドレスの秘密鍵をばらまいている攻撃者もいます

そこでFlashbotsを使えばEtherを入れずにNFTやトークンを回収する、ということができます。

また、一時期Twitterで「JPYCを買ったけどJPYCをETHにスワップするためのETHがない」というツイートが話題?になりましたが、Flashbotsを使えば「JPYCをETHにswapして、swapしたETHからマイナーにガス代を払う」ということも技術的には可能です。

最後に

以上、MEVとFlashbotsについて、一般ユーザの理解を深めるための基礎編でした。

以下に示す内容については、より複雑な話になるので「MEV と Flashbots について - 発展編」としてそのうち書こうかと思います(需要も少ないと思うので、後回しになります)。

次のネタ
  • フロントランニングの問題点(ネットワークへの負荷・ガスの無駄遣い)
  • FlashbotsのハッシュレートやMEV-Exploreについて
  • Flashbotsの詳細なメリット(mempoolのバイパス・ガス代の節約・ネットワークへの負荷軽減)
  • Flash Boys 2.0で挙げられているMEVによって起きるリスク
  • uncle bandit attack と呼ばれるFlashbotsユーザのTXをある条件下で横取りする手法
  • フォーク(reorg)の話(etherscanで見れるreorgと自分のノードで見かけるreorgが結構違う)
  • 自分自身がFlashbotsを利用している点からも書けることがあれば😎

参考サイト

Flashbots – Medium
Flashbots · GitHub