本文へ移動

ブロック Gas 上限

イーサリアムのブロック Gas 上限、EIP-1559 の目標、取引上限、Gas 使用量、手数料計算、スループット推定、ノード資源のトレードオフをフォーク別に解説します。

更新日

教育目的の情報であり、財務・セキュリティ上の助言ではありません。Gas 上限、目標、料金規則、取引上限、オペコードコスト、クライアント方針は、チェーン、フォーク、観測時点により異なります。

直接の答え

ブロック Gas 上限は、イーサリアムのブロックヘッダーに記録される実行 Gas の上限です。収録されるトランザクションはプロトコルの計算規則に従い、合計 gasUsedgasLimit を超えてはなりません。Gas は抽象的な計量単位です。オペコード、calldata、メモリ、ストレージ、払い戻しの規則はフォークごとに変わり、CPU 命令数、バイト数、取引数を直接表すものではありません。

Fusaka 後のイーサリアムメインネットでは、クライアント間で調整された基準が 1 ブロック当たり 60,000,000 gas です。ただし実際のヘッダー値が正であり、バリデーターの設定によって現行の親ブロック相対規則の範囲で徐々に変動します。EIP-1559 の弾性係数 2 により長期目標は 30,000,000 gas です。ブロックは一時的に上限まで使用でき、親ブロックの使用量が目標を超えると次のベースフィーが上がります。EIP-7825 はユーザー取引が宣言できる Gas 上限を別途 2^24 = 16,777,216 gas に制限し、EIP-7934 は独立した 8,388,608 bytes の RLP 実行ブロック上限を課します。いずれも日時とメインネットに固有で、EVM 共通定数ではありません。

仕組み

  1. チェーン、ネットワーク、ブロックのハッシュと番号、有効なフォーク、クライアントまたは RPC、観測時刻を固定します。ブロックヘッダーの gasLimitgasUsedbaseFeePerGas を読み、ウェブサイトの静的パラメータ表で代用しません。
  2. ブロック Gas 上限、EIP-1559 の Gas 目標、取引が宣言した Gas 上限、実際の Gas 使用量、Gas 単価を分けます。実行 Gas、Blob Gas、RLP 実行ブロックのバイト数、L2 固有の計量も区別します。
  3. 有効な Gas スケジュールで取引の妥当性と実行を再現します。固有 Gas、calldata、アクセスリスト、メモリ拡張、コールド・ウォームアクセス、ストレージ書き込み、プリコンパイル、払い戻しを含めます。推定値は状態とブロックタグに依存し、保証ではありません。
  4. ブロック容量を照合します。レシートの Gas 使用量を合計するか、最後のレシートの累積値を使い、gasUsed <= gasLimit を確認します。取引順序と状態依存コストも考慮します。取引数は Gas 上限でも固定 TPS でもありません。
  5. EIP-1559 を正しく適用します。弾性係数が 2 なら目標は gasLimit / 2 です。親ブロックの使用量が目標を上回ると次のベースフィーが上がり、下回ると下がります。現行規則では子ブロックの上限も親に対する約 1/1024 の厳密な範囲内に収まる必要があります。ベースフィーは需要を価格付けし、上限は受け入れる実行量を制約します。
  6. 運用上の境界を確認します。ブロックに空きがあっても取引単位の上限を超える取引は無効で、合計 Gas が上限未満でも過大な RLP 実行ブロックは無効です。未使用の取引 Gas 枠は解放され、払い戻しカウンターはフォークごとに上限がある別の減額制度です。REVERT は残りの Gas を保持しますが、トップレベルで Gas を使い切ると状態を戻し、与えられた実行枠をすべて消費します。
  7. 満杯ブロックの実行時間、状態増加、伝播、スロット欠落、再編成、ビルダーとバリデーターの処理能力、クライアント多様性、パラメータ変更をストレステストして監視します。実際のブロックとノード指標を比較してから、高い上限を持続可能なスループットと判断します。

計算例

  • 単純送金の上限。 60,000,000 gas なら、理論上は floor(60,000,000 / 21,000) = 2,857 件の通常の ETH 送金を収録できます。30,000,000 gas の目標なら 1,428 件で、理想化した 12-second スロットでは 1,428 / 12 = 119 transactions/second です。同種取引だけを想定した上限例であり、実測 TPS ではありません。
  • 取引が混在する目標ブロック。 送金が 400 * 21,000 = 8,400,000 gas、スワップが 80 * 180,000 = 14,400,000 gas、デプロイが 6 * 1,200,000 = 7,200,000 gas とします。合計は 30,000,000 gas486 transactions で、前述のスロット仮定では 486 / 12 = 40.5 transactions/second です。同じ Gas 目標でも取引数は大きく変わります。
  • 取引上限と実際の請求。 取引が 200,000 gas を宣言し、gasUsed = 146,000 で成功したとします。実効価格が 22 gwei なら手数料は 146,000 * 22 = 3,212,000 gwei = 0.003212 ETH で、未使用の 54,000 gas は請求されません。一方、18,000,000 gas の宣言は現行の 16,777,216 gas 上限を超えるため、ブロックに空きがあっても無効です。
  • ベースフィーの反応。 gasLimit = 60,000,000 なら目標は 30,000,000 です。24 gwei から始まり、親ブロックが 60,000,000 gas を使い切ると、次のベースフィーは最大 12.5% 上昇して 27 gwei になります。親が空なら 12.5% 下がって 21 gwei です。ブロック上限は変わらず、次ブロックの利用率も保証されません。

リスク

  • 古いメインネット Gas 上限値を使う。
  • イーサリアムの値を別の EVM チェーンや L2 に適用する。
  • ブロック上限と EIP-1559 目標を混同する。
  • ブロック上限と取引単位の上限を混同する。
  • 宣言した取引 Gas と実際の使用量を混同する。
  • Gas を固定の CPU、バイト、取引単位とみなす。
  • 古いオペコード、calldata、払い戻し規則を使うか、独立した RLP サイズ上限を無視する。
  • eth_estimateGas を想定状態とブロックタグなしで使う。
  • 状態依存の実行と取引順序を無視する。
  • 未使用の取引枠と別制度の払い戻しカウンターを混同する。
  • Gas 枯渇やリバート時に請求される Gas を無視する。
  • 実行 Gas と Blob Gas を同じ資源とみなす。
  • 同種の送金だけから TPS を導く。
  • スロット欠落、再編成、ファイナリティ遅延を無視する。
  • 最悪時のブロック実行・伝播時間を増やす。
  • 状態増加を速め、アーカイブ要件を高める。
  • バリデーター、ビルダー、RPC のハードウェア要件を高める。
  • 中央集権化やクライアント不一致のリスクを高める。
  • バリデーター設定、クライアント既定値、フォーク変更を見落とす。
  • 容量増加を手数料や需要の低下保証とみなす。

よくある誤解

  • ブロック Gas 上限はイーサリアムまたは EVM に共通する固定定数である。
  • 60,000,000 gas の上限なら全ブロックが 6,000 万 Gas を使うべきで、EIP-1559 の目標も同じである。
  • ブロック上限を 21,000 で割れば実際の TPS が得られる。
  • ブロックに空きがあれば一取引で全容量を使える。現行の取引単位上限は独立した制約である。
  • Gas 上限を上げれば、ノード、状態、伝播、需要、中央集権化のトレードオフなしに手数料が自動的に下がる。

関連トピック

出典

ナビゲーション

Wiki を検索...