一文读懂 EIP-1559 协议

  • martin
  • 发布于 1天前
  • 阅读 94

EIP-1559(以太坊改进提案 1559)是以太坊网络的一个重要升级提案,它在 2021.08.05 以太坊伦敦硬分叉升级被正式激活。

什么是 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,见下图 (- 操作)

image.png

EIP-1559 的优势

  1. 以太坊链上交易的用户体验更好

    EIP-1559 使得以太坊的手续费在协议级上明确(基础费用),从而减少了手续费和交易时间的许多不确定性

  2. ETH 经济机制

    基础费用的销毁可能会使 ETH 从通货膨胀资产转变为供应稳步减少的通货紧缩资产

  3. 提高了以太坊安全性

    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 状态,直到 maxPerGasbasePerGas

情况1:maxPerGasbasePerGas + 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 费介绍和如何节省手续费

点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
martin
martin
xxx