![見出し画像](https://assets.st-note.com/production/uploads/images/155487705/rectangle_large_type_2_fc048d44640d9ebc6bf9f2ba6196e460.png?width=1200)
0.01 SOL で始める Atomic Arbitrage
これはなに?
Atomic Arbitrage には興味あるけど、何をしていいかわからない...
そんな人のためのコンテンツです。
想定読者
pe さんの記事を読んで「デプロイだけで8SOL!!!???」になった人
まだ読んでない人はこの機会に読みましょう
儲かるのか
発展性◎(儲かるならそもそも記事にしない)
これはあくまで私見なのですが、栄えてるチェーンのatomic botは全然儲かりません。
— くりぷとべあー🍻 (@cryptoo_bear) September 25, 2024
競争が熾烈なので自分だけが知ってるエッジがないと厳しいと思います。逆にいうと、自分だけが知ってる「何か」があれば戦える余地はあると思いますが、そのような場合はatomicじゃなくても良い場合も多いかなと。 https://t.co/psN0azyofs
なぜ 0.01 SOL なのか
スワップの際に必要なトークンアカウントを作るのに、最低 0.00203928 SOL デポジットする必要があるから
補足: Rent
The fee deposited into every Solana Account to keep its associated data available on-chain is called "rent".
Solana のアカウントモデルではオンチェーンにデータを置いておくために "rent" が必要になる
つまり「プログラムのバイナリ」や「トークンアカウントの残高」を保持しておくのにも幾らかの SOL が必要になる
例1)Jupiter Aggregator v6 の Executable Data (バイナリ)は 2,892,224 Bytes で、Rent は 20.13 SOL
例2)USDC などのトークンアカウントのサイズは 165 Bytes で、Rent は0.00203928 SOL
余談:バジルさんの記事が面白かったので貼っておきます
免責 (by ChatGPT)
本記事で紹介している Atomic Arbitrage の手法は、あくまで情報提供を目的としており、特定の投資アドバイスを行うものではありません。暗号通貨取引には市場変動や技術的リスクが伴うため、実行には十分な調査と準備が必要です。
取引の結果に関しては、全てご自身の責任で行っていただくようお願いいたします。万が一、損失や不具合が発生した場合でも、筆者は一切の責任を負いかねますことをご了承ください。
さらに、本記事の内容は執筆時点の情報に基づいており、将来的な市場状況や技術の進展により内容が変更される可能性があることを予めご理解ください。
本質
お手本を探して真似する
![](https://assets.st-note.com/img/1727161940-nRFHO1IeMG4ZD2aElchz3LUC.png?width=1200)
方針
「ルート探索フェーズ」と「tx 作成フェーズ」の二段階
オンチェーンからデータを持ってきて価格を計算するのは大変
→ 価格を比較して一番良いものを教えてくれる API を使う(Jupiter API )
プログラムを自前でデプロイすると初期投資が重くなる
→ 逆に言えば「誰かがデプロイしてくれたもの」を使えば rent は不要
→ Jupiter のプログラム(Aggregator v6)を使う
![](https://assets.st-note.com/img/1727255772-xgCb5YEwj2KdQ6nfaNU7TViB.png?width=1200)
上の図における Client 側(左)を実装することになる
(Solana Network 側(右)は誰か(=今回は Jupiter の運営)がデプロイしてくれたものを使う)
Jupiter
ルート探索
Jupiter API を使う
適当なトークンを選んで wSOL → token と token → wSOL の二回に分けてクエリを投げる
一つ目のクエリの outAmount を二つ目のクエリの amount に渡して、二つ目のクエリの outAmount がもともとの amount より大きくなれば OK
(実際にはガス代以上増えてないと赤字)
余談:Atomic Arbitrage をしたいからといって inputMint と outputMint の両方に同じトークンを指定するとエラーになる
![](https://assets.st-note.com/img/1727266451-nHNIo41SKtTlxdqp3w2FaV6D.png?width=1200)
Instruction 作成
これはクエリを投げるだけ
/swap と /swap-instructions があるが後者のほう
Instruction 合成
wSOL → token と token → wSOL を合成して一つにする(どうやって?)
Solana の Instruction は Program ID, Accounts, Data の三要素からなる
Program ID
どちらも Jupiter Aggregator v6 なのでそのまま
Accounts
まず適当な tx を solscan で探してくる
グッと睨むと、実は先頭九個のアカウントの下に Cross Program Invocation (CPI) で使うアカウントが並べられていることがわかる
![](https://assets.st-note.com/img/1727163019-vOeH1ZwE3rFGNzgB9kMbtny7.png?width=1200)
![](https://assets.st-note.com/img/1727162961-7RekSCp026QtA8hXsxPzwYOU.png?width=1200)
最初の九個の部分は solscan を見ながらいい感じにして、その後ろに「一つ目のアカウントから先頭九個を取り除いたもの」と「二つ目のアカウントから先頭九個を取り除いたもの」を順に並べればいい。
Data
命令に渡す引数をシリアライズしたもの(バイト列)
![](https://assets.st-note.com/img/1727331757-S3gaOQ49DWyXAYVU7rCBnbcp.png)
solscan で表示されるものは solscan 側でデシリアライズしている
(右上の <> Raw ボタンでデシリアライズ前と切り替えられる)
![](https://assets.st-note.com/img/1727332286-vEuOHXUgbojRYz97MtT6LxAF.png)
これだけ見てもなんとなく Atomic Arbitrage みがある
以下の手順で wSOL → token と token → wSOL を一つの命令に合成する
/swap-instructions で取ってきた data をデシリアライズする
くっつける
inputIndex やら outputIndex やらをいい感じにする
シリアライズし直す
シリアライズ/デシリアライズに必要な IDL(後述)は solscan からダウンロードするなり Anchor を使って fetch するなりする
![](https://assets.st-note.com/img/1727331354-8OKAogUyFibCk6MtrnSa9pQv.png?width=1200)
注意:anchor の 0.30.0 に破壊的変更が入って互換性がなくなっている(そんなことしたらダメだろ(v0 だからセーフか?(Solana はいつまで beta を名乗るつもりなんだ?)))
(2025/1/27 追記) solscan から取れるものは 0.30.1 に更新されている
補足: Interface Description Language (IDL)
クライアント側とオンチェーン側の間を繋ぐための言語
Solana でのデータのシリアライズ/デシリアライズに広く使われている
まとめ
Jupiter 最高!
有料部分
俺もクリプトインフルエンサーを目指して有料 Note を売ろうかなって
内容
コード (NodeJS + TypeScript)
実際に tx を送るところまで(170 行)
環境構築パートがあるので動かすのに多少手間取るかも
solana-cli と ts-node を使う
おまけ
トークンの選び方
この記事の次にやること
「環境の違いで動かない」等があってもサポートはしません
お金と時間が余ってる人だけ買ってください(+僕に寄付したい人)
(2025/1/27 追記) Jupiter の IDL のバージョンが上がった影響で動かなくなっている可能性があります(更新予定はありません)
solana-cli と ts-node の環境構築パートは yugure さんの記事が参考になります(丸投げ)
ここから先は
¥ 500
この記事が参加している募集
この記事が気に入ったらチップで応援してみませんか?