跳到正文

区块 Gas 上限

一份考虑分叉边界的以太坊区块 Gas 上限指南,涵盖 EIP-1559 目标、单笔交易上限、Gas 使用量、费用核算、吞吐估算及节点资源权衡。

更新于

仅供教育参考,不构成财务或安全建议。Gas 上限、目标、计价规则、单笔交易上限、操作码成本和客户端策略会因链、分叉及观察时间而异。

直接答案

区块 Gas 上限是记录在以太坊区块头中的执行 Gas 容量上限。区块收录的交易必须符合协议的核算规则,使总 gasUsed 不超过 gasLimit。Gas 是一种抽象计量单位,其操作码、调用数据、内存、存储和退款规则会随分叉变化;它不直接等于 CPU 指令数、字节数或交易数。

Fusaka 后,以太坊主网客户端协调采用的基准为每区块 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、调用数据、访问列表、内存扩展、冷访问与热访问、存储写入、预编译合约和退款。估算取决于状态及区块标签,并非保证。
  4. 对账区块容量。汇总收据 Gas 使用量,或使用最后一张收据的累计值,确认 gasUsed <= gasLimit,并考虑交易顺序和状态相关成本。交易数既不等于 Gas 上限,也不代表固定 TPS。
  5. 正确应用 EIP-1559。弹性系数为 2 时,目标为 gasLimit / 2;父区块用量高于目标会提高下一块基础费,低于目标则会降低。依当前规则,子区块上限还必须处在相对父区块约 1/1024 的严格范围内。基础费为需求定价,上限则约束可接纳的执行工作量。
  6. 检查运行边界。即使区块仍有 Gas 空间,超过已激活单笔上限的交易也无效;即使总 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 gas,共 486 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 使用量。
  • 把 Gas 当作固定的 CPU、字节或交易单位。
  • 使用过时的操作码、调用数据或退款规则,或忽略独立的 RLP 区块大小上限。
  • 使用 eth_estimateGas 时未指定预期状态和区块标签。
  • 忽略状态相关执行和交易顺序。
  • 混淆未使用的交易配额与独立的退款计数器。
  • 忽略执行耗尽 Gas 或回滚时仍需支付的 Gas。
  • 把执行 Gas 与 Blob Gas 当作同一资源。
  • 只用同质转账推导 TPS。
  • 忽略漏块、链重组和最终性延迟。
  • 增加最坏情况下的区块执行与传播时间。
  • 加快状态增长并提高归档要求。
  • 提高验证者、构建者和 RPC 的硬件要求。
  • 增加中心化或客户端分歧风险。
  • 漏掉验证者偏好、客户端默认值或分叉变更。
  • 把更高容量误当成费用或需求必然降低。

常见误区

  • 区块 Gas 上限是固定且通用于以太坊或 EVM 的常量。
  • 60,000,000 gas 上限表示每个区块都应使用 6000 万 Gas,或 EIP-1559 目标也是 6000 万。
  • 用区块上限除以 21,000 就能得到链的真实 TPS。
  • 只要区块有空间,单笔交易就可用完整个区块;当前单笔上限是独立约束。
  • 提高 Gas 上限会自动降低费用,而无需承担节点、状态、传播、需求或中心化方面的权衡。

相关主题

来源

导航

搜索知识库...