燃料和费用
上次修改时间: @Fred-Porlock(opens in a new tab), 2024年8月16日
Gas 对以太坊网络至关重要。 正是这种燃料使它能够运行,正如车辆需要汽油一样。
前提条件
什么是燃料?
燃料是指在以太坊网络上执行特定操作所需的计算工作量。
由于每笔以太坊交易都需要使用计算资源来执行,因此必须为这些资源付费,以确保以太坊不容易受到垃圾信息的攻击,并且不会陷入无限的计算循环。 计算费用以燃料费的形式支付。
燃料费是用于执行某些操作的燃料数量,乘以每单位燃料的成本。 无论交易成功与否,都要支付燃料费。
示意图节选自以太坊虚拟机图解(opens in a new tab)
燃料费必须用以太坊的本币支付,即以太币 (ETH)。 燃料通常以 gwei 计价,gwei 是以太币的一种计量单位。 一个 gwei 等于一个以太币的十亿分之一(0.000000001 个以太币,或 10-9 个以太币)。
比如,你可以说你的燃料费是 1 gwei,而不说 0.000000001 个以太币。
"Gwei" 是 "giga-wei" 的缩写,意思是 “十亿个 wei”。 一个 gwei 等于十亿个 wei。 Wei 本身(以 b-money(opens in a new tab) 的发明者 Wei Dai(opens in a new tab) 的名字命名)是以太币的最小单位。
如何计算燃料费?
当提交交易时,你可以设置你愿意支付的燃料数量。 通过提供一定数量的燃料,你出价将你的交易添加到下一个区块中。 如果你提供的燃料太少,验证者就不太可能选择添加你的交易,这意味着你的交易可能会延迟执行或不会被执行。 如果提供太多,你可能浪费一些以太币。 那么,怎么知道你应该支付多少燃料费呢?
你支付的总燃料费分为两部分:base fee
和 priority fee
(小费)。
Base fee
由协议设定——你必须至少支付这些金额,然后你的交易才会被视为有效。 Priority fee
是基础费以外的小费,它可以吸引验证者选择将你的交易添加到下一个区块。
只支付 base fee
的交易从技术上讲是有效的,但不太可能被添加到区块,因为它没有激励验证者优先选择它而不是其他交易。 “合适的” priority
费由发送交易时的网络使用情况决定——如果有大量需求,那么你可能不得不将你的 priority
费设置得更高;但当需求较少时,你也可以减少该费用。
例如,假设 Jordan 要向 Taylor 支付 1 个以太币。 一笔以太币转账需要 21,000 单位的燃料,基础费是10 gwei。 Jordan 支付了 2 gwei 作为小费。
总费用等于:
使用的燃料单位数 *(基础费 + 优先费)
其中 base fee
由协议设置,priority fee
是用户设置的支付给验证者的小费。
即 21,000 * (10 + 2) = 252,000 gwei
(0.000252 个以太币)。
当 Jordan 转账时,将从 Jordan 帐户中扣除 1.000252 个以太币。 Taylor 的帐户增加 1.0000 个以太币。 验证者收到价值 0.000042 个以太币的小费。 0.00021 个以太币的 base fee
被销毁。
基础费
每个区块都有一个基础费作为底价。 要想有资格添加到区块中,燃料费出价必须至少等于基础费。 基础费独立于当前区块计算,是由当前区块之前的区块决定的,这使得用户更容易预测交易费。 在创建区块时,它的基础费将被“销毁”并退出流通。
基础费由一个公式计算得出,该公式将上一个区块的大小(所有交易中使用的燃料数量)与目标大小进行比较。 如果超过目标区块大小,每个区块的基础费将最多增加 12.5%。 这种指数级增长使得区块大小无限期保持高位在经济上不可行。
区块编号 | 已包含燃料 | 费用增加 | 当前基本费用 |
---|---|---|---|
1 | 15M | 0% | 100 gwei |
2 | 30M | 0% | 100 gwei |
3 | 30M | 12.5% | 112.5 gwei |
4 | 30M | 12.5% | 126.6 gwei |
5 | 30M | 12.5% | 142.4 gwei |
6 | 30M | 12.5% | 160.2 gwei |
7 | 30M | 12.5% | 180.2 gwei |
8 | 30M | 12.5% | 202.7 gwei |
根据以上表格,要在 9 号区块创建交易,钱包会让用户明确知晓:要将交易添加到下一个区块的最高基础费等于 current base fee * 112.5%
或 202.7 gwei * 112.5% = 228.1 gwei
。
还请注意,考虑到完整区块前的基础费增加速度很快,我们不大可能看到它长时间处于峰值状态。
区块编号 | 已包含燃料 | 费用增加 | 当前基本费用 |
---|---|---|---|
30 | 30M | 12.5% | 2705.6 gwei |
... | ... | 12.5% | ... |
50 | 30M | 12.5% | 28531.3 gwei |
... | ... | 12.5% | ... |
100 | 30M | 12.5% | 10302608.6 gwei |
优先费(小费)
优先费(小费)激励验证者将交易添加到区块中。 如果没有小费,验证者会发现开采空区块在经济上可行,因为它们会获得相同的区块奖励。 小额小费是对验证者将交易添加到区块的最小激励。 在相同区块中,对于要优先于其他交易执行的交易,可以添加更高的小费来尝试使出价高于竞争性交易。
最高费用
要在网络上执行交易,用户可以为他们愿意支付的交易执行费用指定最高限额。 此可选参数称为 maxFeePerGas
。 为了执行交易,最高费用必须超过基础费和小费的总和。 交易完成后,会将最高费用与基础费和小费总和之间的差额退还给交易发送人。
区块大小
每个区块的目标大小为 1500 万单位燃料,但区块的大小将根据网络需求增减,最大不得超过 3000 万单位燃料的区块大小上限(目标区块大小的 2 倍)。 协议通过 tâtonnement 过程使均衡区块大小平均达到 1,500 万单位燃料。 这意味着如果区块大小超出目标区块大小,协议将增加下一个区块的基础费。 同样,如果区块大小小于目标区块大小,协议将减少基础费。 基础费的调整金额与当前区块大小和目标区块大小的差距成比例。 关于区块的更多信息。
实践中的燃料费计算
你可以明确说明自己愿意支付多少交易执行费。 然而,大多数钱包提供商会自动设置推荐的交易费(基础费 + 推荐的优先费)来降低用户操作的复杂程度。
为什么存在燃料费?
简而言之,燃料费有助于确保以太坊网络的安全。 在网络上执行的每次计算都需要收费,这样可以防止不良行为者给网络带来垃圾信息。 为了防止代码中出现无意或恶意的无限循环或其他计算浪费,要求每笔交易对可以采用的代码执行计算步骤设置一个限制。 基本计算单位是“燃料”。
尽管交易中包含费用限制,但交易中未使用的所有燃料将退还给用户(即退还 max fee - (base fee + tip)
)。
示意图节选自以太坊虚拟机图解(opens in a new tab)
什么是燃料限额?
燃料限额是指你愿意在交易中消耗的最大燃料数量。 涉及智能合约的更复杂交易需要进行更多的计算工作,因此相比简单的支付,它们需要更高的燃料限额。 标准以太币转账要求燃料限额为 21,000 单位燃料。
例如,如果你对简单的以太币转账设置 50,000 单位燃料限额,以太坊虚拟机将消耗 21,000 单位,你将收到剩余的 29,000 单位。 然而,如果你设置的燃料太少,比如说,对于简单的以太币转账,设置燃料限额为 20,000 单位,以太坊虚拟机将消耗 20,000 单位燃料并尝试执行交易,但最后不会完成。 然后,以太坊虚拟机回滚所有变化,但由于验证者已经完成了价值 20k 单位燃料的工作,这些燃料就被消耗了。
为什么燃料费会变得如此高?
燃料费高是由于以太坊广受欢迎。 如果需求量太大,用户必须提供更高的小费,力争使出价高于其他用户的交易。 小费越高,交易进入下一个区块的可能性就越大。 此外,更复杂的智能合约应用可能会执行许多操作来支持其功能,使它们消耗大量的燃料。
减少燃料成本的举措
以太坊可扩展性升级最终应该可以解决部分燃料费问题,并让以太坊平台有能力每秒处理数千笔交易,从而实现全面扩容。
二层网络扩容是一项主要举措,可大大优化燃料成本、用户体验和可扩展性。 关于二层网络扩容的更多信息。
监控燃料费
如果想要监控燃料价格,用较少的费用发送以太币,你可以使用多种不同的工具,例如:
- Etherscan 区块浏览器(opens in a new tab)交易燃料价格估算器。
- Blocknative ETH Gas Estimator(opens in a new tab) 支持类型 0 传统交易和类型 2 EIP-1559 交易的燃料估算 Chrome 插件。
- Cryptoneur Gas Fees Calculator(opens in a new tab) 按照你的当地货币计算主网、Arbitrum 和 Polygon 上进行的各类交易的燃料费。
相关工具
- Blocknative 的燃料平台(opens in a new tab)由 Blocknative 的全局内存池数据平台提供支持的燃料估算应用程序接口