お疲れさまです。
次世代ビジネス推進部の荻原です。
今回は、Polygonのガス代について紹介します。
ガス代とは
ブロックチェーンのガス代とは、トランザクション処理の依頼者がトランザクション処理の計算をしてくれたノード(マイニングを行っているマイナー)に支払う手数料のことです。
マイナーからすると当然報酬は高い方が良いので、高いガス代を支払えば速くトランザクション処理を行ってもらえます。逆にガス代を安く設定するとガス代が高い処理が優先されるため処理に時間がかかったり、処理されずにトランザクションが廃棄扱いとなったりすることもあります。
そのため、トランザクション数が増えるとブロックチェーンが混みガス代も上がるなど、処理を行ってもらえる適切なガス代は常に変動します。
また、トランザクション処理と言っても膨大な計算が必要なものもあれば計算が少なくて済むものもあり、ガス代はトランザクション処理の計算量に依存して決められます。
これは、ブロックチェーンのルールとして定義されています。
Polygonの場合は、2022年1月18日にEthereumのロンドンフォークと呼ばれる大幅なアップデートが適用され、EIP-1559という新しいルールが導入されました。それ以前のガス代のルールに則ったトランザクションはLegacy Transactionと呼ばれています。
次章からそれぞれについて解説していきます。
Legacy Transaction
Legacy Transactionは以下の式でガス代が決められています。
Gas Price * Gas = ガス代 |
「Gas」とは、トランザクション処理にかかる燃料の量のようなもので、計算量の多いトランザクションほど大きい値となります。
「Gas Price」とは日本語で「ガス代」なのでややこしいくなってしまうのですが、ここでは1Gasあたりのガス代のことで、トランザクション処理を依頼する人が指定します。
つまり、
単位量あたりの値段 * 量 = 支払う値段 |
という構造になっています。
トランザクション処理を依頼する人はGas Priceを高く指定することで処理を速く行ってもらうことができます。
Gasはトランザクションを実行した結果実際にかかった計算量で決まるのですが、トランザクションを作成する際(実行前)にはまだ決定していないため、Gasの最大値であるGas Limitを指定します。
これによってスマートコントラクトの設計ミス等によりマイニング時に無限ループが発生してガス代が上がり続けてしまうことを防ぐことができます。実際にかかったGasが指定したGas Limitより少ない場合は、その差分はトランザクション処理を依頼した人に返却されます。
Polygonscanで実際のトランザクションを見てみます。
「Txn Type」は「Legacy」となっています。
「Gas Used by Transaction」は前述のGas、「Gas Price」も前述の通りです。これらから先程の式の通りにガス代を計算してみると「Transaction Fee」と一致しました。
そして「Gas Limit」に占める「Gas Used by Transaction」の割合を計算すると「Gas Used by Transaction」のカッコ内のパーセンテージと一致しました。
今回は指定したGas Limitの内Gasを74.36%消費したということです。
Legacy Transactionはシンプルでわかりやすいかと思います。
ただ、希望通りの速度で処理をしてもらえる適切なGas Priceの予測が難しいため、新しくEIP-1559が制定されました。
EIP-1559
新しいルールであるEIP-1559で定められたガス代の計算は以下の通りです。
(Base Fee Per Gas + Priority Fee Per Gas) * Gas = ガス代 (ただし、 Base Fee Per Gas + Priority Fee Per Gas > Max Fee Per Gas ならば ガス代 = Max Fee Per Gas * Gas ) |
「Base Fee Per Gas」とは、ブロックごとに決められた、最低限支払う必要のある1Gasあたりの基本料金です。
Base Feeとして支払った分はマイナーに支払われず、破棄扱いとなります。
具体的な数値はここでは割愛しますが、Base Fee Per Gasはブロックチェーンの混み具合(次章参考)によって自動的に上げられたり下げられたりします。これによりユーザーは自動的に決められたBase Feeにマイナーへのチップ分を追加するだけで良くなったため、ガス代の設定がしやすくなりました。
「Priority Fee Per Gas」とは、マイナーに支払う1Gasあたりの料金です。Base Feeは決まっているので、Priority Fee Per Gasを高く設定することでトランザクション処理を速く行ってもらうことができます。
「Gas」はLegacy Transactionと同じで、燃料の量です。
「Max Fee Per Gas」とは、1Gasあたりの
Base Fee Per Gas + Priority Fee Per Gas(Gas Price)の最大値です。
上記の式で計算されるGas Priceがこれを超える場合はMax Fee Per GasがGas Priceとなります。
こちらもPolygonscanで実際のトランザクションを見てみます。
「Txn Type」は「EIP-1559」となっています。
「Gas Used by Transaction」、「Gas Price」、「Transaction Fee」についてはLegacyと同様です。
EIP-1559特有の部分については以下の通りです。
このトランザクションでは
Base Fee Per Gas + Priority Fee Per Gas > Max Fee Per Gas |
であるため、Max Fee Per GasがGas Priceとなっています。
「Burnt Fees」は破棄扱いとなったBase Feeとして支払った手数料です。
実際に計算してみると
となっています。
また、このトランザクションではGas Used by TransactionがGas Limitの上限いっぱいになっているので100%となっています。
ブロックのGas Limit
前章でBase Feeはブロックチェーンの混み具合によって決まるという説明をしました。
これについて補足します。
ブロックチェーンの1つのブロックにはいくつかのトランザクションが含められていますが、1つのブロックに含めることのできるGasの上限はブロックのGas Limitとして決められています。
この数値はロンドンフォーク以前は固定でしたが、その後はブロックチェーンの需要に依存して可変になりました。
Gas Limitの内ブロックが実際に多く埋まっていれば次のブロックのBase Feeは上げられ、埋まっていなければ下げられます。
また、この制限があることによってトランザクションの発行者がトランザクションのGas Limitを大きくしてもこれに収まらないトランザクションは途中で破棄されます。この場合、途中の計算までにかかった分のガス代がマイナーに支払われ、実行は完了しません。
その制限に引っかからないようなスマートコントラクトの設計にする必要があります。
まとめ
今回はPolygonの古いガス代の決め方であるLegacy transactionと新しいガス代の規則であるEIP-1559について紹介しました。
ガス代はブロックチェーンの需要によって変動する1GasあたりのGas Priceとトランザクション処理を行って実際にかかったGasから計算され、Gas PriceはEIP-1559でより予測しやすくなったということがわかっていただけたかと思います。
最後まで読んでいただきありがとうございます。
参考
- EIP-1559のトランザクションガス手数料のメカニズムの変更の調査
- A Definitive Guide to Ethereum EIP-1559 Gas Fee Calculations: Base Fee, Priority Fee, Max Fee
- GAS AND FEES
- BLOCKS
この記事を書いた人
最近書いた記事
- 2023.12.24気難しいBlockchainへの対処法
- 2023.09.22レコチョクチケット特有の機能について
- 2023.07.18【ERC4337 その2】NFTを転送してみる
- 2023.07.14【ERC4337 その1】ERC4337について