8月の損益とGeth改造関連/マージ戦/上場戦/最適Swap量について
8月は仮想通貨+281万円、株+33万円でした。
今月はGeth改造関連を主に行い、マージ戦、DogeChain上場戦などにも参加しました。
本業も子育ても非常に忙しいですが、養命酒や薬膳を活用しつつ、体力と気力にブーストをかけながらBOT開発に勤しみました。
(養命酒製造の黒養鍋に牛肉を入れると死ぬほど美味しいです。あとベーコンもすごい。)
欲しくなってしまって養命酒製造の株も買いました。来年からは優待が来るはずです。
Geth改造関連
Atomic arbでなんとか勝ちたいなーと思い、共同研究者の方とGethを改造し、誰よりも速くアビトラTXをマイナーに承認されるように開発を進めています。(私はほぼコントラクト作成担当)
何故Geth改造とか苦行みたいなことをやっているかと言うと、普通のRPCに接続してSwapする程度では速度負けするためです。
これまでAtomic arbを色々検討してきた結果、以下のように試行錯誤しました。
まだまだ研究途上なので、トップ層には全く手が届いていませんし、トップとの差がどのくらいあるかわかりません。トップが強すぎます。
色々書きますが参考程度でお願いします。
*Atomic arb:DEX内でBTC-USDT-USDC-BTCみたいなルートでアビトラをすること。
*Geth: GO Ethereum の略 ノード
i)web3.pyなどを使用してRouterを監視する。
(公式RPCに接続して、1USDC=1.01USDCになったらSwap)
ii)Uniswap RouterなどのPendingを公式RPC経由で監視して、養分TXを見つけたら反対方向にSwapする。
a)養分が10000USDTをWBTCにSwapするTXを送る。
b)公式RPCのPendingに養分TXが表示される
c)アビトラTXをUSDC-BTC-USDT-USDCなどとして送る。
iii)Rustなどの言語でi),ii)を行う。
iv)Rustなどを使用して適切なトークンのSwap量を概算したり、適切なスワップルートを見出すのは時間がかかるので、SolidityでContractを作り、オンチェーン裁定する。
v)養分TX検知速度が遅い/TXをバリデーターまで送る速度が遅いことが原因で負けるので、ノードを建てる。
vi)デフォルトのノードだと、Peerとの通信ラグとかがあることに気が付く。ラグをなくして養分TXを取得できるように改造してもらう。
vii)TX情報の伝播ロジックを改造してもらう。
という感じで、まだ勝てていないです。
本当に色々やっているのですが、トップ層は変態的に強く、おこぼれを貰うことはあっても、100USDなどの利益を得ることはできていません。
(Rosさん、SazanさんMagitoさんなどがDEXBOT界隈では有名ですが、彼らは本当に化物です。人間辞めてる)
ここまでクラウド代やガス代でいくら払ったのかよくわかりませんが、少なくとも100万円以上はかかっています。
時間は無限に溶け、ストレスは溜まるにも関わらず、トップとの距離はわからない(Positionで+1でもSwap速度差が何ミリ秒かわからない)ので苦行もいいところです。
私はまだまだ粘るつもりですが、他人にはAtomic arbはおすすめできないです。おとなしくDEX-CEXやイベント戦に参加するほうがいいと思います。
TOPは日給100万円以上を普通に稼ぐ世界ですが、それだけの技術力が求められているので、人間辞めていないと勝てる気がしないですし、その前にメンタル病むと思います。
tx追い越しができてやっと人間卒業試験の一科目目という事実に結構慄いてる。まだスタート地点だったらしい。これ多分あと99科目ある。 現状全く勝ててない
— QASH (@qash_tit) August 14, 2022
化石となったETH、届く
うおおおおお434日前のETHが届いた!!!!!!!!!! pic.twitter.com/eruI7uwMOe
— QASH (@qash_tit) August 21, 2022
1年以上前にX-hiveというDEXからETHを引き出しました。
アホなのか、2Gweiで送金されてしまい、8/21までETHチェーン上を滞留していました。なんでX-hiveを使っていたかと言うと、2020年の価格でETHを安く購入(=アビトラ可)できたからです。
魔界に行くときは気をつけましょう。大金ではなかったから良かったものの、勘弁してほしいって感じです。むしろよくマイニングされたな・・・。
現在X-hiveはサイトすらなく、運営も飛んでしまっているので使えないです。普通にクリプト触っていたらまず行き着くことはないでしょう。
アビトラできる鞘を求めすぎると、ひどい目に会うことがあるんだな、と思いました。
マージ戦
ETHW(ETH笑)ができるらしい、という話を聞いて、1231ショート現物ロングポジションを最初は取り、テストネットマージの成功を見てから1231を0930に乗り換えました。
現状では利益がでていますが、予想以上にPOWトークンがゴミなので、適当なところで切り上げて利確する予定です。
Twitterでも呟いたとおり、マージ戦は以下のような戦略が考えられます。
マージ戦をどうやって戦うか垂れ流す。参考は以下https://t.co/m9Z0ZUGToShttps://t.co/Gq1QntDyMw
— QASH (@qash_tit) August 9, 2022
・ETH乖離関連
■現物買-0930売
現時点で25USDの乖離。まあ、入っても良いかなあという水準。マージ延長時は0930で決済できるので資金拘束は2ヶ月程度とまだ我慢できる。
■現物買-1230売
— QASH (@qash_tit) August 9, 2022
早期参入だったら最適解に近い。現状は50USD程度乖離しているかつマージ延長時に1230まで資金拘束されるのはつらいので入りたくはない。
マージ延長時はコンタンゴになるはずで、1230まで持ち続けるのを考えると今はないかなあ、って気分。
■現物買-perp売り
— QASH (@qash_tit) August 9, 2022
論外。一番取ってはいけないポジション。ショート金利がこれから酷くマイナスになると思っていて、マージ直前は地獄のような金利になると思う。
その頃にはポジション解除しようとしても現物との価格差もできていてどうしようもなくなりそう。
■Perp買い-0930,1230売り
— QASH (@qash_tit) August 9, 2022
ロングで金利を貰いつつ、ショート金利は払わないという戦略。OMG戦の時のOMG価格は現物>Perp>期日付きとなったので、解除時期は見誤らないようにする必要がある。
レバもかけられるし現状ではかなり面白いポジションの一つ。
■マージン買い-0930,1230売り
— QASH (@qash_tit) August 9, 2022
レバリッジをかけたいならありだがPerpのほうが良い気がする。
■裸ロング
意外と期待値は高いけど、片面ポジションを持たない主義なので今回はパス
・チェーン関連
— QASH (@qash_tit) August 9, 2022
■L2からは資金を抜くべき。分裂した瞬間なにか事故って、L2にあるUSDCの裏付け資産がETHWのUSDCとかになってしまったら目にも当てられない。(POS、POWにブリッジ裏付け資産があっても、バリデーターが検証できるのがPOWだけだったら死ぬ)公式ブリッジ使うと1週間かかるから注意。
■ETHメインネットにUSDC(ETHWでは無価値)を置いておいて、ETHWが動いたらETHW-USDCペアをスワップ、価値がつくETHWを貰う、という強盗はおそらくうまくいく、が、間違ってPOSETHのUSDCをSwapしたら死にたくなりそう。
— QASH (@qash_tit) August 9, 2022
MEV(やFlashbotsみたいなやつ)をするならWETH基軸が良さげだろうけど、マイナーと結託しないと勝てないチェーンなので分が悪いか・・・?POWになった瞬間はアビトラBOTも死ぬだろうから、あえてそこでETHW-USDC-USDT-ETHWみたいなパスを狙ってもうまく行くかもしれない。ガス戦争やばそうだけど。
— QASH (@qash_tit) August 9, 2022
■同上で、USDDがPOWサポートするとか?USDC-USDDSwapしたらすごいことになりそう
— QASH (@qash_tit) August 9, 2022
・NFT関連
— QASH (@qash_tit) August 9, 2022
■POWのNFTとPOSのNFTに分裂した場合でも、ifpsのURLは変わらないから絵は表示されそう。価値がつくかは怪しいけど、Cryptopunksみたいなのは価値がつくかもしれないし、USDC建て(無価値USDC)でNFTを購入し、ETHで指値しているやつにぶち当てるのは儲かりそうな気はする。(RT参照)
・ETHW関連
— QASH (@qash_tit) August 9, 2022
■どうせゴミトークンだから貰いたくはないけど、固定金利でUSDC担保にETH借りておいて、POWチェーンでETHWを取引所などでETHにする(偽USDC担保になるので返さず借りパクする)のはあり。
ChainlinkがオラクルサポートをPOWではやらないらしいし、AAVEとかで借りても清算は起きないはず。メインネットではETHをそのまま返して金利だけ払えばOK
— QASH (@qash_tit) August 9, 2022
現状からやるのはこれが一番安全・・・?ETHWに価値がつかなかったらオワコン。そもそも、マージリスクがある中、メインネットに大金置きたくない
■L2リスクはあるが、L2でETHを借りて、マージ3日前とかにメインネットにブリッジし、マージ後にPOSとPOWからETHを引き出す、というのは多分うまく行く・・・?(証明はPOSで成功したのとおなじTXを送る)リスキーすぎてやる気は起きない。
— QASH (@qash_tit) August 9, 2022
帰り道戦わすれてた。
— QASH (@qash_tit) August 9, 2022
■固定金利eth借り、マージ直前でショート。
omg戦の時は期日付き の価格に現物が寄せる形になった。マージの瞬間がdifficultyなのでタイミングが少し難しい。
■固定金利eth借り、マージ直前でショート、0930 1230ロング
一番無難だが、安全に固定金利で借りるのが難しい。
■変動金利
— QASH (@qash_tit) August 9, 2022
絶対にやめた方がいい。
■固定金利eth借り、そのまま保持
ETHWを金利損失だけで貰う戦略。ゴミトークン貰ってどうするの?って思うけど、初動の上場戦で売りつける技術があるならアリ
これに加え、Rosさんが言っていた0930ショート1230ロングは面白いポジションだと思いました。
0930売り1230買いのポジ、問題はいつクローズするかなんだよなー
— Ros (@Ros_1224) August 13, 2022
乖離なしかなんなら12限が上になるまで待つって普通に考えたら思うけど、なんか見落としがあるような気はするのよな。
などと書いてたら違和感の正体がわかるかと思ったけどわからんかった
(普通のETHはコンタンゴになり、1230期日付先物価格>0930期日付先物価格となる。マージの影響で、ETHがバックワーデーション->マージ後にコンタンゴに戻るのにBETする戦略)

これ以外にも色々な戦略があると思うのですが、現先の乖離を取るのが安全だなあ、とは思います。ETHを金利払ってまで借りてどうこうするほどの魅力を感じていません。
OMG戦と違って全現金を突っ張るほどの魅力を感じるものではないので、適度なところで切り上げるのが大事だと思いました。
ちなみに、私のツイート群は(勝手に)インスタデビューしていたらしいです。
この最後に表示されているDMくだされば有益情報教えますでQASHさんのnote紹介してるんじゃないですかね?https://t.co/xvWRZSvrPe
— ビットコインBitcoinチャンネル (@bitcoinchannnel) August 31, 2022
オープンで話していることなので(有料とか転売しているようでなければ)文句のつけようはないのですが、面白いのでインスタアカを作って凸してみました。返信待ってます。
— QASH (@qash_tit) August 31, 2022
DogeChain上場戦
みんな大好き犬っころのEVMチェーンができていたので入りました。
何故入ったかと言うと、犬が好きな人は養分が多いからです。
入った当初はステーブルコインすらなく、DOGE建てでDOGEっぽいトークンを取引できる状況でしたので、10USD分のDOGEを持って上場戦に入りました。
i)上場戦とは?
DEXにおける上場戦とは、トークンが流動性供給されて取引できるようになる瞬間にトークンを購入し、数分後などに他のBOT/養分に売りつけることを言います。
ii)上場戦戦略
Swapすべきトークンを選定するために、イベント監視をしました。
イベント監視とは、Uniswap系のRouter(DEXでトークンをSwapする時に接続するアドレス)で、新規トークンのPairが発行されるとチェーン上にログが残るので、そのログを取得することを言います。
簡単なコードは以下です。
from web3 import Web3
from hexbytes import HexBytes
from eth_abi import decode_abi
from web3 import Web3,HTTPProvider,WebsocketProvider
main_net = 'https://rpc04-sg.dogechain.dog'
web3 = Web3(Web3.HTTPProvider(main_net))
factory="0xD27D9d61590874Bf9ee2a19b27E265399929C9C3"
Factory= Web3.toChecksumAddress(factory)
TOPIC = HexBytes(Web3.sha3(text="PairCreated(address,address,address,uint256)")).hex()
_logs = web3.eth.get_logs({
"fromBlock": web3.eth.block_number-3000,
"address": Factory,
"toBlock": web3.eth.block_number,
"topics": [[TOPIC]]
})
initial_pair_address= Web3.toChecksumAddress('0x'+(_logs[-1]['data'][26:66]))
print(initial_pair_address)
iii)ハニーポットトークン回避
上場戦にあるあるなハニーポットトークンを回避するために、SolidityでContractを作り、ハニーポットの場合はSwapしないようにしました。
ハニーポットトークンとは、売れないように設定されたり、移動できないように設定されたトークンのことを言います。
具体的には、以下の流れでハニーポット判定をしました。
a)自製ContractにSwapしたいアドレスをInputとして送る。
(Contractを使うのは、setApprovalForAllを強いるハニーポットによって資産を全部抜かれることを防ぐため。Contractには基本的にお金を置かない)
b)一定額でトークンを購入し、購入できた額の1%を売却する。
0)売れないトークンでないか確認
1)アンチボットがいないか確認
2)過大なFeeが設定されていないか確認
c)1%分買い戻す。
d)トークンを金庫用アドレスに移送する。
(移動できないトークンか確認する)
e)適当なタイミングで利確する。
iv)結果
結果的に、100Doge->250Dogeになりました。しょぼい。
流動性が引き抜かれ、Swapできないパターンが多すぎて上場戦は諦めました。
普通のトークン(ラグらないトークン)は公式サイトやTwitterなどで告知があり、ある程度人がワイワイいる状態で安くトークンを仕入れ、高値で売りつけるのが儲けに繋がります。
一方、DogeChainのハニーポットの場合、以下のような挙動を示していたので対処が難しかったです。
i')新規アドレスに20万Dogeなどが送金される。
ii')ハニーポットトークンがmintされる。この時、トークン作成者が流動性の100%を持っており、ロックなどもされていない。
iii')流動性供給がされる。
iv')90秒程度で流動性を引っこ抜き、上場戦に入った人のDOGEをほぼ全てかっぱらう。
v')新規アドレスにDogeを送金し、i)から繰り返し。
適当なイベント監視でも1番目にSwapできるので、優位な価格で購入自体はできます。なので、120秒経ったら他の上場戦参加者に売りをぶつけるロジックで運用してみましたが、90秒でラグられて萎えました。
DogeChainの上場戦(Pairができた瞬間にSwap)
— QASH (@qash_tit) August 16, 2022
ハニポ回避コントラクト(トークン移動可、売却可かを判定)を使って色々試しているんだけど、
・トークンの生存時間(ラグまでの時間)が大体4分くらい。
・100Doge以下のPairが80%超
・10分あたり30Pairくらい新規トークンができる。
って感じ。
上場戦はある程度根拠がないと多額を入れられない(入れた瞬間にラグられる)です。これはリスキーな戦略ですし、安定的にうまくいきませんでした。
それはそう。だからこそコンラクト作ったりしてハニポ仕掛けるやつからお金を抜くのがbotterの戦い方よ https://t.co/H1YB2ChSKz
— QASH (@qash_tit) August 17, 2022
こう書きつつ、狙っていたのはハニーポットトークンのコントラクトに脆弱性がないか調査し、可能なら無限Mintしてハニポ作成者のDogeを奪い取ろうと思っていました。ただ、脆弱性なかったので残念ながらうまくいきませんでした。
ちなみに今は、サンドイッチ攻撃が流行っているようです。地獄かな?
顛末はこれっすねhttps://t.co/pMaUrc4fpa
— Rus (@Rusrypto) August 18, 2022
最適Swap量について
普通にへー、って読んでたら最後に自分がでてきてびっくりした https://t.co/U2vtmlRCev
— QASH (@qash_tit) August 16, 2022
上記Noteを初期に発見し、中身を読んでいた所自分がでてきてびっくりしました。
Rosさんも言及されていますが、私の考えも書いていきたいと思います。
もう少し書いてみるか。
— Ros (@Ros_1224) August 17, 2022
我々が解かないといけない問題は「多数の閉路(裁定パス)が考えられる状態で、閉路と入力量とを確定させること」
単純に考えると、「入力量を最適化する前に閉路を確定させて入力量を最適化」形にするか、「考えられる閉路全てについて入力量の最適化を行った上で、出力が最大となる閉路を確定させる」という形になると思う。前者の場合、「あれ?閉路確定する際に最適入力量意識してなくね?」ともなる
— Ros (@Ros_1224) August 17, 2022
i)理論最適値を算出するパターン
Noteに書かれている通り、token_0,token_1のプールアドレスにおける流動性を監視し、最適なSwap量を算出する。
これは、記事に記載の通りDEX-DEXでtoken_0->token_1->token_0と裁定する場合、理論最適値を出すことができます。一方、token_0,token_1の流動性を知る必要があり、2つのDEXを使うため、2回のRPCとの通信が必要となり、速度的には遅いです。また、マルチホップ(token_0->token_1->token_2->token_0)のSwapを行う場合、監視数が多くなるので速度はより遅くなります。
ii)定額パターン
最適化をする時間が無駄なので、10USDなど一定額でSwapするTXを送信する。資金効率が悪くなるのであまり良くないです。
iii)コントラクト使用パターン
コントラクトを用いてSwap量を決定する場合、オフチェーンでの計算時間は0となるので優位です。一方、ガス消費をしてしまうので、ガス代は高くなります。コントラクトを用いる場合、例えば、以下のような最適化方法が考えられます。
a)オンチェーンで理論最適値を算出
token_0->token_1->token_2->token_0のパスにおいてそれぞれの流動性を確認し、理論値をだす。
->実際にSolidityでコントラクトを書くと、流動性(18桁以上)の6~9乗を計算する必要があり、オーバーフローしてうまくいかなかったです。やりようはあると思うのですが、深追いしませんでした。
b)複数回のgetAmountsOutを使用し、最適点の近似値を得る
getAmountsOutなどを使用して、1,5,25…とSwap量を増やしていき、最も利益が出る所を特定し、Swapする。
->自分が使っているのはこれ。割と簡単に書けて、精度も悪くない。
FlashSwapを使用する場合は、オンチェーン上で全パスについて最大利益を算出し、最も利益が出るパスだけを実行しています。
c)定額で複数回Swapする
1000USDなどでgetAmountsOutを呼び出し、利益が出る時だけSwapを行う。一方、リエントラント性の問題があるのでFlashswapなどは使用できないし、ガス消費も大きい。
他にもなんかあると思うのですが、実戦的なのはiii-b)かな、と思います。(ガスが高いチェーンでは無理)
一方、ペア数が多いBSCなどでは、コントラクトだけで全てを完結させることは難しく、ある程度オフチェーンで最適化することは必要なのかなーと思います。
私の場合、そもそもペア数が多いメジャーチェーンで勝てる気がしないので、ペア数の少ない魔界チェーンでコントラクトを作り、ガス代とのバランスを見ながら最適化をかけています。
この辺の話は本当に人によって異なり、DEXBotterとしての腕の見せ所というのは間違いないと思います。ただ、一番大事なのは養分TXの検知とアビトラTXをマイナーにいち早く(かつ養分TXの後ろに)承認させることなので、そちらに注力するほうがいいような気がします。
まあ、それができる人はそもそもSwap量の最適化で悩むことなんてないと思いますけどね。
iv)Advanced
i~iiiなんて知っとるがな、という人向けです。上記は、裁定パスが1個しかない単純なパターンでした。
実際にDEXを触っている人はよくわかると思いますが、一つのトークンに対してBTCペアやETHペアなど複数のペアが存在し、それぞれ価格が異なります。このような場合の最適化についてどうするかを述べてみます。
まず、最適化をする問題についてを以下のように仮定します。
仮定1)PancakeswapでCAKE>ETHを養分がSwapする。
仮定2)CAKE/BUSD、CAKE/USDT、CAKE/DAI、CAKE/BTCなどのプールがあり、それぞれ流動性が異なる。
このような場合、基軸通貨に何を選択するか、どのパスでアビトラTXを送れば最大利益を取れるか、という基軸通貨選定問題とパス最適化問題の2つが生じます。これらについての解法例を紹介します。
(あくまでも例です。ステーブルコインしか持たない教徒なのでBTC起点は採用していません。)
上記の例では、以下のような裁定パスが考えられます。
(Pancakeswap内だけのInternalなパターンを考えています。2個のDEXを使用する場合、それぞれのSwapについてどのRouterを使用するかの判定が必要なので、8倍の計算量が必要です。)
①DAI->ETH->CAKE->DAI
②DAI->BTC->ETH->CAKE->DAI
③DAI->CAKE->ETH->DAI
④DAI->CAKE->BTC->ETH->DAI
⑤BUSD->ETH->CAKE->BUSD
⑥BUSD->BTC->ETH->CAKE->BUSD
⑦BUSD->CAKE->ETH->BUSD
⑧BUSD->CAKE->BTC->ETH->BUSD
⑨USDT->ETH->CAKE->USDT
⑩USDT->BTC->ETH->CAKE->USDT
⑪USDT->CAKE->ETH->USDT
⑫USDT->CAKE->BTC->ETH->USDT
解法1
■①~⑫それぞれのパスについてgetAmountsOutを10USDなどの定額Inputで計算し、一番利益がでるパスのみをi)~iii)で述べた解法でInput量を計算する。(パス最適化->入力最適化)
・メリット:最適解に近いものは得られる。
(*全パスについてInputを最適化し、絶対利益額で比較することで最適解を算出できるが、10USDなどの定額で行っているため)
・デメリット:パス全部についてgetAmountsOutを行うので遅い。
解法2
■そもそも基軸通貨選定をしない。USDCパス以外とらないなど決める。
DEXによってはそもそも基軸通貨をUSDCのみにせざるを得ない(USDTペアなどが少ない)パターンもよくある。
・メリット:楽。
・デメリット:利益最大化はできない。
解法3
■iii)-cで述べた、定額複数回Swapを全パスについて行う。
例えば、オンチェーンでgetAmountsOutを定額Inputで計算し、利益が出る場合はSwap、そうでない場合はパスする。
・メリット:全ペアについて利益が取れる。
・デメリット:Flashswapなどリエントラント性が問題になるものでは使用できない。ガス代もかなり高い。
ちなみに私はパス選定をした上でこの解法を使う時もあります。
解法4
■凸最適化を行う。
あまり詳しくないが、解法1の発展版?なんか評判がいいですねこいつ。
解法5
■全パス流動性を監視、データベースとして持っておき、養分Swapが来た時の感度解析を事前に行っておく。
養分Swap量ごとにどのパス、Inputが最適か把握し、養分Swapが来たら即座にTXを送る。
(事前シミュレーションに近い)
・メリット:感度解析できるなら最適値をすぐに出せる。
・デメリット:そもそも作るのがメチャクチャ大変。
結論
Swap量の最適化を頑張っても利益が1.5倍とかになるくらいです。利益0のBOTしかない場合、Swap量の最適化を頑張ってもどうしようもないので、検知やTX送信の方を頑張るべきでしょう。
DEX BOTの世界は0->1がまず死ぬほど難しく、1->1.5はまだマシな難易度です。
簡単に浮かんだのは以上です。他にもなんかあるよ!って方はコメントでもください。
アセンブラでコントラクトを作ったりする変態つよつよBotterは上記の内容だと満足しないでしょうし、是非Noteでも書いてください笑。
雑記
娘が立ったんやが。ビビる
— QASH (@qash_tit) August 14, 2022
娘がいきなり支えなしで立ち上がり、当たり前だろ?みたいな顔をしていたので非常にビビりました。お盆が終わる2時間前で、明日から仕事かーとか思っていましたが、この瞬間100点満点のお盆になりました。
来月はまだ週2程度の早番・夜勤ですが、10月から土日関係なく夜勤なので辛いです。保育園も落ちたり色々と修羅場なのですが、なんとか時間を捻出しつつBOT開発をしていこうと思います。
いつもどおり寄付型で養命酒の値段分の価格設定をしています。コメントなどある方はツイッターにでも投げておいてください。
謝辞
校正に協力してくれた人。感謝です。
KNさん
ごーるでんでんでん V2さん
xNFT なぞこいさん
養命酒