メインコンテンツへスキップ
Change page

ガスとフィー(手数料)

最終編集者: @HiroyukiNaito(opens in a new tab), 2024年8月16日

イーサリアムネットワークにとってガスは切り離せないものです。 ガスは車にとってのガソリンのようにイーサリアムを稼働させるための燃料として使われます。

前提知識

このページをよく理解するためには、まずトランザクションEVMを読むことをお勧めします。

ガスとは

ガスとは、イーサリアムネットワーク上で特定の操作を実行するために必要な計算労力を測定する単位のことです。

イーサリアムでは、トランザクションを実行するには計算リソースが必要です。そのため、そのリソースの対価として料金を支払う必要があります。これにより、イーサリアムはスパム攻撃に対する脆弱性を解消し、無限の計算ループに陥ることを防ぎます。 計算料金は、ガス代として支払われます。

ガス代は、操作のガス使用量に、ガス単位当たりのコストを乗じた額です。 この料金は、トランザクションが成功したか失敗したかに関係なく支払われます。

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 feepriority 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%増加します。 この指数的な増加により、ブロックサイズを無制限に高くすることは、経済的に不可能になります。

ブロック数含有ガス増加されるフィー現在のベースフィー
115M0%100 gwei
230M0%100 gwei
330M12.5%112.5 gwei
430M12.5%126.6 gwei
530M12.5%142.4 gwei
630M12.5%160.2 gwei
730M12.5%180.2 gwei
830M12.5%202.7 gwei

上の表によると、ブロック数9のトランザクションを行う場合、次のブロックに追加される最大ベースフィーは、current base fee * 112.5%、つまり202.7 gwei * 112.5% = 228.1 gweiとなります。この情報がウォレットからユーザーに通知されます。

また、フルブロックの状態になるとベースフィーの上昇速度が上がるため、フルブロックのスパイクが長続きしないことにも注意が必要です。

ブロック数含有ガス増加されるフィー現在のベースフィー
3030M12.5%2705.6 gwei
......12.5%...
5030M12.5%28531.3 gwei
......12.5%...
10030M12.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スケーリングの詳細

ガス代のモニタリング

ETHをより安く送れるようにガス代を節約したい場合は、次のような様々なツールを利用できます。

参考文献

この記事は役に立ちましたか?