EIP-1559(以太坊改进提案 1559)是以太坊网络的一个重要升级提案,它在 2021.08.05 以太坊伦敦硬分叉升级被正式激活。
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 会根据上一区块的空间利用率自动调整,如果利用率超过 50%,则提升当前区块的 base,反之降低。
Base 初始值为 1000000000 即 1Gwei
按照 base 计算公式,相邻区块间的 base 变化幅度在 ±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 使得以太坊的手续费在协议级上明确(基础费用),从而减少了手续费和交易时间的许多不确定性
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 的收益
basePerGas > maxPerGas交易处于 pending 状态,直到 maxPerGas ≥ basePerGas
maxPerGas ≥ basePerGas + maxPriorityPerGasburnt = basePerGas * gasUsage
gasPrice = basePerGas + maxPriorityPerGas
transactionFee = gasPrice * gasUsage
txnSavings = (maxPerGas - gasPrice ) * gasUsage
minerEarnings = maxPriorityPerGas * gasUsage
basePerGas < maxPerGas < basePerGas + maxPriorityPerGasburnt = basePerGas * gasUsage
gasPrice = maxPerGas = basePerGas + (maxPerGas - basePerGas)
transactionFee = gasPrice * gasUsage
txnSavings = (maxPerGas - gasPrice ) * gasUsage = 0
minerEarnings = (maxPerGas - basePerGas) * gasUsage
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!