pythonでガス代を安く済ませようとしてみた話(Berachain:bArtio)

ガス代について

ブロックチェーンにトランザクションを送信し処理してもらうにはガス代と言われる所謂手数料が掛かることはご存知の通りです。

普段DEXなどを触るときは既存のGUI(WEBページなど)で操作することが多いので気にならないのですが、先日pythonでブロックチェーン上の操作を試みた際に、いつもよりガス代が多くかかっていて気になったので、これに対処していこうと思います。

要は、自分で書いたプログラムでブロックチェーンを操作したら、同じことをやっているのにDEXのWebページから操作するよりもかなり大きな手数料が掛かることが分かった、ということです。

DEXのWEBページでは自動で手数料を最適化してくれていたんですね・・

ガス計算

ガス合計=(ベースフィー+プライオリティフィー)×ガスリミット
です。

ベースフィーとは基本手数料のこと、
プライオリティフィーとは優先手数料のこと。
ベースフィーは最低でもこのガス代は掛かりますよー、という数字で
プライオリティフィーはネットワークが混んでいるときに優先的に処理をしてもらうために払うオプション手数料みたいな感じですね。

そして、(ベースフィー+プライオリティフィー)の部分をガス価格、と言います。
つまり、ガス合計=ガス価格×ガスリミット

ガスリミットとは、ユーザー側(トランザクションの処理をお願いする側)が、最大でこれだけなら払っても良いとするガスの数のことです。

まとめると、ガス合計は、
・ガス1個あたりの価格(ガス価格)が決まって、
・そのガスを何個までなら支払えます、という数字
が決まることで計算できることになります。

で、ここまで分かりやすいように「ガス合計」という言葉を用いてきましたが、これは「ガス合計最大値」のことです。
どういうことかというと、結果的に算出したガス合計よりも少ない手数料でトランザクションが処理される可能性がある、ということです。
ガスリミットが、支払うことのできる最大のガスの個数を示していることからも理解できると思います。

Swap手数料のDEXのGUIとpythonの比較

DEXのGUIの場合

まずは、BerachainのDEXであるBEXでBERA⇔WBERAのWrap/Unrapにどの程度の手数料が掛かるのか確認します。

1BERAをWBERAにWrapしてみました。

また、1WBERA→BERAにUnwrapしてみました。

pythonの場合

以前作成したプログラムで1BERA→WBERAへのWrap、1WBERA→BERAへのUnwrapをやってみます。

1BERA→WBERAのトランザクション

1WBERA→BERAのトランザクション

ちなみに、pythonでのガス関係の設定値は以下です。
gasがガスリミット、gasPriceがガス価格、と考えてください。

比較

最終的に支払ったTransaction Feeを比較してみると、BEXの方が手数料が安く済んでいることが分かります。

Wrap:
BEX(0.000003383744752518 BERA)
python(0.000104169 BERA)

Unrap:
BEX(0.000004284399710453 BERA)
python(0.000124809 BERA)

pythonの手数料はBEXの約30倍支払っています。

何が効いているのか?

Gas Feesの項目を比較すると、Base、Max、Max Priorityどれをとってもpythonの方が安い(Max、Max Priorityについてはプログラムで指定していないからかなと想像できますが、Baseが小さい理由は分かりません、偶然?)。

でもpythonの方が最終的な手数料が高い。

Gas limitについては、pythonで200,000を指定していますが、結局使用されたガスの数(Used by Txn)はWrapもUnrapもそれぞれ34723個、41603個とBEXの場合と同じです。

ということは、Gas Priceですね・・・

BEXのGas Priceを確認してみると、
Gas Priceの値とGas FeesのMax Priorityの値が一致していることが分かります。

一方、python側はGas Priceがプログラムで指定した値(3Bwei)になっています。

最終的な手数料(Transaction Fee)は、
Gas Price × Used by Txn

で決まるので、このような結果になっていたんですね。

なので、pythonのプログラムでGas Priceを修正すれば、手数料は下げられるのでは?

pythonプログラムの改善

下記のようにプログラムを修正してみました。
pythonプログラムで実行したときのWrap/Unrapで確認されたGas FeesのBaseよりも少し大きい値を設定してみました。

実行してみます。

Wrap:

Unwrap:

結果的に、BEXに比べると半額程度でWrap/Unwrapできました。

Wrap:
BEX(0.000003383744752518 BERA)
python修正後(0.00000173615 BERA)

Unrap:
BEX(0.000004284399710453 BERA)
python修正後(0.00000208015 BERA)

更なる改善としては、ブロックチェーンの込み具合に応じてGas Priceを変更することが考えられます。
これをやることができれば、今回手動で設定したGas Priceの値をもっとギリギリまで攻めることができるはずなので手数料を最適化することができるのでは、と思います。


いいなと思ったら応援しよう!