ガスと手数料
ガスはイーサリアム・ネットワークにとって不可欠なものです。車が走るためにガソリンを必要とするのと同じように、イーサリアムが稼働するための燃料となります。
前提条件
このページをよりよく理解するために、まずはトランザクションとEVMについて読んでおくことをお勧めします。
ガスとは?
ガスとは、イーサリアム・ネットワーク上で特定の操作を実行するために必要な計算量の単位を指します。
イーサリアムの各トランザクションを実行するには計算リソースが必要であるため、イーサリアムがスパムに対して脆弱にならず、無限の計算ループに陥らないようにするために、そのリソースに対する支払いを行う必要があります。計算に対する支払いは、ガス代という形で行われます。
ガス代は、ある操作を行うために使用されたガス量に、ガス1単位あたりのコストを掛けたものです。この手数料は、トランザクションの成功・失敗に関わらず支払われます。
Ethereum EVM illustrated (opens in a new tab)から引用した図
ガス代は、イーサリアムのネイティブ通貨であるイーサ (ETH) で支払う必要があります。ガス価格は通常、ETHの単位の1つであるGweiで提示されます。1 Gweiは10億分の1 ETH (0.000000001 ETH または 10-9 ETH) に相当します。
例えば、ガスのコストが0.000000001イーサであると言う代わりに、ガスのコストは1 Gweiであると言うことができます。
「Gwei」という言葉は「giga-wei」の略語であり、「10億Wei」を意味します。1 Gweiは10億Weiに等しいです。Wei自体 (b-money (opens in a new tab)の作成者であるウェイ・ダイ (opens in a new tab)にちなんで名付けられました) は、ETHの最小単位です。
ガス代はどのように計算されますか?
トランザクションを送信する際、支払ってもよいガス量を設定することができます。一定量のガスを提示することで、自分のトランザクションが次のブロックに含まれるように入札することになります。提示額が少なすぎると、バリデータがあなたのトランザクションを含めるために選択する可能性が低くなり、トランザクションの実行が遅れたり、まったく実行されなかったりする可能性があります。提示額が多すぎると、ETHを無駄にしてしまうかもしれません。では、いくら支払えばよいか、どのように判断すればよいのでしょうか?
支払うガスの総額は、base feeとpriority fee (チップ) の2つの要素に分けられます。
base feeはプロトコルによって設定されており、トランザクションが有効と見なされるためには、少なくともこの金額を支払う必要があります。priority feeは、トランザクションをバリデータにとって魅力的なものにし、次のブロックに含めるように選んでもらうために、基本料金に追加するチップです。
base feeのみを支払うトランザクションは技術的には有効ですが、他のトランザクションよりも優先して選ぶインセンティブをバリデータに提供しないため、含まれる可能性は低いです。「適切な」priorityは、トランザクションを送信する時点でのネットワークの使用状況によって決まります。需要が多い場合はpriorityを高く設定する必要があるかもしれませんが、需要が少ない場合は支払いを少なくすることができます。
例えば、JordanがTaylorに1 ETHを支払う必要があるとします。ETHの送金には21,000単位のガスが必要であり、基本料金は10 Gweiです。Jordanは2 Gweiのチップを含めます。
この場合、合計手数料は以下のようになります。
units of gas used * (base fee + priority fee)
ここで、base feeはプロトコルによって設定される値であり、priority feeはユーザーがバリデータへのチップとして設定する値です。
例: 21,000 * (10 + 2) = 252,000 gwei (0.000252 ETH)。
Jordanが送金すると、Jordanのアカウントから1.000252 ETHが差し引かれます。Taylorには1.0000 ETHが入金されます。バリデータは0.000042 ETHのチップを受け取ります。0.00021 ETHのbase feeはバーン (焼却) されます。
基本料金
すべてのブロックには、最低価格として機能する基本料金があります。ブロックに含まれる資格を得るには、提示されたガス価格が少なくとも基本料金と等しくなければなりません。基本料金は現在のブロックとは独立して計算され、代わりにその前のブロックによって決定されるため、ユーザーにとってトランザクション手数料がより予測しやすくなります。ブロックが作成されると、この基本料金は「バーン」され、流通から取り除かれます。
基本料金は、前のブロックのサイズ (すべてのトランザクションに使用されたガス量) とターゲットサイズ (ガス・リミットの半分) を比較する式によって計算されます。ターゲットブロックサイズがターゲットを上回っているか下回っているかに応じて、基本料金はブロックごとに最大12.5%増減します。この指数関数的な増加により、ブロックサイズがいつまでも高い状態を維持することは経済的に成り立たなくなります。
| ブロック番号 | 含まれるガス | 手数料の増加 | 現在の基本料金 |
|---|---|---|---|
| 1 | 18M | 0% | 100 Gwei |
| 2 | 36M | 0% | 100 Gwei |
| 3 | 36M | 12.5% | 112.5 Gwei |
| 4 | 36M | 12.5% | 126.6 Gwei |
| 5 | 36M | 12.5% | 142.4 Gwei |
| 6 | 36M | 12.5% | 160.2 Gwei |
| 7 | 36M | 12.5% | 180.2 Gwei |
| 8 | 36M | 12.5% | 202.7 Gwei |
上の表では、ガス・リミットとして3,600万を使用した例を示しています。この例に従うと、ブロック番号9でトランザクションを作成する場合、ウォレットは次のブロックに追加される最大基本料金がcurrent base fee * 112.5%または202.7 gwei * 112.5% = 228.1 gweiであることをユーザーに確実に知らせます。
また、フルブロックの前に基本料金が上昇するスピードが速いため、フルブロックの急増が長引く可能性は低いことにも注意が必要です。
| ブロック番号 | 含まれるガス | 手数料の増加 | 現在の基本料金 |
|---|---|---|---|
| 30 | 36M | 12.5% | 2705.6 Gwei |
| ... | ... | 12.5% | ... |
| 50 | 36M | 12.5% | 28531.3 Gwei |
| ... | ... | 12.5% | ... |
| 100 | 36M | 12.5% | 10302608.6 Gwei |
優先手数料 (チップ)
優先手数料 (チップ) は、ブロックのガス・リミットのみに制約されながら、ブロック内のトランザクション数を最大化するインセンティブをバリデータに与えます。ステーキング報酬はブロック内のトランザクション数とは無関係であるため、チップがなければ、合理的なバリデータは実行レイヤーやコンセンサス・レイヤーからの直接的なペナルティなしに、より少ないトランザクションを含めたり、あるいはゼロにしたりする可能性があります。さらに、チップによってユーザーは同じブロック内で優先順位を得るために他のユーザーより高い金額を提示することができ、事実上、緊急性を伝えることができます。
最大手数料
ネットワーク上でトランザクションを実行するために、ユーザーはトランザクションの実行に対して支払ってもよい最大上限を指定することができます。このオプションのパラメータはmaxFeePerGasとして知られています。トランザクションが実行されるためには、最大手数料が基本料金とチップの合計を超えている必要があります。トランザクションの送信者には、最大手数料と基本料金およびチップの合計との差額が返金されます。
ブロックサイズ
各ブロックのターゲットサイズは現在のガス・リミットの半分ですが、ブロックサイズはネットワークの需要に応じて、ブロックリミット (ターゲットブロックサイズの2倍) に達するまで増減します。プロトコルは、模索過程 (tâtonnement) を通じて、ターゲットにおける均衡平均ブロックサイズを達成します。つまり、ブロックサイズがターゲットブロックサイズよりも大きい場合、プロトコルは次のブロックの基本料金を引き上げます。同様に、ブロックサイズがターゲットブロックサイズよりも小さい場合、プロトコルは基本料金を引き下げます。
基本料金が調整される量は、現在のブロックサイズがターゲットからどれだけ離れているかに比例します。これは、空のブロックの-12.5%から、ターゲットサイズの0%、ガス・リミットに達したブロックの+12.5%までの線形計算です。ガス・リミットは、バリデータのシグナリングやネットワークのアップグレードによって、時間の経過とともに変動する可能性があります。ガス・リミットの経時的な変化はこちらで確認できます (opens in a new tab)。
実際のガス代の計算
トランザクションを実行するためにいくら支払う意思があるかを明示的に指定することができます。しかし、ほとんどのウォレットプロバイダーは、ユーザーにかかる複雑さを軽減するために、推奨されるトランザクション手数料 (基本料金 + 推奨される優先手数料) を自動的に設定します。
なぜガス代が存在するのですか?
簡単に言えば、ガス代はイーサリアム・ネットワークの安全性を保つために役立っています。ネットワーク上で実行されるすべての計算に手数料を要求することで、悪意のあるアクターがネットワークにスパムを送信するのを防ぎます。コード内の偶発的または悪意のある無限ループやその他の計算の無駄を避けるために、各トランザクションは、コード実行の計算ステップをいくつ使用できるかの上限を設定する必要があります。計算の基本単位が「ガス」です。
トランザクションには上限が含まれていますが、トランザクションで使用されなかったガスはユーザーに返還されます (例: max fee - (base fee + tip)が返還されます)。
Ethereum EVM illustrated (opens in a new tab)から引用した図
ガス・リミットとは何ですか?
ガス・リミットとは、トランザクションで消費してもよいガスの最大量を指します。スマート・コントラクトを含む複雑なトランザクションはより多くの計算作業を必要とするため、単純な支払いよりも高いガス・リミットが必要になります。標準的なETHの送金には、21,000単位のガス・リミットが必要です。
例えば、単純なETHの送金に50,000のガス・リミットを設定した場合、EVMは21,000を消費し、残りの29,000が返還されます。しかし、指定したガスが少なすぎる場合、例えば単純なETHの送金に20,000のガス・リミットを指定した場合、トランザクションは検証フェーズで失敗します。ブロックに含まれる前に拒否され、ガスは消費されません。一方、実行中にトランザクションのガスが不足した場合 (例: スマート・コントラクトが途中でガスをすべて使い果たした場合)、EVMはすべての変更をリバートしますが、提供されたすべてのガスは実行された作業のために消費されます。
なぜガス代は高騰するのですか?
ガス代の高騰は、イーサリアムの人気によるものです。需要が多すぎる場合、ユーザーは他のユーザーのトランザクションよりも高い金額を提示するために、より高いチップ額を提示しなければなりません。チップを高くすることで、トランザクションが次のブロックに入る可能性が高くなります。また、より複雑なスマート・コントラクトアプリは、その機能をサポートするために多くの操作を行っている可能性があり、大量のガスを消費することになります。
ガス代を削減するための取り組み
イーサリアムのスケーラビリティのアップグレードは、最終的にガス代の問題の一部を解決するはずであり、それによってプラットフォームは1秒間に数千のトランザクションを処理し、グローバルにスケールできるようになります。
レイヤー2 (L2) スケーリングは、ガス代、ユーザーエクスペリエンス、スケーラビリティを大幅に改善するための主要な取り組みです。
ガス代のモニタリング
ガス価格を監視して、より安くETHを送金したい場合は、以下のようなさまざまなツールを使用できます。
- Etherscan (opens in a new tab) トランザクションガス価格見積もりツール
- Blockscout (opens in a new tab) オープンソースのトランザクションガス価格見積もりツール
- ETH Gas Tracker (opens in a new tab) イーサリアムおよびL2のガス価格を監視・追跡し、トランザクション手数料を削減して節約
- Blocknative ETH Gas Estimator (opens in a new tab) Type 0のレガシートランザクションとType 2のEIP-1559トランザクションの両方をサポートする、ガス見積もり用のクローム拡張機能。
- Cryptoneur Gas Fees Calculator (opens in a new tab) メインネット、アービトラム、ポリゴンでのさまざまなトランザクションタイプのガス代を現地通貨で計算。
関連ツール
- Blocknative's Gas Platform (opens in a new tab) Blocknativeのグローバルなメンプールデータプラットフォームを活用したガス見積もりAPI
- Gas Network (opens in a new tab) オンチェーンのガスオラクル。35以上のチェーンをサポート。
参考文献
- Ethereum Gas Explained (イーサリアムのガスの解説) (opens in a new tab)
- Reducing the gas consumption of your Smart Contracts (スマート・コントラクトのガス消費量の削減) (opens in a new tab)
- Gas Optimization Strategies for Developers (開発者向けのガス最適化戦略) (opens in a new tab)
- EIP-1559ドキュメント (opens in a new tab)
- Tim BeikoのEIP-1559リソース (opens in a new tab)
- EIP-1559: Separating Mechanisms From Memes (EIP-1559: メカニズムとミームの分離) (opens in a new tab)