この記事では、CosmosにおけるMEV問題を解決しようとしているプロジェクト『Skip Protocol(スキップ・プロトコル)』を紹介します。
MEVの議論は基本的にEthereum上での課題とされており、グローバルのベンチャーキャピタルやリサーチチームがこの問題に取り組んでいます。
しかし、MEVの問題はEthereumに限ったものではありません。
本記事では、CosmosのMEV問題、およびその解決策を模索しているSkip protocolについて詳しく解説していきます。
MEVとは?
MEV(Maximal Extractable Value)とは、ブロック内のトランザクションの順序を入れ替えることによって得られる利益のことです。
『MEVを抽出する』『MEV対策を行う』といった使われ方をしており、『悪いMEV』『良いMEV』等の分類があります。
基本的にはこの『悪いMEV』をどうやって無くしていくのか、という問題が議論の中心となっています。
悪いMEVの具体例
上記のような解説だとイメージがしにくいと思うので、より簡単に例を用いて説明しましょう。
わかりやすい説明のために、細かい仕様を省略している部分や実態とは異なる部分があります。
AさんはUniswapでトークンXを購入しようと、トランザクションAを発行しました。
このトランザクションAはまず、mempool(メンプール)という未処理のトランザクションの待機所のような場所に入ります。
mempoolは公開されており、誰でもRPCノードを通じて確認することができます。
ここで、Bさんが登場します。
Bさんはmempoolを常に監視しており、AさんのトランザクションAを発見しました。
そこで即座にBさんは、AさんのトランザクションAよりも早く実行されるようにガス代を調整したトランザクションB1と、トランザクションAよりも後に実行されるように調整したトランザクションB2、の2つのトランザクションを発行します。
トランザクションB1の中身は、トークンXを大量に購入する、という内容です。
これを行うことによって、トークンXのpoolの比率が変わります。その結果、直後に行われるトランザクションAには想定より高い費用が掛かることになります(スリッページで許容できる限り高くなる)。
トランザクションB1の中身は、トークンXを大量に売る、という内容です。
これを行うことにより、スリッページ分でちょっと多くAさんに払わせた部分を、丸ごと回収することができます。
このようにして、BさんはAさんから、トランザクションの順序を入れ替えた(ガス代の調整を行った)だけでお金を抜き取ることができました。
これが、『悪いMEV』の筆頭であるサンドウィッチ攻撃と呼ばれる手法です。
ターゲットのトランザクションを挟み込むように自分のトランザクションを作成することで、ターゲットからお金を吸い取ることができます。
当然ながら、これは良くない事です。
この概念は株取引といった既存金融にも存在していますが、法律で禁止されています。
ここまでの話はEthereumにおけるMEVの説明ですが、Cosmosではmempool周りのルールが多少違います。
簡単に言うと、Cosmosではガス代を調整してもトランザクションの順序を入れ替えることができません。
EthereumとCosmosのトランザクション処理の違いについては、以下のツイートで丁寧に解説しているので、気になる方は参照してみてください。
https://twitter.com/Stir_Network_JP/status/1692144293753020638?s=20
CosmosにおけるMEV問題
OsmosisやJunoといったCosmos系チェーンのmempoolのルール(つまりTendermintの基本ルール)は、Ethereum等とは違い先着順になっています。
つまり、トランザクションが発行された順番に従って処理され、その順番の通りにブロックに入るということです。
このような仕様をFCFS(First-come, First-servedの略)と呼びます。
CosmosのMEV はFCFS というルールの影響により、MEV抽出の手法と問題点がEthereumとは少し異なります。
結論から言うと、CosmosにおけるMEVサーチャーはアービトラージbotをできるだけ多くのバリデータやフルノードの近くに配置し、大量にスパムトランザクションを投げることでMEVを確保しようとしています。
上述した例においては、Bさんをサーチャーと呼びます。
CosmosにおけるMEVサーチャーの戦法では、ネットワークに対して以下のようなデメリットがあります。
デメリット | 理由 |
執行リスク | チェーンがどれだけ混雑していても、特定の取引がトレーダーやエコシステムにとって「より重要」であったり、「経済的価値が高い」ことを表現する方法が存在しません。他より優先して処理したいトランザクションがあっても、それを叶えることができないのです。 |
ブロックスペースとガスの浪費 | 大きなアービトラージの機会があると、それを取ろうとした大量のトランザクションが生まれますが、実際には勝利者は一人しかおらず、他のトランザクションは無駄になってしまいます。しかし全て最終的に実行されるので、ブロックスペースやガスは消費することになります。 |
利益の集中化 | ほとんどすべてのアービトラージは、レースに勝つために必要な大規模な低レイテンシインフラを用意できるごく少数のアドレスによって獲得されており、MEV収益は集中しています。 |
参加者の統合 | MEVサーチャーとバリデーターは、mempoolへのアクセスやトランザクションのブロードキャストを高速化するために、botやノードを同じサーバー上に置く垂直統合を行う可能性があります。これが行われると、トランザクションの検閲が可能になってしまいます。 |
ブロックチェーンの停止リスク | 大量のスパムトランザクションは、他のレイヤー1(例えばSolana)で起こったように、フルノードやバリデーターをノックアウトしてしまう可能性があります。 |
これらの性質は、今は問題ないかもしれませんが、Cosmosが成長しトランザクションが増えるごとにつれて負のスケールを起こします(他のチェーンの経験が証明しています)。
またそれとは別に、現在、バリデーターはMEVを獲得するために自らのトランザクションを検閲したり、再編成したり、注入したりするインセンティブが存在することに注意すべきでしょう。
そういったトランザクションであっても、バリデーターが有効なトランザクションを提案する限りはすべてコミットされてしまいます。
Skip protocolの概要
Skip protocolは、CosmosにおけるMEVの問題を解決しようとするプロジェクトです。
CosmosにおけるMEV対策のための複数のソリューションを開発しています。
Skipはそもそもブロックチェーンではなく、CosmosのMEV専門の開発者集団のようなイメージです。
独自トークンの発行予定もありません。
Skipの提供するソリューション
Skipには複数のソリューションがあり、代表的には以下の3つがあります。
それぞれ、MEV対策を施したいチェーンやバリデーターが使用する機能となっています。
- Skip Select
- POB
- Protorev
それぞれ全く違うアプローチを取っているので、以下にそれぞれについて解説していきます!
密封入札によるトランザクションのオークションシステム:”Skip Select”
この機能の要約
- Skip Selectは、MEV-BoostのCosmos版
- Sentinel(センチネル)というリレーにサーチャーがトランザクションを送り内部でオークションが行われる
- 勝利したトランザクションは、ブロックの最初にトランザクションを入れることができる
- バリデーターがこれを導入することで余計なトランザクションのフィルタリングや、バリデーターの収益の向上が見込める
概要
トレーダーがチップトランザクション(tipped transactions)をバリデーターに送ることによって、指定したトランザクションをブロックの最上位に優先して入れることができます。
もちろん複数のトランザクションをまとめてバンドルとして送ることもできます。
Skipのリレーである『Sentinel(センチネル)』というRPCエンドポイントを通じて提出されたトランザクションは、通常のトランザクション(従来の RPC エ ンドポイントを通じて提出されるもの)とは違って、ブロックの最初のほうに挿入されます。
そしてバリデーターはブロックに含まれるトランザクションのチップを受け取ることができます。
現時点ではJuno, Terra2, Neutronで展開されており、実際に利用できます。
オークション
異なるトレーダーが競合するトランザクションを提出した場合、Skipでは最も高いチップを持つトランザクションをバリデーターに転送するようになっています。
これは実質的にオークションであり、オークションに負けるか、あるいは失敗するようなトランザクションはそもそもブロックに追加されないため、スパムを防ぎ、一般ユーザーのためのブロックスペースが節約されます。
以下の図は、Skip Selectにおけるトランザクションのフローを表しています。
トレーダーはSkipのリレーであるSentinel にチップトランザクションや優先対象のトランザクションを送り、Sentinel内でクローズドオークションが行われ、ブロックスペースを落札したトランザクションのみがバリデーターに送られます。
画像引用元:Skip - What it is & How it Works 🧐
秘匿化
オークションに落札されなかったチップトランザクションやトランザクションは、他のトレーダーやバリデーターには表示されません。
これにより、mempool内でのトランザクションのコピーを防いでいます。
バリデーターへの利益
- Skip Selectを採用するバリデーターは、EthereumでMEV-Boostを採用するバリデーターと同じように、サーチャーのオークション収益が手元に入ってきます。またこの収益はデリゲータ―と共有・分配できます。
- Sentinelはオークションを通して実質的にトランザクションのフィルタリングも行っているので、参加するバリデーターはスパム対策も行え、ダウンリスクが下がります。
エコシステムへの利益
Skip Selectを採用することによってエコシステムにもたらされる利益としては、以下の3つが挙げられます。
- バリデータやステーカー等への利回りが、MEVの利益が分配されればされるほど増加し、より多くの流動性とユーザーをエコシステムに誘引します。
- スパムBOTのインセンティブが低下するため、長期的なチェーン停止リスクが減少します。
- トレーダーがより洗練されたアービトラージ戦略を実行できるようになり、アービトラージの失敗による経済的デメリットが減少するため、新たなビジネスやアービトラージの機会が増加します。
チェーン組み込み型オークションシステム: “POB”
この機能の要約
- ブロックビルディングをプロトコル内部で行い、MEVの発生源であるオフチェーン領域をなくすためのモジュール。
- 外部の参加者、インフラ、オークション、ビルダーに依存せず、すべてバリデータによって実行されるプロトコル内ブロックスペースオークションモジュール。
- Skip SelectはMEV-Boostと同じようにプロトコル外のものだったが、POBはプロトコルに直接組み込む形でこれと同じような働きをする。
概要
POBは、”Protocol Owned Builder”の略で、”プロトコル所有のビルダー”、と直訳することができます。
CosmosSDKのABCI++を利用して作られており、ABCI++(Cosmos SDK v0.47.0以上)が使用できるチェーンであればどこでも導入できますが、コアレベルの変化を伴うためチェーン側のガバナンスを通さなければ導入がそもそもできません。
ABCI++で入札を取り込み各バリデータのmempoolに格納することで、ブロックオークションを透明性のある状態で公正にホストできます。
MEVサーチャーは、トランザクションのバンドル、入札、タイムアウトを含む特別なAuctionTx
というものを送信することで、ブロックの一番上ポジションである”トップバンドル”という枠に対して入札します。この枠は現在は一枠しかないようです。
オークションは、現在のproposerが次の高さのブロックを構築し始めたときに終了します。落札されたbidはブロックの先頭に含まれ、コンセンサスでbidが無効でないことが確認されたら、次のブロックで実行されます。
またチェーン側は、オークションの開催方法と可能な入札の種類(フロントランニングの保護、オークション手数料の分配ルールなども含む)を好きに選び、ユーザー側に強制させることができます。
技術的な仕組み(Githubからコピー&翻訳)
POBのモジュールはx/builder
と呼ばれます。
これはCosmosチェーンがトップオブブロックのオークションを直接プロトコル内でホストできるようにするCosmos SDKモジュールです。
オークションの収益(MEV)は、チェーンの設定に基づいて再分配されます。
x/builder
モジュールは、ユーザーが実行されることを望むトランザクションの順序付きリスト(バンドル)と共に入札を提出できる新しいMsgAuctionBid
メッセージを導入します。
これにより、他のトランザクションがそのブロックで実行される前に、ブロックの最上位でそのバンドルを実行することを要求できます。
x/builder
モジュールは、AuctionMempool
と連携して動作します。
- オークションは直接
AuctionMempool
で開催され、提案者が新しいブロックをPrepareProposal
で提案すると、勝者が決定されます。 x/builder
は、オークションの入札の必要な検証と、その後の状態遷移を行うための機能を提供します。
POB v1の課題
POB v1の課題として挙げられているものには、以下の2つが挙げられます。
- 完全な検閲耐性が現在は無い
- 実はバリデーターはオークション後に全ての入札を拒否して自分でブロックの最初を占有することができる
- v2でvote extensionsというものを実装して解決予定
- MEVのプライバシー、秘匿化がない
- 現在POBではサーチャーがトランザクションをpublic mempoolに投げることになっている
- これでは投げた(公開された)トランザクションを別のサーチャーが見つけて同じ内容かつより高いbidで投げられ、”MEVを横取り”されてしまう
- v3で暗号化を実装して解決予定だが、実装はかなり難しいらしい
- POBではできてないが先のSkip Selectでは秘匿化オークションができるのでそっちを使うのも手
チェーン組み込み型アビトラモジュール: ”ProtoRev”
この機能の要約
- 『良いMEV』に分類されるアービトラージをプロトコル自身が行うためのプロトコル組み込み型モジュール。
- Protorevはチェーン上のアビトラ機会を特定し、実行して、その利益をコミュニティに還元する。
- 現在はOsmosisで採用・実装されている
概要
protorevは、"protocol revenue(プロトコルの収益)"の略であり、このモジュールそのものがプロトコルに利益をもたらすところから命名されています。
protorevは、端的に言えば「チェーン組み込み型自動アビトラbot」です。アービトラージBOTの機能である、①アービトラージ機会を探して、②実行するという2機能を、ブロックチェーンそのものが行います。
つまり、MEVの抽出をユーザー(サーチャー)がやるのではなく、プロトコル自身が行う仕組みです。
このアービトラージによって得た利益はいくつかの”モジュールアカウント”と呼ばれるアドレスに現在も溜まり続けており、ガバナンスを通してこの収益をどのようにユーザーに還元するかを今後決めていく予定です。
それとは別で、Skipチームが1年目はprotorevが生んだ利益の20%、2年目は10%、それ以降は5%を継続的に受け取ることが決まっています。
2023年8月時点では、Osmosisチェーン上の3ホップのサイクリックアービトラージにのみ対応しています。
監視ツールを見てみよう
Protorevには有志の方が作成した監視ツールが存在します。
このダッシュボードからどのアカウントがモジュールアカウントなのか、どのようなアービトラージが行われたか、いくら溜まっているか等の情報が確認できます。
2023年8月時点では、約3,500 $ATOM、約3,400 $USDC、約180,000 $OSMOほどの利益が溜まっているようです。
技術的な仕組み(Githubからコピー&翻訳)
postHandler
は、トランザクションでスワップされたプールを抽出し、サイクリックアービトラージの機会があるかどうかを判断します。
- もし機会がある場合、ハンドラは最適なルートを見つけて実行し、プールをリバランスし、アービトラージの利益をモジュールアカウントに返します。
- 利益を受け取るためのアドレス(=モジュールアカウント)は現在はSkipチームが保持していますが、資産を動かすにはガバナンスでの決議が必要です。
- protorevモジュールが有効化されているかどうかを確認します。
(モジュールが無効化されている場合、何も起こりません。) - トランザクションで取引されたすべてのプール(
ExtractSwappedPools
)およびトレードの方向を抽出します。 - 上記の各スワップに対してサイクリックアービトラージのルートを作成します(
BuildRoutes
)。 - 各ルートが実行可能かどうかを判断し、サイクリックアービトラージの機会があるかどうかを判断します(
IterateRoutes
)。 - 潜在的な入力量の範囲でバイナリサーチを使用して、スワップする最適な金額とそれに対する利益を決定します(
FindMaxProfitForRoute
)。 - 各ルートの利益を比較し、最も利益が高いルートと入力金額を保持します。
- 最良のルートと入力金額が利益 > 0を持つ場合、取引を実行し(
ExecuteTrade
)、チェーンに代わってプールをリバランスします(MultiHopSwapExactAmountIn
)。 - 利益をモジュールのアカウントに保持し、これからの分配のために保持します。
余談:dYdXとSkipの連携
分散型取引所であるdYdXは、現在イーサリアムからCosmosへの移行をv4でCosmosSDKを使用した独自チェーンを作成し、現在テストネットを開催しています。
最近では、dYdXチェーンのバリデータが悪いMEV取引を行なっていないかどうかを可視化するダッシュボードを、Skip protocolと連携して作成しています。
https://twitter.com/dYdX/status/1686902138234892290
こちらのページからそのダッシュボードを確認できます。
また、該当記事の日本語訳も存在するので、読んでみてください!
dYdXは、現時点ではSkip Select等の既存ソリューションを導入するわけではなく、このようなバリデーター監視用ダッシュボードをSkipチームと協力して導入しました。
『正直なバリデーターとそうでないバリデーターを注文板の乖離から推測する』というダッシュボードは、プロトコルそのものに板取引の機能が内蔵されているdYdXだからこそ作ることができる興味深い試みです。
プロトコル単位でのMEV対策はかなり慎重に行われるべきであり、v4の構造はDAOガバナンスを通じてアップデートされていく予定です。
そのため、2023年8月時点ではコアレベルでの変更ではなく、このようなダッシュボードの作成を通じて「悪い」MEVを(行っているバリデーターを)可視化しようとしているのではないかと考えられます。
まとめ
昨今、日本国内でもMEVの話題、議論がちらほらされるようになってきており、注目度が上がっていることを感じ取っています。
事実として、日本語でMEVについてわかりやすく解説する記事が出たり、MEV関連のオフラインイベントの開催なども行われています。
その上で、Cosmosにも先進的なMEV対策があることを知ってもらえればと思いこの記事を執筆しました。
Skip protocolはCosmosのMEVに関する専門家集団であり、様々なMEV対策ソリューションを開発しています。
- オフチェーン秘匿化オークションシステムであるSkip Select、
- 組み込み型オークションシステムであり、CosmosSDKに内蔵されているPOB、
- Osmosisが自動で自チェーン上のアービトラージを行うprotorev、
- dYdX Chain(執筆時点ではテストネット)上でMEV抽出を行っているValidatorを可視化するMEV dashboard
MEVを完全に無くすことは難しいですが、必要なのは『パーミッションレスに使用できる何らかの対策方法』があることです。
SkipはCosmosエコシステムに対して、そういった点で大きく貢献しているプロジェクトだと考えます。
参考文献
https://coinmarketcap.com/alexandria/article/frontrunners-and-mev-explained-how-to-beat-the-bots
Skip - What it is & How it Works 🧐
Skip Select | Skip Protocol Docs
x/builder: The first Sovereign MEV module for protocol-owned building
https://github.com/skip-mev/pob
Osmosis ProtoRev by Skip Protocol — Osmosis Blog
Skip x Osmosis: Proposal to Capture MEV as Protocol Revenue on Chain