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

要估算 Gas 费用,需将交易将消耗的 Gas 量乘以你为每单位 Gas 支付的价格。在以太坊实施 EIP-1559 后,这意味着 (基础费用 + 优先费用) × 使用的 Gas 单位数。Gas 单位数来自对你的具体交易进行模拟。价格来自实时网络。本指南涵盖这两个方面,随后介绍第 2 层网络、智能账户以及在应用中构建支付功能时的变化。
(如果你是想查找汽车燃油价格而来到此页,请注意本页面讨论的是区块链交易费用。)
TL;DR
- 费用 = 使用的 Gas 量 × 每单位 Gas 价格。Gas 使用量衡量计算工作量。每单位 Gas 价格反映网络需求。
- 使用
eth_estimateGas模拟具体交易以获取单位数,并读取实时费用数据以获取价格。在签名前立即刷新这两项数据。 - Gas 限制是一个上限,而非实际收费。未使用的 Gas 不会被消耗,但交易失败仍需为其已完成的工作支付费用。
- Arbitrum 等 Rollup 增加了第 1 层数据成本。请使用各链自带的估算器,而非假设以太坊主网的参数。
- 对于支付应用,请存储估算值、费用字段、时间戳和最终收据中的实际费用,以便后续对账。
目录
- 每笔 Gas 估算背后的公式
- Gas 限制与 Gas 价格
- 实例演示
- 代码中估算 Gas
- 第 2 层网络和其他链不遵循主网公式
- 智能账户与赞助 Gas
- 常见估算错误
- 支付场景应记录的内容
- 我们的观点
- 跳过逐链费用管道搭建
- 常见问题
- 参考来源
每笔 Gas 估算背后的公式
Ethereum.org 将 Gas 定义为衡量在网络上运行操作所需计算工作量的单位。每笔交易都会消耗一定量的 Gas。你随后为每个单位支付价格。这产生两个独立的数字:
- Gas 单位数取决于交易执行的操作。向普通地址发送 ETH 很简单。调用智能合约则不然。
- 每单位 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 用量、基础费用和小费。最大费用是一个安全上限,而非预测值。

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,000 | 22 Gwei | 462,000 | 0.000462 |
| ERC-20 授权(典型钱包显示) | 45,000 | 22 Gwei | 990,000 | 0.00099 |
简单转账的 21,000 数值来自 Ethereum.org。45,000 是 MetaMask 通常为 ERC-20 授权显示的数值,但实际数值取决于合约及其状态。代币转账或 Swap 又会不同。这就是为什么除普通转账外,你无法为任何操作硬编码用量的原因。
要得到法币金额,用 0.000462 ETH 乘以当前 ETH 价格。最后再做这一步,并标注为近似值。
代码中估算 Gas
如果你是开发而非点击操作,流程分四步。
- 描述完整的交易意图。
eth_estimateGas需要链、目标地址、calldata 和 value,以及可选的费用字段。更改代币数量、接收者或合约状态,估算结果都可能改变。切勿复用来自不同转账的估算值。 - 对节点调用
eth_estimateGas。 它返回所需的 gas 单位,通常为十六进制数字,你必须将其解码。 - 获取当前价格建议。 向费用预言机或你的节点请求你想要速度(慢、标准、快)下的基础费用和小费建议。
- 计算并展示一个范围。 将单位乘以价格,向用户展示最大值或范围。报价不等于保证,网络状况可能在估算和打包之间发生变化。
然后养成一个省心的习惯:在签名前立即刷新价格。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 费用计算器涵盖了该模型。
多链产品的原则:使用各网络自带的估算器,并将链特定逻辑保持在一个接口之后。

智能账户与赞助 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 签名。
计划按月或按年计费,您可在 定价页面 查看每个层级:
| 计划 | 月付 | 年付 |
|---|---|---|
| Plus | 49 欧元/月 | 490 欧元/年 |
| Pro | 99 欧元/月 | 990 欧元/年 |
| Premium | 249 欧元/月 | 2490 欧元/年 |
| Enterprise | 499 欧元/月 | 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 成本的缓冲,这会随父链定价而变化。请使用该链自带的估算方法。
来源
- 以太坊 Gas 和费用:技术概览,ethereum.org
- 如何估算 Gas 费用,MetaMask 帮助中心
- Gas 费用、限制和网络费用的工作原理,MetaMask 帮助中心
- 如何在 Arbitrum 中估算 Gas,Arbitrum 文档
- ERC-7677:Paymaster Web 服务能力
- EIP-1559,以太坊改进提案
推荐阅读
准备好自己动手构建了吗? 获取你的 API key — 7 天试用,无需信用卡 — 或查看 区块链 API 获取完整的 endpoint 参考。