Gas Fee 计算方法

自 2021 年 8 月的“伦敦硬分叉”(London Hard Fork)升级后,以太坊引入了 EIP-1559 提案,彻底改变了 Gas 费的计算模型。现在的计算方式比以前更复杂,但也更可预测。

简单来说,一笔交易的总费用由以下几个核心部分组成:

总 Gas 费 = 使用的 Gas 数量 (Gas Used) × (基础费 + 优先费)

下面我们来分解这个公式里的每一个概念:

Gas Limit (Gas 限制)

是什么:这是你愿意为一笔交易最多消耗的 Gas 单位数量。它像汽车的油箱容量。

作用:防止因合约执行出现意外(如无限循环)而耗尽你钱包里所有的 ETH。

** 举例**:

  • 一笔标准的 ETH 转账,Gas Used 固定为 21,000。你的 Gas Limit 设置必须大于或等于 21,000。

  • 与智能合约交互则需要更多的 Gas,比如 100,000 或更高。

注意:交易完成后,只会按照实际消耗 (Gas Used) 的数量来计算费用,未用完的 Gas 会退还给你。但如果 Gas Limit 设置得太低,交易会因 “Out of Gas” 而失败,但已经消耗的 Gas 不会退还。

Base Fee (基础费)

是什么:这是由以太坊网络协议自动计算得出的必须支付的费用部分,单位是 Gwei。

如何确定:它根据上一个区块的拥堵情况(即上一个区块包含了多少 Gas)来动态调整。

  • 如果上一个区块的使用量 > 50% (目标是 1500 万 Gas),Base Fee 就会上涨。

  • 如果上一个区块的使用量 < 50%,Base Fee 就会下降。

  • 如果正好是 50%,Base Fee 保持不变。

最大特点:这部分费用会被销毁 (Burn),而不是支付给验证者(矿工)。这会减少 ETH 的总供应量,引入了通缩机制。

Priority Fee (优先费 / 小费)

是什么:这是你额外支付给验证者(矿工)的小费,用于激励他们优先处理你的交易。

作用:在网络拥堵时,更高的 Priority Fee 能让你的交易更快被打包进区块。如果网络不拥堵,设置一个较小的小费(如 1-2 Gwei)通常就足够了。

** 谁得到这笔钱**:这部分费用完全归验证者所有。

Max Fee Per Gas (每单位 Gas 最高费用)

是什么:为了应对 Base Fee 的实时波动,你还需要设置一个你愿意支付的总费用上限(包含 Base Fee 和 Priority Fee)。

作用:这是一个安全帽。它保证了无论 Base Fee 如何在你提交交易后飙升,你支付的总价(每单位 Gas)都不会超过这个你设定的 Max Fee。

退款机制

  • 你实际支付的 Gas 价格 = 当前 Base Fee + 你的 Priority Fee。

  • 如果这个价格低于你设置的 Max Fee,差额部分会退还给你。

  • 例如:你设置 Max Fee = 50 Gwei,Priority Fee = 2 Gwei。而当时 Base Fee = 30 Gwei。

    • 你实际支付 = 30 + 2 = 32 Gwei。

    • 这笔交易是有效的,因为 32 < 50。

    • 你不需要为 50 Gwei 的上限支付全额。

总结与实例

假设当前情况如下:

  • 网络计算出的 Base Fee = 30 Gwei

  • 你为了让交易快一点,设置 Priority Fee = 2 Gwei

  • 你设置的 Gas Limit = 21,000 (一笔标准转账)

你的总交易费用计算如下:

  1. 每单位 Gas 的价格 = 30 Gwei (Base Fee) + 2 Gwei (Priority Fee) = 32 Gwei

  2. 总费用 = 21,000 (Gas Used) × 32 Gwei = 672,000 Gwei (或 0.000672 ETH)

其中:

  • 被销毁的部分 = 21,000 × 30 Gwei = 630,000 Gwei

  • 给验证者的部分 = 21,000 × 2 Gwei = 42,000 Gwei

与旧系统(EIP-1559 之前)的对比

  • 旧系统:采用简单的“第一价格拍卖”模式。总费用 = Gas Used × Gas Price。你需要猜测一个 Gas Price,出价高者得。这导致 Gas 价格波动剧烈且难以预测,用户体验很差。

  • 新系统 (EIP-1559):通过动态调整的 Base Fee 提供了价格的确定性,并通过 Priority Fee 保留了用户加急交易的灵活性,整体上大大改善了用户体验和费用的可预测性。

对应源码

本文配套代码固定到提交 8960383;Gas 数据会随编译器、优化器参数和 EVM 版本变化。