続・アトミックアービトラージ基礎入門

仮想通貨bot

みなさんすでにアトミックアービトラージ基礎入門はお読みいただけたでしょうか?
アトミックアービトラージとはなにか、雰囲気はつかんでいただけたと思います。
実際にコードを動かしてくださった方も中にはいるのではないでしょうか!

しかしながら掲載のコードを実行しても、記事の通りerrorCode: ‘CIRCULAR_ARBITRAGE_IS_DISABLEDが発生してしまいますよね。

もうこれ以上はjupiterでアービトラージできないんだなーとお考えですね?
でもそれって本当ですか?

ここからは、このエラーコードを回避する方法を考えていきたいと思います。

等価なものを探す

ジュピターでは同じコインを入力と出力に取るとエラーが出るのは先ほど説明したとおりです。
では同じ価値をもつ異なるコインであればどうでしょうか?

例えばドルと等価の価値があるUSDCやUSDTなどはアービトラージで定番になっていますね。他にもドルペッグのコインは色々とあります。

またsolanaではSanctumによってLiquid Staking Tokenも数多く発行されています。これはそれぞれSOLを裏付けにしているはずなので、アービトラージ候補として有望ですね。

このようなメジャーなものはもちろん、マイナーかつ理論的にn物1価のものを見つけられれば、あなただけのブルーオーシャンが広がっているかもしれません。

入出力が違うけど価値が同じものを交換するのであれば、前回記事のコードも使用可能です。

トランザクションをこねこねする

もう一つの方法は私が実際にやっていた方法です。これでちゃんとお金が増えました。
考え方は簡単で、jupiterが一回で入出力に同じトークンを取れないのであれば、一度自分のウォレットを経由する形で二回のswapを一つのトランザクションに詰め込みます。

もっと簡単に言うとa→b→aをa→bとb→aに分割します。これならば、それぞれの入力と出力が異なるためjupiterでトランザクションを発行することができます。

こちらが実際に一回のtxでjupiterのコントラクトを二回呼んでいる実例です。
二回呼んでしっかりとプラスになっているのが確認できますね!

では問題はこの2つのswapをどう一つのtxに詰め込むかですが、私もよくわからず試行錯誤で動くコードができたので、分かっていることをコードをベースにご説明したいと思います。

プログラムはファンクラブ限定で公開しました。
ファンクラブの説明はこちらをお読みください。
https://note.com/yametee/n/n72c3db3f3467

まずとりあえず前回のように2つのswapルートを呼び出します。
前回はルートプランを合体させるだけで良かったですが、今回はそれぞれの中に入っているaddress lookup tableを合体する必要があります。

次にそれぞれの
message instructionsを合体するのですが、おそらく1つ目のinstructionがswapではなく、トランザクション全体のinstructionであるため、合体する2つ目のinsutractionsから先頭を除いて合体させてください。

そこからV0messageとしてコンパイルして、トランザクションを投げることでCIRCULAR_ARBITRAGE_IS_DISABLEDを回避してatomic arbitrageを行うことができます。

今更ながら自分でよくこれが書けたなと思います。
今はAIがもっと賢くなっているので、よりよいコードを書けるのではないでしょうか。
ぜひシャチーズの皆様は私のコードを下敷きに、発展させてください。

ちなみにjupiter自体は通るのですが、そもそもsolanaのトランザクションが通らない問題があります。

でもそれって本当ですか…..?

タイトルとURLをコピーしました