← 博客
10 分钟阅读
|
2026年10月22日

如何在以太坊及其他链上估算 Gas 费用

学习如何估算 Gas 费用:公式、Gas Limit 与 Gas Price 的区别、eth_estimateGas 的使用,以及 Arbitrum 等链上的常见陷阱,并附带实战示例。

章节
C
Chaingateway Team
区块链专家

带有交易标记的等距费用平面图

要估算 Gas 费用,需将交易将消耗的 Gas 量乘以你为每单位 Gas 支付的价格。在以太坊实施 EIP-1559 后,这意味着 (基础费用 + 优先费用) × 使用的 Gas 单位数。Gas 单位数来自对你的具体交易进行模拟。价格来自实时网络。本指南涵盖这两个方面,随后介绍第 2 层网络、智能账户以及在应用中构建支付功能时的变化。

(如果你是想查找汽车燃油价格而来到此页,请注意本页面讨论的是区块链交易费用。)

TL;DR

  • 费用 = 使用的 Gas 量 × 每单位 Gas 价格。Gas 使用量衡量计算工作量。每单位 Gas 价格反映网络需求。
  • 使用 eth_estimateGas 模拟具体交易以获取单位数,并读取实时费用数据以获取价格。在签名前立即刷新这两项数据。
  • Gas 限制是一个上限,而非实际收费。未使用的 Gas 不会被消耗,但交易失败仍需为其已完成的工作支付费用。
  • Arbitrum 等 Rollup 增加了第 1 层数据成本。请使用各链自带的估算器,而非假设以太坊主网的参数。
  • 对于支付应用,请存储估算值、费用字段、时间戳和最终收据中的实际费用,以便后续对账。

目录

每笔 Gas 估算背后的公式

Ethereum.org 将 Gas 定义为衡量在网络上运行操作所需计算工作量的单位。每笔交易都会消耗一定量的 Gas。你随后为每个单位支付价格。这产生两个独立的数字:

  1. Gas 单位数取决于交易执行的操作。向普通地址发送 ETH 很简单。调用智能合约则不然。
  2. 每单位 Gas 价格取决于网络当前的拥堵程度。以 Gwei 报价。

大多数计算器隐瞒的要点在于:更改合约逻辑会改变第一个数字,而网络拥堵会改变第二个。好的界面应同时展示两者,而不是给出一个无法解释的总额。

Gwei 与 ETH

1 Gwei 等于 0.000000001 ETH (10^-9)。因此换算时,将 Gas 单位数乘以 Gwei 价格,再除以 1,000,000,000 即得 ETH 数量。仅当你需要美元数值时,才乘以 ETH 价格。我们的 Gwei 换算工具 支持 Wei、Gwei 和 ETH 双向换算。

EIP-1559 的变更

自 EIP-1559 起,每个区块都有一个随需求上下调整的每 Gas 基础费用,且基础费用会被销毁。此外,交易还包含优先费用(小费)和最大费用,即你愿意为每 Gas 支付的总价上限。只要总和不超过最大费用,你实际支付的就是包含该交易的区块的基础费用加上你的小费。

因此,钱包报价包含三个变动部分:Gas 用量、基础费用和小费。最大费用是一个安全上限,而非预测值。

EIP-1559 费用如何在最大费用上限下组合

Gas 限制与 Gas 价格

这两个术语最容易让新手困惑,现并列如下。

Gas 限制Gas 价格
含义你允许交易使用的最大 Gas 单位数你为每单位支付的价格,单位为 Gwei
由谁设定你对所需工作量的估算市场需求,加上你的小费
提高它本身不会增加费用直接增加费用
过低交易失败交易等待或不被打包

关键行为:Gas 限制是一个上限。标准 ETH 转账使用 21,000 Gas,未使用的分配 Gas 会被退还。MetaMask 指出,手动提高限制不一定会增加最终费用,因为未使用的 Gas 不会被消耗。这也不会换来更快的确认。手动覆盖仅能防止你低估用量。

危险在于另一方向。如果合约在执行过程中耗尽 Gas,它会回滚,但仍会消耗你提供的 Gas。且即使交易回滚,计算也要付费。这就是为什么你要在广播前先模拟。

一个实际示例

下方数字仅为示例,非实时价格。假设基础费用为 20 Gwei,优先费用为 2 Gwei,即每 Gas 22 Gwei。

交易Gas 单位每 Gas 价格费用费用
普通 ETH 转账21,00022 Gwei462,0000.000462
ERC-20 授权(典型钱包显示)45,00022 Gwei990,0000.00099

简单转账的 21,000 数值来自 Ethereum.org。45,000 是 MetaMask 通常为 ERC-20 授权显示的数值,但实际数值取决于合约及其状态。代币转账或 Swap 又会不同。这就是为什么除普通转账外,你无法为任何操作硬编码用量的原因。

要得到法币金额,用 0.000462 ETH 乘以当前 ETH 价格。最后再做这一步,并标注为近似值。

代码中估算 Gas

如果你是开发而非点击操作,流程分四步。

  1. 描述完整的交易意图。 eth_estimateGas 需要链、目标地址、calldata 和 value,以及可选的费用字段。更改代币数量、接收者或合约状态,估算结果都可能改变。切勿复用来自不同转账的估算值。
  2. 对节点调用 eth_estimateGas。 它返回所需的 gas 单位,通常为十六进制数字,你必须将其解码。
  3. 获取当前价格建议。 向费用预言机或你的节点请求你想要速度(慢、标准、快)下的基础费用和小费建议。
  4. 计算并展示一个范围。 将单位乘以价格,向用户展示最大值或范围。报价不等于保证,网络状况可能在估算和打包之间发生变化。

然后养成一个省心的习惯:在签名前立即刷新价格。Gas 价格对需求敏感,因此同一笔交易在不同时间可能花费不同金额。Ethereum.org 指向区块浏览器和 Gas 追踪器以获取实时数据,适合你只需手动快速查看时使用。

给限额留缓冲,而非给价格

在 gas limit 上留一小部分缓冲是廉价的保险,因为未使用的 gas 不会被收费。而给单位 gas 价格加缓冲,会直接增加你的支出。在代码中将这两个决策分开。

Layer 2 和其他链不遵循主网公式

单一通用的 EVM 公式可能会产生误导。Rollup 会对两项收费:Layer 2 上的执行,以及将你的交易数据发布到 Layer 1。

Arbitrum 是个很好的例子。其文档称快速路径是调用 eth_estimateGas 并乘以子链 gas 价格。返回的 gas limit 包含 Layer 2 计算加上 Layer 1 成本的缓冲。该缓冲取决于压缩后的 calldata 大小和父链定价,因此当 Layer 1 繁忙时估算值可能会偏移。对于组件级核算,NodeInterface.gasEstimateComponents 调用会拆分出总量、Layer 1 缓冲和基础费用数据。Arbitrum 本身也警告估算值为近似值,实际费用可能不同。

如需更深入的演示,请参阅我们关于使用 NodeInterface 和 Nitro 公式追踪实时 Arbitrum gas 费用的文章。

Tron 采用完全不同的模型。它按带宽和能量收费,而非 gas 价格,因此上述内容均不直接适用。我们的TRON 费用指南和USDT-TRC20 转账 TRON 费用计算器涵盖了该模型。

多链产品的原则:使用各网络自带的估算器,并将链特定逻辑保持在一个接口之后。

Layer 2 和其他链不遵循主网公式 — 概览图

智能账户与赞助 Gas

如果您使用带有 Paymaster 的账户抽象,普通交易报价是不够的。ERC-7677 解释说,Paymaster 估算取决于上下文,因为钱包和 Bundler 知道用户操作实际上将如何提交。它指出钱包应使用 Paymaster 提供的 Gas 值用于 Paymaster 特定字段,包括操作后 Gas,因为 Bundler 可能会低估这些成本。

实践中:通过您将用于广播的相同钱包、Paymaster 和 Bundler 路径进行估算。不要复用普通交易得出的数字。

常见估算错误

  • 在没有上下文的情况下显示单个数字。 用户应看到单位、价格和上限。
  • 将钱包的最大限制作为预期收费。 限额是上限。将其乘以价格会高估可能的费用。
  • 一次估算,稍后签名。 价格和合约状态会变动。在签名前重新模拟。
  • 将以太坊主网假设应用于 Rollup。 您将遗漏第 1 层数据组件。
  • 忽略失败。 回滚的交易仍会消耗 Gas。先模拟并在用户付费前呈现错误。
  • 丢弃审计轨迹。 没有记录,财务无法将报价与实际收费核对。

付款应记录的内容

如果您的应用涉及资金流转,请将估算视为值得保留的数据。对于每笔交易,请存储:

  • 链和区块上下文
  • Gas 估算值和您设置的 Gas 限额
  • 使用的费用字段(基础费用、小费、最大费用)
  • 估算的时间戳
  • 交易收据中的最终费用

将报价与收据对比,可知您的估算偏离程度,以及缓冲是过紧还是过宽。当客户询问费用为何变化时,也能给支持团队一个直接的答案。

我们的观点

我们接触的大多数团队不在公式上犯难,而在于公式之外的一切:为多条网络运行节点、解码原始响应、处理每条链的费用特性,并在链发生变化时保持一切一致。

我们围绕这一缺口构建了 Chaingateway。核心思路是提供一个跨链的 REST API,支持 Ethereum、Tron、Bitcoin、Solana、Polygon、BNB Chain 和 Arbitrum 等链,具备自动 Gas 估算和预解码数据,让您的团队无需为每条链单独维护费用路径。我们认为,费用估算应是发送交易的内置步骤,而非开发人员为每条链重复造轮子的副项目。

我们还认为报价应诚实。将估算标记为估算,将收据费用放在旁边,让数字告诉您缓冲该设在哪里。

— Bitblade

跳过逐链费用管道搭建

如果您正在构建钱包、付款或充值流程,我们的 区块链 API 可让您创建钱包、发送带自动 Gas 估算的代币转账,并通过单一接口获取解码后的交易数据。搭配 Chaingateway Webhooks 即可在收到付款时获得实时通知,而非轮询。请求采用 HMAC 签名。

计划按月或按年计费,您可在 定价页面 查看每个层级:

计划月付年付
Plus49 欧元/月490 欧元/年
Pro99 欧元/月990 欧元/年
Premium249 欧元/月2490 欧元/年
Enterprise499 欧元/月4990 欧元/年

专门在 Arbitrum 上构建?请参阅如何通过一次 REST 调用在 Layer 2 上发送 ERC-20 代币。关于 ETH、Gas 和 ERC-20 代币的背景知识,我们的以太坊概览是一个很好的起点。

常见问题

如何在以太坊上估算 Gas 费用?

使用 eth_estimateGas 模拟您的具体交易以获取 Gas 单位。获取当前基础费用和优先费用建议,然后计算 (基础费用 + 优先费用) × Gas 单位。从 gwei 转换为 ETH,仅在需要显示美元时才转换为美元。

Gas 限制 和 Gas 价格 有什么区别?

Gas 限制 是您允许交易使用的最大 Gas 单位数。Gas 价格 是您为每个单位支付的费用,单位为 gwei。限制是一个上限,未使用的 Gas 不会被收费,而价格直接决定您的费用。

估算的 Gas 费用就是我实际要支付的吗?

不一定。估算基于您询问那一刻的网络状况,而在您的交易被打包前网络状况可能会发生变化。在以太坊上,您支付的是包含您交易的区块的基础费用加上您的小费,并受您设定的最大费用上限约束。请向用户展示一个范围或最大值,而不是保证的数字。

如果交易失败,我还需要支付 Gas 吗?

是的,在大多数情况下。回滚前发生的计算仍需付费,而在执行过程中耗尽 Gas 的交易会消耗所提供的 Gas。提前模拟可以在您花费任何费用之前捕获许多失败情况。

为什么 Layer 2 的 Gas 估算不同?

Rollup 会对 Layer 2 上的执行和向 Layer 1 提交数据分别收费。在 Arbitrum 上,估算的 Gas 限制 包含了用于该 Layer 1 成本的缓冲,这会随父链定价而变化。请使用该链自带的估算方法。

来源

推荐阅读

准备好自己动手构建了吗? 获取你的 API key — 7 天试用,无需信用卡 — 或查看 区块链 API 获取完整的 endpoint 参考。

C
Chaingateway Team
区块链专家

Chaingateway 团队致力于为全球开发者简化区块链集成。