ガスとフィー(手数料)
最終編集者: @HiroyukiNaito(opens in a new tab), Invalid DateTime
イーサリアムネットワークにとってガスは切り離せないものです。 ガスは車にとってのガソリンのようにイーサリアムを稼働させるための燃料として使われます。
前提知識
このページをよく理解するためには、まずトランザクション、EVMを読むことをお勧めします。
ガスとは
ガスとは、イーサリアムネットワーク上で特定の操作を実行するために必要な計算労力を測定する単位のことです。
イーサリアムでは、トランザクションを実行するには計算リソースが必要です。そのため、そのリソースの対価として料金を支払う必要があります。これにより、イーサリアムはスパム攻撃に対する脆弱性を解消し、無限の計算ループに陥ることを防ぎます。 計算料金は、ガス代として支払われます。
ガス代は、操作のガス使用量に、ガス単位当たりのコストを乗じた額です。 この料金は、トランザクションが成功したか失敗したかに関係なく支払われます。
イーサリアム EVM(opens in a new tab)からの図解
実際にはガス代はイーサリアムのネイティブ通貨であるイーサ(ETH)で支払う必要があります。 ガス価格は通常、ETH の単位の 1 つである gwei で見積もられます。 gwei は、ETH の 10 億分の 1(0.000000001 ETH すなわち 10-9 ETH)に相当します。
例えば、0.000000001 ETH のガス代は、1 gwei となります。
「gwai」とは、「10 億 wei」を意味する「giga-wei」の略語であり、 1 gwei は、10 億 wei に相当します。 wei はb-money(opens in a new tab)の創始者であるWei Dai(opens in a new tab)氏にちなんで名付けられ、ETH の最小単位です。
ガス代の計算方法
ガス量を設定してトランザクションを送信できます。 ガス量をいくらか支払うことで、次のブロックに含まれるトランザクションに入札することになります。 ガス量が少なすぎると、バリデータがトランザクションを処理する可能性が低くなります。つまり、トランザクションが遅れて実行されたり、まったく実行されなかったりすることがあります。 一方で、ガス量が多すぎると、ETH を無駄にすることになります。 それでは、どのようにして適切なガス代を決めればよいのでしょうか。その方法について説明します。
支払うガス代の合計は、base fee
とpriority fee
(チップ) の 2 つのコンポーネントに分けられます。
base fee
は、プロトコルで定められています。トランザクションを有効にするには、必ずこの手数料を支払う必要があります。 priority fee
は、ベースフィーに追加して支払うチップです。この手数料を支払うことで、バリデータにとって、あなたのトランザクションが魅力的になり、次のブロックに選ばれるようになります。
トランザクションにおいてbase fee
のみを支払うことは、技術的には有効であるものの、バリデータにとって他のトランザクションよりも優先させるインセンティブがなく、そのトランザクションが選ばれる可能性は低くなります。 「正確な」priority fee
は、トランザクション送信時のネットワーク使用状況で決定します。需要が高い場合は、priority fee
を高めに設定する必要があります。需要が低い場合は、より安く設定できます。
例えば、Jordan が Taylor に 1 ETH を支払わなければならない場合、 ガス単位で 21,000 が必要になります。基本料金は 10 gwei ですが、 Jordan はチップとして 2 gwei を追加します。
合計フィーは、次と等価となります。
使用されるガス単位 × (ベースフィー + プライオリティフィー)
この式のbase fee
は、プロトコルで設定された値です。また、priority fee
は、バリデータへのチップとしてユーザーが設定した値です。
つまり、21,000 * (10 + 2) = 252,000 gwei
(0.000252 ETH)
Jordan が送金すると、Jordan の口座から 1.000252 ETH が差し引かれ、 Taylo の口座に 1.0000ETH が入金されます。 また、バリデータには 0.000042 ETH のチップが支払われ、 base fee
である 0.00021ETH はバーンされます。
ベースフィー
ブロックごとに、最低価格となるベースフィーが設定されています。 トランザクションをブロックに含めるには、ガスあたりの提供価格がベースフィー以上である必要があります。 ベースフィーは、現在のブロックとは別個に計算され、前のブロックによって決定されます。これにより、おおよそのトランザクションフィーを予測できます。 ブロックが作成されると、このベースフィーは「バーン」され、流通から削除されます。
ベースフィーは、前のブロックのサイズ(すべてのトランザクションに使用されるガスの量)とターゲットサイズを比較して計算されます。 ターゲットブロックサイズを超えると、ベースフィーは 1 ブロックあたり最大 12.5%増加します。 この指数的な増加により、ブロックサイズを無制限に高くすることは、経済的に不可能になります。
ブロック数 | 含有ガス | 増加されるフィー | 現在のベースフィー |
---|---|---|---|
1 | 15M | 0% | 100 gwei |
2 | 30M | 0% | 100 gwei |
3 | 30M | 12.5% | 112.5 gwei |
4 | 30M | 12.5% | 126.6 gwei |
5 | 30M | 12.5% | 142.4 gwei |
6 | 30M | 12.5% | 160.2 gwei |
7 | 30M | 12.5% | 180.2 gwei |
8 | 30M | 12.5% | 202.7 gwei |
上の表によると、ブロック数 9 のトランザクションを行う場合、次のブロックに追加される最大ベースフィーは、current base fee * 112.5%
、つまり202.7 gwei * 112.5% = 228.1 gwei
となります。この情報がウォレットからユーザーに通知されます。
また、フルブロックの状態になるとベースフィーの上昇速度が上がるため、フルブロックのスパイクが長続きしないことにも注意が必要です。
ブロック数 | 含有ガス | 増加されるフィー | 現在のベースフィー |
---|---|---|---|
30 | 30M | 12.5% | 2705.6 gwei |
... | ... | 12.5% | ... |
50 | 30M | 12.5% | 28531.3 gwei |
... | ... | 12.5% | ... |
100 | 30M | 12.5% | 10302608.6 gwei |
プライオリティフィー(チップ)
バリデータは、プライオリティフィー(チップ)を受け取ることで、ブロック内にトランザクションを含めるインセンティブを得ます。 チップがなければ、空のブロックをマイニングした方が、同じブロック報酬を得られるので経済的に有利となります。 チップが少ないと、バリデータにとってトランザクションを含めるインセンティブは小さくなります。 そのため、競合するトランザクションよりも高いチップを支払うことで、同じブロック内の他のトランザクションよりも優先的にトランザクションが実行されるようになります。
最大フィー
ネットワーク上でトランザクションを実行する場合、ユーザーはトランザクション実行に支払うフィーの上限を指定できます。 このオプションのパラメータは、maxFeePerGas
として知られています。 トランザクションを実行するには、最大フィーがベースフィーとチップの合計額を上回る必要があります。 トランザクションの送信者には、最大フィーからベースフィーとチップの合計額を差し引いた差額が返金されます。
ブロックサイズ
各ブロックの目標サイズは 1,500 万ガスですが、ブロックの上限である 3,000 万ガス(目標ブロックサイズの 2 倍)までは、ネットワークの需要に応じてブロックのサイズが増減します。 このプロトコルは、 tâtonnementのプロセスを通じて平均 1,500 万の平衡ブロックサイズを実現します。 つまり、ブロックサイズがターゲットブロックサイズよりも大きい場合、プロトコルは次のブロックのベースフィーを増加させます。 同様に、ブロックサイズがターゲットブロックサイズより小さい場合、プロトコルはベースフィーを減らします。 ベースフィーが調整される金額は、現在のブロックサイズとターゲットまでの差に比例します。 ブロックの詳細
ガス代を実際に計算する
トランザクションを実行するために支払う金額を具体的に指定できますが、 ほとんどのウォレットプロバイダーは、ユーザーへの負担を軽減するため、推奨トランザクションフィー(ベースフィー + 推奨プライオリティフィー)を自動で計算しています。
ガス代の必要性
簡単に説明すると、ガス代はイーサリアムネットワークを安全に保つのに役立ちます。 ネットワーク上のそれぞれの計算処理に手数料を課すことで、ネットワークに対する攻撃を防止します。 コード内の偶発的または敵対的な無限ループ、またはその他の過剰計算による損失を防ぐために、 各トランザクションはコード実行の計算ステップ数(1 トランザクションにおける計算量)を制限する必要があります。 計算の基本単位は「ガス」になります。
トランザクションには制限がありますが、トランザクションで使用されなかったガスはユーザーに返却されます(例: max fee - (base fee + tip)
が返金)。
イーサリアム EVM(opens in a new tab)からの図解
ガスリミットとは
ガスリミットとは、1 回のトランザクションで消費できるガスの最大量のことです。 スマートコントラクトを含む複雑なトランザクションでは、単純な支払いよりもより多くの計算作業が必要なため、高いガスリミットを必要とします。 標準の ETH 送金には、21,000 ユニットのガスリミットが必要です。
例えば、簡単な ETH 送金に 50,000 のガスリミットを設定した場合、EVM は 21,000 を消費し、残りの 29,000 が戻されます。 ただし ETH 送金に、例えば 20,000 など少なすぎるガスリミットを指定すると、EVM はトランザクションを満たそうとして 20,000 のガスユニットを消費しますが、完了はしません。 EVM は変更を元に戻しますが、バリデータがすでに 20,000 ガスユニット分の作業を実施済みのため、その分のガスは消費されます。
ガス代が高い理由
高いガス代はイーサリアムの人気の高さが原因です。 需要が高すぎると、他のユーザーのトランザクションよりも高いチップをオファーする必要があり、 高いチップを払うほど、トランザクションが次のブロックに入る可能性が高くなります。 また、より複雑なスマートコントラクトアプリは、その機能を維持するために多くの操作を実行し、大量のガスを消費することがあります。
ガス代削減への取り組み
イーサリアムのスケーラビリティ・アップグレードは、最終的にいくつかのガス代の問題を解決し、ひいてはプラットフォームが毎秒数千のトランザクションを処理し、グローバルにスケールアップできるはずです。
レイヤー 2 のスケーリングは、ガス代、ユーザーエクスペリエンス、スケーラビリティを大幅に向上させるための主要なイニシアチブです。 レイヤー 2 スケーリングの詳細
ロンドンアップグレード/EIP-1559 の更新内容
ロンドンアップグレード前は、イーサリアムのブロックサイズは固定されていました。 ネットワーク需要が高い時期には、ブロックはフル稼働していたため、 需要の減少を待つ必要があることからトランザクションの追加が遅れ、ユーザーエクスペリエンスが悪化しました。 しかし、ロンドンアップグレードにより、イーサリアムに可変サイズのブロックが導入されたことで、この問題は解消されました。
イーサリアムネットワークのトランザクションフィーの算出方法は、2021 年 8 月のロンドンアップグレードに伴って変更されました。 ロンドンアップグレード以前は、次のようにbase fee
とpriority fee
を分けずにフィーが計算されていました。
例えば、Alice が Bob に 1 ETH を支払う必要があるとしましょう。 トランザクションでは、ガスリミットは 21,000 ユニット、ガス価格は 200 gwei です。
フィーの総額はGas units (limit) * Gas price per unit
です。 つまり、21,000 * 200 = 4,200,000 gwei
または 0.0042 ETH となります。
ロンドンアップグレードでEIP-1559(opens in a new tab)が導入されたことで、トランザクションフィーの仕組みは従来よりも複雑になりましたが、ガス代の予測がしやすくなり、結果的にトランザクションフィー市場がより効率的になるというメリットが生まれました。 ユーザーはガスの市場価格(baseFeePerGas
)以上の金額を支払うことなく、トランザクションの実行に支払うmaxFeePerGas
を設定してトランザクションを送信でき、チップを差し引いた余剰分は返金されます。
EIP-1559 とそのメリットについて説明するビデオ:
ガス代のモニタリング
ETH をより安く送れるようにガス代を節約したい場合は、次のような様々なツールを利用できます。
- Etherscan(opens in a new tab)トランザクションガス価格見積もりツール
- Blocknative ETH Gas Estimator(opens in a new tab) タイプ 0 のレガシートランザクションとタイプ 2 の EIP-1559 トランザクションの両方をサポートする Chrome 拡張機能のガス見積もりツール。
- Cryptoneur Gas Fees Calculator(opens in a new tab)メインネット、Arbitrum、Polygon で異なるトランザクションタイプのガス代をローカル通貨で計算
関連ツール
- Blocknative's Gas Platform(opens in a new tab) Blocknative のグローバル mempool データプラットフォームを搭載したガス見積もり API
参考文献
- イーサリアムガスの説明(opens in a new tab)
- スマートコントラクトのガス消費量の削減(opens in a new tab)
- プルーフ・オブ・ステークとプルーフ・オブ・ワークの比較(opens in a new tab)
- デベロッパーのためのガス最適化戦略(opens in a new tab)
- EIP-1559 のドキュメント(opens in a new tab)
- Tim Beiko による EIP-1559 リソース(opens in a new tab)