在开发以太坊相关应用时,经常需要实现的一个功能就是让用户看到当前交易所需的Gas费用。在EIP-1559之后,以太坊的Gas机制发生了重大改革。因此,本文先以介绍EIP-1559开始,具体估算Gas费用的代码在下一篇给出。
EIP-1559简介
历史协议对比(EIP-1559之前)
在EIP-1559之前,以太坊使用第一价格拍卖模型(无基础费用和优先费用的区分):
- 用户直接指定Gas Pricedfdf
- 矿工优先打包出价高的交易
- 问题:用户需盲目猜测合理价格,容易支付过高费用。
EIP-1559(以太坊改进提案1559)是2021年8月随伦敦升级引入的Gas费机制改革,旨在解决传统Gas拍卖模型的低效问题。它的核心创新包括:
- 基础费用(Base Fee):由协议自动计算,随网络拥堵程度动态调整。
- 优先费用(Priority Fee):用户额外支付的小费,激励矿工/验证者优先打包交易。
- Gas费燃烧(Fee Burning):基础费用被销毁,减少ETH流通量。
本教程将重点解析动态调整机制,并给出代码。
Gas费用组成
发送交易时,支付的Gas费分为两部分:基础费用(Base Fee)和 优先费用(Priority Fee,俗称"小费")。
基础费用
由以太坊协议强制设定,是交易有效的最低费用,必须支付,否则交易会被拒绝。
优先费用
用户自愿添加的额外激励,鼓励验证者优先打包你的交易,不设固定值,根据网络拥堵程度动态调整。
基础费用会被销毁(通缩机制),优先费用归验证者所有。仅支付基础费用的交易有效但可能滞留,因为验证者无动力优先处理。
公式: 总费用 = Gas用量 × (基础费用 + 优先费用)
Gas费计算实例
假设:
- A 向 B 转账 1 ETH。
- 转账消耗的燃料为 21000Gas。
- 当前基础费用为 10 gwei,A设置小费 2 gwei。
计算过程:
21000 × (10 + 2) = 252,000 gwei = 0.000252 ETH
资金流向:
- A账户扣除:1.000252 ETH
- B收到:1.000000 ETH
- 验证者获得小费:0.000042 ETH
- 基础费用 0.00021 ETH 被销毁
基础费用的动态调整机制
- 每个区块的基础费用由前一个区块的Gas使用量决定:
- 目标值:15 million gas/区块(弹性上限30 million)。
- 当前一个区块Gas使用量高于目标值时(拥堵),增加基础费用;反之(空闲)则减少基础费用。
- 计算公式:
下一区块基础费用 = 当前基础费用 × (1 + (实际用量 - 目标用量) / (目标用量 × 8))
- 调整规则
前一个区块状态 | 基础费用变化幅度 | 解释 |
---|---|---|
Gas用量 > 15 million | 升高,最大幅度+12.5% | 满块时(30M gas)触顶增幅 |
Gas用量 = 15 million | 不变 | 网络处于理想平衡状态 |
Gas用量 < 15 million | 降低,最大幅度-12.5% | 空块时(0 gas)触底降幅 |
这种动态调整机制带来的好处包括:
消除Gas费极端波动,提升可预测性
- 传统拍卖问题:用户需盲目竞价,导致Gas费在拥堵时飙升数百倍(如NFT铸造高峰期达1000+ Gwei)。
- 动态调整解决方案:
- 基础费用按数学公式平滑变化(每块最多±12.5%),避免价格断层。
- 用户可基于当前区块数据准确预判下一区块费用。
- 实例:
假设当前基础费=100 Gwei,即使突然涌入大量交易,下一区块费用最高仅升至112.5 Gwei,而非传统模型的不可控暴涨。
抑制网络拥堵的恶性循环
- 拥堵自调节机制:
- 当区块Gas使用量连续超过目标值(15M),基础费用指数级上升。
- 高昂费用会自动劝退低优先级交易(如MEME币炒作),缓解拥堵。
长期稳定ETH经济模型
- 燃烧机制联动效应:
- 基础费用100%销毁,动态调整直接调控ETH流通量。
- 网络越拥堵,销毁量越大,形成通缩压力。
优先费用
优先费用的设置比较灵活,在进行估算时需要注意以下两点:
- 避免支付过高费用
- 确保交易在合理时间内被确认
具体的估算方式和代码,将在下一篇中给出。