INTP型のブログ

苦味があるな?

-0.00203928の謎

アビトラbotを稼働させていたところ、やけにsolが減少することがあった。

 

Done Analyticsでクエリを作成し、ウォレットのsol変動を確認してみたところ、なぜか0.00203928sol減少するケースが有ることがわかった。

 

また、-0.00203928solされたあとに+0.00203928solされていることもあり、より挙動の意図がわからなかった

 

solscanのトランザクションのログから調べてみたところCreateAccountでtransaction feeとして徴収されていることがわかった

 

「CreateAccountって何してるんだ?」と思って調べてみた。

 

これはwalletに紐付く特定トークンのアドレスを作成するもので、そのときにRentとして0.00203928sol徴収されるようだった。

 

RentはAccount(アドレス単位という捉え方でいい気がする)作成時に、そのデータを保持するためのコストとして徴収されるもの。2年間分まとめて払うのが基本らしい

 

そのコストがちょうど0.00203928solだった。

 

アビトラbotでは、現在walletと紐ついていないトークンを扱うこともあるので、その場合交換時にそのtokenを保持するためのAccountが作成される。このときにRentとして0.00203928solが徴収される。

 

この0.00203928solはCloseAccountすることで戻ってくるため、通過するだけの通貨であればcreate -> closeでコストはゼロとなる。

 

現在の仕様上、usdc -> x, x -> usdcとトランザクションを2つに分けている。そのため1つ目のusdc -> xのときにxのAccountがcloseされない(というかできない)

 

1つ目と2つ目のトランザクションは独立しているため、2つ目のトランザクションが不要となったトークンのAccountをクローズすることが出来ない。そのため永続的に-0.00203928solされてしまっている。

 

というのが-0.00203928の謎の答えだった。

 

当面は手動でクローズする他無いような気がした。この辺の最適化は自分でProgram(EVMでいうコントラクト)をかけるようになってからかなという気持ち。

 

おわり