Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Jitoを使ったMEV Bot入門 / Super Tokyo - Tech Night

andooown
August 22, 2024

Jitoを使ったMEV Bot入門 / Super Tokyo - Tech Night

andooown

August 22, 2024
Tweet

Other Decks in Technology

Transcript

  1. @andooown Jitoを使ったMEV Bot⼊⾨ ⾃⼰紹介 / andooown • Software Engineer (iOS)

    / Crypto Botter ◦ 2023/12 Solana Botterデビュー ◦ 2024/4 A級達成 ▪ $WのAirdropで発⽣した鞘をとってた ◦ 最近はメンテできずB級.... • ネコと暮らしてる • https://andooown.dev/ ◦ 各種SNS Linkもこちらから
  2. @andooown Jitoを使ったMEV Bot⼊⾨ SolanaでTxが取り込まれるまで • SolanaではLeader NodeがBlockを⽣成する ◦ Leader Nodeは持ち回りで選ばれる

    ◦ Leaderが作ったBlockに他のValidatorが投票を⾏うことでコンセンサスを形成 →Blockchainを繋いでいく New Block Leader Vote Vote
  3. @andooown Jitoを使ったMEV Bot⼊⾨ SolanaでTxが取り込まれるまで • ネットワーク上には様々なNode ◦ Validator Node ▪

    Leader ◦ RPC Node ▪ api.mainnet-beta.solana.com ▪ Helius, Alchemy, Quicknode… Leader RPC
  4. @andooown Jitoを使ったMEV Bot⼊⾨ SolanaでTxが取り込まれるまで • Leaderは作ったBlockをネットワー クにばら撒いてVoteを募る ◦ Turbine •

    各ValidatorはLeaderが作った Blockに対してVoteを⾏う ◦ ネットワーク上で⼀定以上認められると Blockchainに取り込まれる https://www.helius.dev/blog/consensus-on-solana Leader Block Vote Vote
  5. @andooown Jitoを使ったMEV Bot⼊⾨ SolanaでTxが取り込まれるまで • 例) Txが通らない。Explorer上でも⾒つからない ◦ RPC Nodeには届いているが、Leader

    Nodeに転送されていない or 転送はされているが Leaderに選ばれなかった • 例) Txが失敗する ◦ Leaderに選ばれてBlockに含まれているが、何らかの理由でBlockchain上で実⾏に失敗した
  6. @andooown Jitoを使ったMEV Bot⼊⾨ MEVとは • Miner Extractable Value ◦ BlockchainでMiner/Validatorが特定のTxを使って得られる利益

    ◦ メブ ? エムイービー ? • 例) SOL→USDCのSwap Tx by User ◦ 前後にTxを⼊れることで利益を得ることができる → Front running, Sandwich ▪ 1. SOL → USDC by MEVer • USDCが買われるのでUSDCの価格が上昇、SOLの価格が下落 ▪ 2. SOL → USDC by User • ⾼くなっているUSDCを買わされる。さらにUSDCが⾼くなる ▪ 3. USDC → SOL by MEVer • 1で買ったUSDCを⾼い値段で売れるので、初期に投⼊したSOLより多くのSOLを 得る
  7. @andooown Jitoを使ったMEV Bot⼊⾨ MEVとは • SolanaではBlockに⼊る前のTxをRPC Node & Leader Nodeが⾒ることができ

    る ◦ SolanaはMempoolがない • Jito Mempool (停⽌中)を利⽤すること でRPC Node & Leader Node以外もTxが 覗けた https://www.helius.dev/blog/solana-mev-an-introduction Leader Tx
  8. @andooown Jitoを使ったMEV Bot⼊⾨ MEV Botとは • MEV Bot = ValidatorになってMEVを抽出するBot?

    ◦ ここでは「MEVに相当する利益を⾃動で得るBot」という意味 ◦ オンチェーンにある機会を拾って、最速で利益を得る ▪ 同じBlock ~ 次のBlockくらい ◦ Jito Mempoolが停⽌している今、本当の意味でのMEVを抽出するBotはハードルが⾼くなっ ている • 例 ◦ Arbitrage = DEX間の歪みを検知して裁定取引をする ◦ Liquidation = Lending Protocolの証拠⾦維持率を監視して、不⾜している債務を精算する
  9. @andooown Jitoを使ったMEV Bot⼊⾨ Jito Bundlesとは • Jitoが提供するSearcher向けサービス ◦ https://jito-labs.gitbook.io/mev/searcher-resources/bundles ◦

    Searcher = MEVの⽂脈において利益機会を探索して稼ごうとする⼈々 • 専⽤のEndpointを通して “Bundle” と⾔われるTxの塊を実⾏することができる Tx Tx Tx Bundle
  10. @andooown Jitoを使ったMEV Bot⼊⾨ Bundle Jito Bundlesとは • 順序保証: Bundle内のTxは順番通りに実⾏される ◦

    通常のRPCでTxを3つ送っても、その順番で実⾏されるとは限らない Tx 1 Tx 2 Tx 3 Block #N Tx 1 Tx 2 Tx 3 Tx Tx
  11. @andooown Jitoを使ったMEV Bot⼊⾨ Bundle Jito Bundlesとは • Atomic性: Bundle内のTxは同じBlock/Slotで実⾏される ◦

    [Tx1, Tx2, Tx3] で送ったときに、 [Tx1] はBlock N、 [Tx2, Tx3] はBlock N+1に着地するみ たいなことにはならない Tx 1 Tx 2 Tx 3 Block #N Txs Block #N-1 Block #N+1
  12. @andooown Jitoを使ったMEV Bot⼊⾨ Jito Bundlesとは • All or Nothing: Bundle内のTxすべてが成功するときのみBundleがBlockに

    取り込まれる ◦ Txが1つでも失敗するとBundle内のTxはBlockに取り込まれない Bundle Tx 1 Tx 2 Tx 3 Block #N Tx 1 Tx 2 Tx 3 Bundle Tx 1 Tx 2 Tx 3 Block #N ✅ ✅ ✅ ✅ ❌
  13. @andooown Jitoを使ったMEV Bot⼊⾨ Jito Bundlesとは (利⽤例) • Atomic Arbitrage (Back

    running) ◦ 例) SOL→USDCのSwap Txを検知して、USDC→SOLのTxを後ろに差し 込む ▪ 1. SOL → USDC on DEX A by User • USDCが買われるので、DEX A上ではSOLが安くなり、USDCが⾼くなる ▪ 2. USDC → SOL on DEX A by Bot • SOL → (DEX B) → USDC → (DEX A) → SOLというTxを実⾏することで、市場価 格(DEX B)で調達したUSDCをDEX Aで⾼く売ることができる ◦ [Tx 1, Tx 2] が連続で実⾏される必要がある ▪ Tx 1とTx 2が連続して実⾏されないと、DEX A上でのSOL/USDCの価格が変化してしま い、利益を得ることができない
  14. @andooown Jitoを使ったMEV Bot⼊⾨ Jito Bundlesとは • Tip (⼿数料) ◦ Jito

    BundlesではTxが選ばれるかどうかはオークションで決定される ◦ ⼿数料は特定のアドレスへのSOLのTransferの形で払う ▪ 通常のComputeUnitPriceではない ◦ 例) Tx: 3n4A9pxCSMhPG… ▪ Txの最後にJitotip AddressにSOLをTransferしている
  15. @andooown Jitoを使ったMEV Bot⼊⾨ Jito Bundlesとは • Tip (⼿数料) ◦ 単純なTransfer

    TxとしてTipを払わない ▪ [Tx 1, Tx 2, Transfer Tx] とすると、最後のTxだけを盗んで実⾏されたときにSOLが送 られてしまう ▪ Txとするにしてもオンチェーンのチェックを必ず⼊れる
  16. @andooown Jitoを使ったMEV Bot⼊⾨ jito-labs/mev-botを覗く • https://github.com/jito-labs/mev-bot ◦ Jitoが公開しているMEV Bot (Atomic

    Arbitrage)のソースコード ◦ Jito Mempoolを前提にしているので今は動かない ▪ andooownがA級を達成したときも、mev-botをRustに書き直したものを参考にしてい た
  17. @andooown Jitoを使ったMEV Bot⼊⾨ jito-labs/mev-botの構成 1. Jito Mempoolで流れてくるBlockに取り込まれる前のTxを監視 2. 1の中からDEX上でのSwap Txを検出

    a. JitoのAPIをつかってTxをSimulate b. Simulateした結果、DEX上のToken残⾼が変化していればSwap Txとみなす 3. 対応するSwap Routeを総当りして利益がでるRouteを計算 4. 3で決めたRouteでSwapするTxを作成 (Arb Tx) 5. [Swap Tx, Arb Tx]のBundleをJitoに送信 6. 5が成功すれば利益を獲得
  18. @andooown Jitoを使ったMEV Bot⼊⾨ jito-labs/mev-botの構成 • 2. 1の中からDEX上でのSwap Txを検出 ◦ JitoのAPIをつかってTxをSimulate

    ▪ https://github.com/jito-labs/mev-bot/blob/master/src/pre-simulation-filter.ts ▪ https://github.com/jito-labs/mev-bot/blob/master/src/simulation.ts JitoのsimulateBundle APIを利⽤ Simulateの前後のAccount Stateを 取得できるようにしている
  19. @andooown Jitoを使ったMEV Bot⼊⾨ jito-labs/mev-botの構成 • 2. 1の中からDEX上でのSwap Txを検出 ◦ Simulateした結果、DEX上のToken残⾼が変化していればSwap

    Txとみなす ▪ https://github.com/jito-labs/mev-bot/blob/master/src/post-simulation-filter.ts AMM DEXの場合、プール内のTokenの残⾼が変 動するので、それを利⽤して取引の⽅向を検知し ている • Token A↑ Token B↓ = A → B • Token A↓ Token B↑ = B → A • Token A↑ Token B↑ = 流動性の追加なので無視 • Token A↓ Token B↓ = 流動性の削除なので無視
  20. @andooown Jitoを使ったMEV Bot⼊⾨ jito-labs/mev-botの構成 • 3. 対応するSwap Routeを総当りして利益がでるRouteを計算 ◦ https://github.com/jito-labs/mev-bot/blob/master/src/calculate-arb.ts

    2 ~ 3hopのRouteを割り出す SOL → (DEX A) → JTOというSwap Txに対し て、 • SOL → (DEX B) → JIT → (DEX A) → SOL • SOL → (DEX B) → ? → (DEX C) → JTO → (DEX A) → SOL
  21. @andooown Jitoを使ったMEV Bot⼊⾨ jito-labs/mev-botの構成 • 4. 3で決めたRouteでSwapするTxを作成 (Arb Tx) ◦

    https://github.com/jito-labs/mev-bot/blob/master/src/build-bundle.ts Jupiter v4をつかってRouteを通るような Swap Txを作成
  22. @andooown Jitoを使ったMEV Bot⼊⾨ jito-labs/mev-botの構成 • 5. [Swap Tx, Arb Tx]のBundleをJitoに送信

    ◦ https://github.com/jito-labs/mev-bot/blob/master/src/build-bundle.ts Bundleを作成 • txn: Swap Tx • txSetUp: Token Accountのセットアップとか • txMain ◦ Flashloadを借りる ◦ RouteでSwap ◦ Flashloanを返す ◦ Jito Tipを払う
  23. @andooown Jitoを使ったMEV Bot⼊⾨ jito-labs/mev-botの構成 • 5. [Swap Tx, Arb Tx]のBundleをJitoに送信

    ◦ https://github.com/jito-labs/mev-bot/blob/master/src/send-bundle.ts Bundleを送信
  24. @andooown Jitoを使ったMEV Bot⼊⾨ jito-labs/mev-botの構成 収益機会を探す 収益を拾う • Jito MempoolのTxを監視 •

    Swap Txに対して逆⽅向の Swapをぶつける • Origin Tx + Arb Txを BundleにしてJitoに送信
  25. @andooown Jitoを使ったMEV Bot⼊⾨ jito-labs/mev-botの構成 収益機会を探す 収益を拾う • Jito MempoolのTxを監視 •

    Swap Txに対して逆⽅向の Swapをぶつける • Origin Tx + Arb Txを BundleにしてJitoに送信 Jito Mempoolは 停⽌中なので使えない
  26. @andooown Jitoを使ったMEV Bot⼊⾨ 今後は... • 通常のルートでTxを送るより着地しやす い (?) ◦ 通常のPriority

    Feeのオークション vs Jito Tip のオークション ◦ SolanaネットワークでTxが着地しにくかった ときも、Jito Bundles経由だと着地しやすかっ た ▪ ⼀部DEXではSwapをJito Bundles経由で やるオプションもあった Leader Tx