Ethereumのガス代の計算方法:ベース手数料・優先手数料・ガス上限
Ethereumのガス単位、ガス上限、ベース手数料、優先手数料、最大手数料の意味を確認し、実際のトランザクション費用を計算します。
このガイドの内容ガスは送金額ではなく計算処理を表す単位
短い要約
Ethereumのガス代は、トランザクションが実際に使用したガス量に、そのトランザクションが取り込まれたブロックでの実効ガス価格を掛けて計算します。ベース手数料はプロトコルが設定してバーンし、優先手数料はバリデーターに渡ることがあります。最大手数料は上限であり、実際に支払う価格とは限りません。
ガスは送金額ではなく計算処理を表す単位
Ethereumでは、ガスはEVMがトランザクションを処理するために必要な計算処理量を数える単位です。単純なETH送金の処理量は比較的少ない一方、トークンの移転やスマートコントラクトの複数の条件の実行には、より多くの処理が必要になることがあります。そのため、同じ量のETHを送るトランザクションでも、実行する処理が違えば使用するガス量は異なります。
ガス単位は処理量を表し、ガス価格は1単位あたりに提示するETHの額を表します。この2つを掛けた値が手数料です。ガス上限はトランザクションが消費できる最大単位数で、maxFeePerGasは1単位あたりの価格上限です。どちらも同じ「最大手数料」を別の形で表しているわけではありません。
このガイドでは、Ethereumメインネット上の標準的なEIP-1559トランザクションを説明します。ほかのブロックチェーンやレイヤー2では、手数料の仕組み、支払いに使う資産、表示名が異なる場合があります。Ethereumの用語をそのまま全ネットワークに当てはめないでください。Ethereum.orgのガスガイドとトランザクションガイドで各フィールドの定義を確認できます。
使用ガス量はトランザクションが行う処理によって変わる
EVMは計算処理や状態変更にガスコストを割り当てます。コントラクトの呼び出しには、単純な送金にはない関数の実行、ストレージの読み書き、イベントの記録などが加わることがあります。操作が多いほど、また実行経路が長いほど、使用ガス量が増える場合があります。使用ガス量は、送るETHの額やトークンの市場価格を掛けて計算するものではありません。
ETHの送金、トークンの送金、dappの呼び出しでは、実行する処理が異なります。コントラクト呼び出しでは追加の関数を実行したりストレージを読み書きしたりするため、単純な送金より多くのガスを使う場合があります。取り込まれたトランザクションでは、トランザクションレシートに実際の使用ガス量が記録されます。
Ethereum.orgは、標準的なETH送金の例として21,000ガスを挙げています。これは単純な送金の参考値であり、実行する関数やストレージアクセスによって処理内容が変わるコントラクト呼び出しに、そのまま使えるガス上限ではありません。
ネットワークのガス代は、サービスが設定する出金手数料とも異なります。取引所は運営費を上乗せしたり、独自の手数料体系を使ったりする場合があります。オンチェーンのガス代はネットワークが処理する計算資源への費用です。出金画面に金額が1つしか表示されない場合、プラットフォーム手数料とネットワーク費用の合計かどうか確認してください。
ガス上限と使用ガス量は異なる数値
ガス上限(gasLimit)は、トランザクションが消費できるガス単位の最大数です。使用ガス量(gasUsed)は、実行終了時に実際に消費した量です。上限を高く設定しても、その上限いっぱいまで自動的に課金されるわけではありません。取り込まれたトランザクションの手数料は、実際の使用ガス量と実効ガス価格で決まり、使われなかった上限分は消費されません。
トランザクション自体が実行中にガス切れになると、ガス上限の全量を消費して失敗します。状態変更は元に戻りますが、計算にかかった費用は発生します。上限を高くするとより多くの処理が可能になる一方、ガス費用の最大リスクも高まります: gasLimit × maxFeePerGas。実際の請求額は使用ガス量と実効価格で決まります。
ガス上限は実際の使用量の予測ではなく、上限です。単価とは異なり、単価を上げても不足するガス単位数は補えません。呼び出しが何を実行するのか分からない場合は、上限を適当に変更せず、ウォレットやアプリの公式案内を確認してください。
ベース手数料はブロックスペースの需要に応じて変わる
EIP-1559のトランザクションでは、ベース手数料はプロトコルがブロックごとに定める1ガスあたりの価格です。トランザクションの最大手数料は、それを取り込むブロックのベース手数料を賄える額である必要があります。プロトコルは、直前のブロックで目標に対してどれだけのガスが使われたかに応じて、ブロックごとにベース手数料を調整します。上昇も下降もするため、恒久的な固定料金ではありません。
実際に使われたガスに相当するベース手数料はバーンされ、バリデーターはこの分をチップとして受け取りません。ベース手数料はブロックごとに変わるため、保留中のトランザクションは送信時とは異なるベース手数料のブロックに取り込まれることがあります。
gweiはETHの小さな単位で、1 gweiは0.000000001 ETHです。使用ガス量が同じでもガス価格が高くなると、ETH建ての費用は増えます。1単位あたりの価格が変わらなくても、使用ガス量が増えれば費用は増えます。どちらもETHのドル価格とは別に、ETH建ての手数料を変化させます。
優先手数料は取り込みを促すチップ
優先手数料(チップ)は、トランザクションを取り込むバリデーターに提示するガス1単位あたりの報酬です。ユーザーは限られたブロックスペースを競うため、ほかの条件が同程度なら、チップが大きいトランザクションのほうが選ばれやすくなることがあります。これは急ぎ具合を示す要素ですが、特定のブロックや時間内に取り込まれる保証ではありません。
画面上の優先手数料が高いことと、必要なガス単位数が多いことは別の話です。優先手数料は1単位あたりの価格を変え、ガス上限は許容する処理量を制限します。チップを高くしても、複雑なコントラクト呼び出しに必要なガスが足りなければ失敗する場合があります。反対に、ガス単位数が十分でも、価格上限がブロックのベース手数料を賄えなければ取り込まれません。
バリデーターはブロックスペースやほかのトランザクションの条件も考慮して選択します。EIP-1559の仕様では、ベース手数料と優先手数料に別々の役割を定め、両者の合計となる実効価格が最大手数料を超えないよう制限しています。
最大手数料は実際の価格ではなく価格上限
maxFeePerGasは、1単位あたりに負担する意思のある最高価格です。maxPriorityFeePerGasは、提示するチップの1単位あたりの上限です。トランザクションが取り込まれると、実効価格はベース手数料に、両方の上限内に収まるチップを足して決まります。適用されるチップはmaxPriorityFeePerGasとmaxFeePerGas - baseFeeの小さいほうに制限されるため、実効価格は最大手数料を超えません。
たとえば、最大手数料が30 gwei、最大チップが2 gwei、ブロックのベース手数料が18 gweiとします。適用可能なチップは2 gweiなので、実効価格は20 gweiです。上限が30 gweiというだけで、常に30 gweiを払うわけではありません。ベース手数料が31 gweiまで上がると、30 gweiの上限ではそのブロックを賄えず、そこには取り込まれません。
ベース手数料が最大手数料に近づくほど、チップに使える余地は小さくなります。チップ上限を5 gweiに設定していても、maxFeePerGas - baseFeeが1 gweiしかなければ、適用されるチップは最大でも1 gweiです。2つの上限と、その時点のベース手数料の関係を合わせて確認してください。

例の数値で実際の費用と上限を計算する
以下は計算方法を示すための仮の数値です。ガス上限を30,000単位、実際の使用量を24,000単位、ブロックのベース手数料を18 gweiとし、最大チップを2 gwei、最大手数料を30 gweiに設定したとします。適用されるチップはmin(2, 30 - 18) = 2 gwei、実効価格は18 + 2 = 20 gweiです。
実際のガス代は24,000 × 20 = 480,000 gweiです。1 ETHは1,000,000,000 gweiなので、0.00048 ETHになります。ベース手数料分は24,000 × 18 = 432,000 gwei、つまり0.000432 ETHです。チップ分は24,000 × 2 = 48,000 gwei、つまり0.000048 ETHです。2つを合計すると、実際のガス代0.00048 ETHになります。
ガス上限いっぱいの単位数に価格上限を掛けると、30,000 × 30 = 900,000 gwei、つまり0.0009 ETHです。この設定でガス上限と単価上限の両方を使い切った場合のガス代上限です。例の実際のガス代とは異なります。受取人に送るETHの額はガス代と別です。上限を固定料金と考えたり、ガス代を送金額に対する割合と考えたりしないでください。これは説明用の例であり、現在の価格提示ではありません。
トランザクションが失敗してもガスを消費することがある
ウォレットに「失敗」と表示されても、ガス代が返金されるとは限りません。トランザクションがブロックに取り込まれてEVMの実行後にリバートされた場合、状態変更は元に戻りますが、計算に使ったガス代は発生します。トランザクション自体が実行中にガス切れになると、ガス上限の全量を消費します。意図した結果が得られなくても、計算処理は行われています。
ブロックに入る前の検証で拒否されるトランザクションは別です。たとえば、必要量より少ないガスで送信したETH送金はブロックに入る前に拒否されることがあり、その場合、実行ガスは消費されません。「取り込み前に拒否」と「取り込まれた後に実行中revert」は同じ状態ではありません。
トランザクションハッシュでステータス、使用ガス量、実効ガス価格、実行結果を確認してください。ウォレットの短いエラーメッセージだけでは原因が分からない場合があります。Ethereum.orgは、取り込み前の検証による拒否と、実行中にガス切れになるケースを区別しています。
上限・価格・送金額を分けて確認する
署名前に、使用中のネットワークと、単純な送金なのかコントラクト呼び出しなのかを確認してください。ウォレットには、推定手数料、ガス上限、ベース手数料の見積もり、優先手数料の上限、最大手数料の上限、送るETHやトークンの額が表示されることがあります。それぞれ意味が異なります。最大ガス代だけが表示されている場合、確定した引き落とし額だと思わず、詳細を開いてどの上限なのか確認してください。
ウォレットが手数料の見積もりを入力してくれるため、多くの場合、すべての項目を手動で調整する必要はありません。見積もりはその時点のネットワーク状況に基づいており、取り込みの時期や最終費用を保証するものではありません。価格上限が低いとトランザクションが待機することがあります。呼び出し内容を理解せずに上限やチップを上げると、問題を解決しないまま想定コストだけが増える場合があります。現在の値を確認し、トランザクションの内容に納得できる場合だけ署名してください。
ここではEthereumメインネットの標準的なトランザクションの流れを扱いました。レイヤー2やほかのチェーンでは、データ手数料が別途表示されたり、手数料資産や計算方法が異なったりすることがあります。別ネットワークにEthereumの計算式を当てはめる前に、そのネットワークのドキュメントを確認してください。送金先のネットワークとアドレスは暗号資産の送金チェックリストで、コントラクトがトークンを利用するための別個の権限はトークン承認ガイドで確認できます。
よくある質問
Q1トランザクションが失敗してもETHが差し引かれるのはなぜですか?
トランザクションが取り込まれて実行が始まった場合、状態変更が取り消されても計算処理でガスを使うことがあります。トランザクションハッシュを確認し、実行時の失敗か取り込み前の拒否かを区別してください。
Q2`maxFeePerGas`はウォレットに表示される実際のガス価格ですか?
いいえ。これは1単位あたりの価格上限です。実効価格は取り込まれたブロックのベース手数料と、上限内で適用されるチップで決まるため、最大額より少なくなる場合があります。
Q3Ethereumメインネットのトランザクションではガス代をETHで払いますか?
Ethereumメインネットの標準トランザクションは、ネットワークのネイティブ資産であるetherでガス代を支払います。ウォレットに別のトークンや第三者スポンサーが表示される場合は、別の手数料支払いの仕組みか確認してください。ほかのチェーンでは異なる場合があります。
出典
問題を報告
この記事のリンクを含むメールを準備します。送信すると Mark に報告が届きます
クイックチェック
記事を読み終えたら、3問で確認しましょう
問題 01
`gasLimit`が表すものは何ですか?
答えを選ぶと解説を確認できます