跳到正文

Gas 与交易费用

按分叉版本介绍 gas 单位、固有与执行成本、EIP-1559 费用上限、基础费销毁、优先费、回滚、gas 耗尽、退款、blob gas 和 L2 费用组成。

更新于

仅供教育参考,不构成投资或交易建议。费用取决于具体的链、分叉、交易类型、执行路径、状态、费用市场、排序器或构建者政策及纳入时间。

直接答案

Gas 是协议衡量执行工作量和状态访问的记账单位;gas 费用则是用计费 gas 单位乘以每单位价格得出的货币费用。在采用 EIP-1559 的以太坊上,effectiveGasPrice = min(maxFeePerGas, baseFeePerGas + maxPriorityFeePerGas),执行费为 gasUsed * effectiveGasPrice;其中基础费部分被销毁,优先费部分通过区块的费用接收方路径支付。Gas 上限和费用上限授权的是最大值,并非一定会支出的金额。

实际 gas 用量取决于 calldata、操作码路径、内存扩展、冷/热状态访问、存储变更、嵌套调用、预编译合约、成功或失败、退款和生效的分叉。提高价格可以增强交易被纳入的竞争力,却无法修复回滚、gas 上限不足、恶意合约、过时报价或错误 calldata。Blob 交易和许多 L2 还会产生独立的数据费或协议费,不能默认并入 EVM gas。

网络费用
0.000462 native
法币等值
$1.39
基础费
22 gwei

结果是教育用途的近似值。除非明确展示,否则未计入交易场所规则、税费、延迟、预言机行为及其他协议参数。

运行机制

  1. 锁定链、分叉、区块或状态标签、交易类型、发送者、nonce、目标地址、转账价值、calldata、访问列表、blob 字段、gas 代币和费用币种。记录报价对应的是 L1 交易、L2 执行、数据发布、提款还是组合路径。
  2. 在执行前重建固有 gas:交易信封、calldata 字节成本、合约创建与访问列表费用以及交易类型特有开销。如果 gas 上限低于固有 gas,或发送者无法满足协议的最大成本有效性检查,交易会在纳入执行前被拒绝,而不是纳入后回滚。
  3. 按目标分叉追踪执行。测量操作码动态成本、内存扩展、冷/热账户或存储槽、SSTORE、调用 gas 转发、价值转移、预编译费用、日志和退款。同一个 ABI 函数在不同状态下可能走不同分支并使用不同 gas。
  4. 区分结果。执行成功会提交效果。REVERT 会回滚失败作用域,并可能返还该调用帧未使用的 gas;gas 耗尽这一异常停机会通常耗尽分配给该调用帧的 gas。被纳入的顶层失败即使回滚合约状态、价值转移和日志,仍会消耗发送者 nonce 和计费 gas。
  5. 为执行 gas 定价。对类型 2 交易,根据基础费、优先费上限和总费用上限计算实际 gas 价格,再把计费 gas 拆分为销毁的基础费与优先费。应区分未使用 gas、未支出的费用上限余量,以及合资格状态清理产生且受生效退款上限约束的协议 gas 退款。
  6. 单独计算其他费用市场。Blob 交易除执行 gas 外还支付 blobGasUsed * blobGasPrice,并受 maxFeePerBlobGas 约束;blob 基础费采用独立调整路径。L2 用户费用可能包括 L2 执行费、压缩后的 L1 数据费或 blob 成本、运营者或协议收费及利润加成;公式与标量参数取决于具体部署和升级。
  7. 对账估算、纳入和收据。签名前,按转账价值加授权的最高费用核验余额,在锁定状态下模拟并设置有界费用上限。纳入后,记录 gas 上限、收据 gas 用量、实际价格、基础费、优先费、退款影响、blob gas、L2 费用字段、状态和余额变动;分别处理估算误差、交易替换和最终确定性。

计算示例

  • 类型 2 成功交易与上限。 Gas 上限为 120,000,gas 用量为 70,000,基础费为 25 gwei,最高优先费为 3 gwei,最高费用为 40 gwei。实际价格为 min(40, 25 + 3) = 28 gwei;实际费用为 70,000 * 28 gwei = 0.001960 ETH,其中 0.001750 ETH 被销毁,0.000210 ETH 是优先费。执行费授权上限为 120,000 * 40 gwei = 0.004800 ETH;未使用的 50,000 gas 和未支出的费用上限余量都不是协议状态清理退款。
  • REVERT 与 gas 耗尽。 两个已纳入调用的 gas 上限均为 100,000,实际价格均为 30 gwei。调用 A 执行 REVERT 时,收据 gas 用量达到 60,000,费用为 60,000 * 30 gwei = 0.001800 ETH。调用 B 耗尽整个交易 gas 上限,费用为 100,000 * 30 gwei = 0.003000 ETH。两次顶层失败都会回滚合约效果并消耗发送者 nonce,但 REVERT 可保留未使用 gas,gas 耗尽则不会。
  • 退款上限。 在限定于 EIP-3529 分叉的教学案例中,执行在退款前消耗 100,000 gas,产生 30,000 gas 的退款计数器。可应用的最高退款为 100,000 / 5 = 20,000 gas,因此计费 gas 为 100,000 - 20,000 = 80,000 gas。按 20 gwei 计算,费用是 0.001600 ETH 而非 0.002000 ETH,节省 0.000400 ETH;退款规则和合资格操作可能随分叉改变。
  • 独立 blob 费用市场。 假设某 blob 交易使用 100,000 执行 gas,价格为 20 gwei,并携带两个 blob。按 131,072 blob gas/blob,blob gas 用量为 262,144;若 blob gas 价格为 5 gwei,blob 费用是 262,144 * 5 gwei = 0.00131072 ETH。执行费为 0.002000 ETH,协议费用合计 0.00331072 ETH。这里的 5 gwei 仅为示例;blob 费用既不是验证者优先费,也不是 L2 用户的完整端到端费用。

风险

  • 使用错误的链、分叉、gas 代币、交易类型或费用币种。
  • 混淆 gas 单位、wei、gwei、ETH 和法币换算。
  • 把 gas 上限当成预期或实际费用。
  • 无法通过固有 gas 或最大成本的执行前有效性检查。
  • 状态、基础费或 calldata 变化后仍依赖过时估算。
  • 把 gas 上限设得低于实际执行分支所需用量。
  • 误以为提高 gas 价格可以防止合约回滚。
  • 混淆 REVERT、gas 耗尽、无效操作码和执行前拒绝。
  • 顶层状态为 1 时漏查已被捕获的子调用失败。
  • 错算冷/热状态访问或使用不完整的访问列表。
  • 忽略内存扩展、调用 gas 转发、预编译或日志成本。
  • 使用过时的存储退款规则或超过退款上限。
  • 把未使用 gas 或费用上限余量算作协议 gas 退款。
  • 将最高费用设得低于纳入区块的基础费。
  • 在不了解构建者或排序器政策时过付优先费。
  • 持有其他资产却没有原生 gas 代币。
  • 遗漏 blob gas、blob 费用上限或数据可用性费用。
  • 把某个 L2 的执行、数据、标量和运营者费用公式视为通用公式。
  • 忽略交易替换、nonce、交易丢弃和余额预留的竞态。
  • 把已付费或成功的交易当作合约安全或最终确定的证明。

常见误区

  • Gas 按转账价值的百分比收取。
  • 提高 gas 上限必然增加实际收费。
  • 较高的最高费用或优先费能保证执行成功。
  • 所有未使用的授权额度和状态清理退款都是同一种机制。
  • L2 费用只等于本地 EVM gas,blob 费用就是普通执行 gas。

相关主题

来源

导航

搜索知识库...