一文读懂 EIP-1559 协议
什么是 EIP-1559
EIP-1559(以太坊改进提案 1559)是以太坊网络的一个重要升级提案,它在 2021.08.05 以太坊伦敦硬分叉升级被正式激活。这个升级旨在改善以太坊的交易费用机制,以提高网络的可预测性和用户体验。
改进1:每个区块的 gasLimit 由原先的 1500w 调整为 3000w
改进2:改进之前只有 Gas Price;改进之后有 Max Price、Priority Price、Base Price
改进3:Base Price 部分的 ETH 销毁,从而让 ETH 通缩
注意:EIP-1559 仍然能够处理传统方式设置的手续费,只不过做了如下转换:「Max Price = Gas Price」、「Priority Price = Gas Price」
Base 计算规则
Base 会根据上一区块的空间利用率自动调整,如果利用率超过 50%,则提升当前区块的 base,反之降低。
Base 初始值为 1000000000 即 1Gwei
按照 base 计算公式,相邻区块间的 base 变化幅度在 ±12.5% 之间:
- 如果上一区块空间利用率为 100%,则当前区块 baseFee 将自动提升 12.5%
- 如果上一区块空间利用率为 0%,则当前区块 baseFee 将自动降低 12.5%
简而言之,当区块使用率超过 50% 时,下一个区块的 base 会自动升高,最高比例为 12.5%,当区块使用率低于 50% 时,下一个区块的 base 会自动降低,最高比例为 12.5%。相对之前 Gas Price 完全由用户提供,经常大起大落,base 的变化显然是更加可预测也更加平缓的。每个区块的 base 是维护在区块头中的。发送交易的时候,用户不需要指定 base。
举例
1. 每个区块的 Gas Limit 固定为 3000w,即 **parent_gas_limit = 3000w**
2. 每个区块的 Gas Target 固定为 1500w,即 **parent_gas_target = 1500w**
3. 父区块的 Gas Usage,即 parent_gas_used,可以直接从区块链网络中获取到
# base 计算规则
if INITIAL_FORK_BLOCK_NUMBER == block.number:
expected_base_fee_per_gas = INITIAL_BASE_FEE
elif parent_gas_used == parent_gas_target:
expected_base_fee_per_gas = parent_base_fee_per_gas
elif parent_gas_used > parent_gas_target:
gas_used_delta = parent_gas_used - parent_gas_target
base_fee_per_gas_delta = max(parent_base_fee_per_gas * gas_used_delta // parent_gas_target // BASE_FEE_MAX_CHANGE_DENOMINATOR, 1)
expected_base_fee_per_gas = parent_base_fee_per_gas + base_fee_per_gas_delta
else:
gas_used_delta = parent_gas_target - parent_gas_used
base_fee_per_gas_delta = parent_base_fee_per_gas * gas_used_delta // parent_gas_target // BASE_FEE_MAX_CHANGE_DENOMINATOR
expected_base_fee_per_gas = parent_base_fee_per_gas - base_fee_per_gas_delta
assert expected_base_fee_per_gas == block.base_fee_per_gas, 'invalid block: base fee not correct'
# base 计算规则人话版
1. EIP1559 初始区块 basePerGas 为 1Gwei
2. 如果父块的 parent_gas_used = 1500w,则本块的 basePerGas 跟父块的 basePerGas 保持一致
3. 如果父块的 parent_gas_used > 1500w,见下图 (+ 操作)
4. 如果父块的 parent_gas_used < 1500w,见下图 (- 操作)

EIP-1559 的优势
-
以太坊链上交易的用户体验更好
EIP-1559 使得以太坊的手续费在协议级上明确(基础费用),从而减少了手续费和交易时间的许多不确定性
-
ETH 经济机制
基础费用的销毁可能会使 ETH 从通货膨胀资产转变为供应稳步减少的通货紧缩资产
-
提高了以太坊安全性
EIP-1559 有助于防止针对以太坊网络的垃圾交易攻击。在此之前,理论上,攻击者可以通过与矿工串通,试图以低于市场价格的手续费向以太坊发送垃圾交易。但是 EIP-1559 确保了这样的垃圾交易发送者永远无法以支付低于基础费用来发起攻击。因此,随着时间的推移,这种攻击甚至会变得更加昂贵,因为罪犯不断发送垃圾交易会不断提高基础费用。
名词解释
maxPerGas(Max) 用户设定的,每单位 Gas 的最高价格
maxPriorityPerGas(Max Priority) 用户设定的,每单位 Gas 的最高优先费价格
basePerGas(Base) 交易打包时,以太坊网络设定的每单位 Gas 的基础价格
gasPrice(Gas Price) 交易打包时,用户实际为每单位 Gas 支付的价格
gasLimit 用户设定的,该笔交易最大能消耗的 Gas 数量
gasUsage 该笔交易打包时,实际需要消耗的 Gas 数量
burnt(Burnt)该笔交易燃烧掉的 ETH 数量
transactionFee(Transaction Fee)该笔交易用户实际支出手续费的 ETH 数量
txnSavings(Txn Savings) 该笔交易「用户愿意付的最高费用」和「实际花费」的 ETH 数量差额
minerEarnings 该笔交易矿工可以拿到的 ETH 数量
GasFeeEstimated = maxPerGas * gasLimit 签名时显示的预估 Gas Fee
min(maxPerGas - basePerGas, maxPriorityPerGas) 矿工每单位 Gas 的收益
EIP-1559 中,各种 fee 的计算
情况0:basePerGas > maxPerGas
交易处于 pending 状态,直到 maxPerGas ≥ basePerGas
情况1:maxPerGas ≥ basePerGas + maxPriorityPerGas
burnt = basePerGas * gasUsage
gasPrice = basePerGas + maxPriorityPerGas
transactionFee = gasPrice * gasUsage
txnSavings = (maxPerGas - gasPrice ) * gasUsage
minerEarnings = maxPriorityPerGas * gasUsage
情况2:basePerGas < maxPerGas < basePerGas + maxPriorityPerGas
burnt = basePerGas * gasUsage
gasPrice = maxPerGas = basePerGas + (maxPerGas - basePerGas)
transactionFee = gasPrice * gasUsage
txnSavings = (maxPerGas - gasPrice ) * gasUsage = 0
minerEarnings = (maxPerGas - basePerGas) * gasUsage
题:自己在测试网构造或者直接从区块链浏览器上各找一笔【情况2】和【情况3】的交易,利用上面的公式,进行验证计算
参考链接
详解以太坊 EIP-1559 协议
以太坊伦敦升级 | EIP-1559 是什么
EIP-1559: Fee market change for ETH 1.0 chain
https://etherscan.io/blocks
以太坊EIP-1559总结
EIP-1559:以太坊费用市场的最大变革!
以太坊 Gas 费介绍和如何节省手续费
版权声明
本文仅代表作者观点,不代表区块链技术网立场。
本文系作者授权本站发表,未经许可,不得转载。
区块链技术网
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。