MEV Scam踏んでみた

おはこんばんにちは

今回はTwitter (X) などのリプライやメンションタグ付けでよく見る、MEVのスキャムについて、実際に踏んでみたり深掘りしてみたいと思います。

1/5 MEVとは

MEVは 最大抽出可能価値 (Maximal Extractable Value)の略称で、validatorがブロック内のトランザクションの順序を入れ替えたり、除外したり、追加したりすることで得られる最大限の利益を指します。

端的に言うならば、TX承認の順位付けを意図的に利用して自分がお金儲けできるような構造にすることが出来るということです。

その具体例として、ArbitrageSandwichLiquidationなどが挙げられます。

Ethereum公式 docにも書いてるので、ぜひ読んでみてください。

https://ethereum.org/en/developers/docs/mev/

2/5 今回のscamについて

今回取り上げるのが、下記のツイートです。

https://twitter.com/darak_btc/status/1764301180539134377

Arbitrage MEVbotによって週に7~9ETHの利益を得ているという旨が書いてあります。スクショがEigenPhiのポートフォリオっぽいですね

サイトに飛んだら、Explained Best Arbitrage Strategy! というタイトルで記事が書いてありました。

少し疑問なのが、動画で解説している限りFRONT RUNNINGのことを主張しているので、ArbitrageではなくSanwichなのではと思いました。

https://videosetup.info/upro.mp4
https://videosetup.info/upro.mp4

3/5 実際にdeploy&実行

🚨本番環境でのデプロイは厳禁です。🚨本番環境でのデプロイは厳禁です。

指示された通りメインネット上で行うのは流石にナンセンスなので、今回はHolesky上で実験します。

また、疑問に思ったのが、Remixでdeployを行うと記述されていますが、公式リンクとは別のものが指定されています。(本家はremix.ethereum.org)

今回はカモになる回なので、記述通りに行います。

post image

ちなみに、なぜHoleskyなのか。

それはEthereum上でDev活動を行っていたら1,000ETHがairdropされていた為、余分なETHを消費できるからです笑

では、本題に戻ります。

実際に指定されたRemixIDEでコードをコピペしdeployを行いました。

そして、コントラクトに1ETHをデポジットしたら準備万端です。(この時点でお察し)

post image

ヨシ!、あとはスタート関数を実行するだけだ!!!!

1/3
1/3
2/3
2/3
3/3
3/3

まあ、そうっすよね。

ちなみに送信先アドレス(スキャマー)をmainnetのetherscanでサーチしたところ、丁度同日にリアルの1ETHが送られていることが確認できました。

スキャマー儲かってんねえ!!

0x3cd32e6BFE4A8883eC22F08818f0d0e1C2fbcd8C
0x3cd32e6BFE4A8883eC22F08818f0d0e1C2fbcd8C

4/5 コードを見てみる

見てる感じ同一のアドレスではなさそうなので、何かしら内部ロジックでアドレス生成を行っているのでしょうか。

割と複雑なので、海外ニキのRedditをみてみました。

mempool関数という名のアドレスジェネレーターですね。

https://www.reddit.com/r/solidity/comments/1ascrck/comment/kqqx3wx/?utm_source=share&utm_medium=web3x&utm_name=web3xcss&utm_term=1&utm_content=share_button
https://www.reddit.com/r/solidity/comments/1ascrck/comment/kqqx3wx/?utm_source=share&utm_medium=web3x&utm_name=web3xcss&utm_term=1&utm_content=share_button

流れとしては

mempool関数を呼び出して (“x”, checkLiquidity(getMemPoolOffset())) を渡す

post image

checkLiquidity()は別の関数で、getMemPoolOffsetを引数として受け取る(値は882280で、DBB88という値を返す)

そして、最終的にアドレスとしての値が出力されるようにロジックを呼び出す

post image

最後に、ここからparseMemoryPool関数に通し、bytePairsを16進数に変換して出力する値をアドレスに変換する

post image

端的に言えば様々な関数を用いてbytePairsの数列を作成し、16進数に変換することで最終的なEthereumアドレスに変換される感じです。

ただ、個人的に疑問なのが、なぜ操作可能なEOAアドレスを意図的に生成することが出来ているのか。(別にSKも入れてないし)

モジュールのimport先も普通に公式(使ってはいない)をインポートしてるようです。

post image

何かしらのAttackツールがあるのでしょうか?謎です。

5/5 結論

楽して儲けようとしないでください

冷静に考えて稼げるコードをpublicで提供すること自体意味不明です。

もし本当だったら、それはアラブの石油王以上の存在か超天才エンジニアです。

https://twitter.com/dosu0217/status/1526863703361998848
https://twitter.com/dosu0217/status/1526863703361998848