EIP-1559升级提案中是如何确定BASEFEE的

EIP-1559 是以太坊的一项重要的费用市场改革提案,旨在改进交易费用的确定机制,并引入一种新的费用结构。在 EIP-1559 中,BASEFEE 是一个核心概念,它是动态调整的交易基础费用,用于调节网络拥堵情况。以下是 BASEFEE 的确定机制:


1. BASEFEE 的作用

  • BASEFEE 是每笔交易必须支付的基础费用,用于调节网络拥堵。
  • 它会被销毁(burned),而不是支付给矿工,从而减少以太坊的流通量。
  • 它的动态调整机制旨在使区块的利用率(gas used)趋近于目标值(target gas used)。

2. BASEFEE 的计算

BASEFEE 是根据前一个区块的 gas 使用情况动态调整的。具体计算规则如下:

(1)目标 Gas 使用量(Target Gas Used)

  • 每个区块有一个目标 gas 使用量,通常设置为当前区块 gas 上限(gas limit)的 50%,即 target_gas_used = gas_limit / 2

(2)调整公式

BASEFEE 的调整基于前一个区块的 gas 使用量(parent_gas_used)与目标 gas 使用量(target_gas_used)的差异。公式如下:
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"> basefee current = basefee parent × ( 1 + parent_gas_used − target_gas_used target_gas_used × 1 basefee_max_change_denominator ) \text{basefee}{\text{current}} = \text{basefee}{\text{parent}} \times \left(1 + \frac{\text{parent\_gas\_used} - \text{target\_gas\_used}}{\text{target\_gas\_used}} \times \frac{1}{\text{basefee\_max\_change\_denominator}}\right) </math>basefeecurrent=basefeeparent×(1+target_gas_usedparent_gas_used−target_gas_used×basefee_max_change_denominator1)

  • parent_gas_used:前一个区块实际使用的 gas 量。
  • target_gas_used:目标 gas 使用量(通常为 gas limit 的 50%)。
  • basefee_max_change_denominator:一个常数,用于限制 BASEFEE 的最大调整幅度(通常为 8)。

(3)调整方向

  • 如果前一个区块的 gas 使用量 高于 目标值(parent_gas_used > target_gas_used),BASEFEE 会 增加,以减少网络拥堵。
  • 如果前一个区块的 gas 使用量 低于 目标值(parent_gas_used < target_gas_used),BASEFEE 会 减少,以鼓励更多交易。

(4)调整幅度限制

  • BASEFEE 的调整幅度受到限制,每次调整的最大幅度为当前 BASEFEE 的 12.5%(即 1/8),这是通过 basefee_max_change_denominator 实现的。

3. BASEFEE 的动态调整示例

假设:

  • 当前 BASEFEE 为 100 Gwei。
  • 目标 gas 使用量为 15,000,000 gas。
  • 前一个区块的实际 gas 使用量为 18,000,000 gas(高于目标值)。
  • basefee_max_change_denominator 为 8。

根据公式:
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"> basefee current = 100 × ( 1 + 18 , 000 , 000 − 15 , 000 , 000 15 , 000 , 000 × 1 8 ) \text{basefee}_{\text{current}} = 100 \times \left(1 + \frac{18,000,000 - 15,000,000}{15,000,000} \times \frac{1}{8}\right) </math>basefeecurrent=100×(1+15,000,00018,000,000−15,000,000×81)

计算:
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"> basefee current = 100 × ( 1 + 3 , 000 , 000 15 , 000 , 000 × 1 8 ) = 100 × ( 1 + 0.2 × 0.125 ) = 100 × 1.025 = 102.5 Gwei \text{basefee}_{\text{current}} = 100 \times \left(1 + \frac{3,000,000}{15,000,000} \times \frac{1}{8}\right) = 100 \times \left(1 + 0.2 \times 0.125\right) = 100 \times 1.025 = 102.5 \text{ Gwei} </math>basefeecurrent=100×(1+15,000,0003,000,000×81)=100×(1+0.2×0.125)=100×1.025=102.5 Gwei

因此,BASEFEE 会从 100 Gwei 增加到 102.5 Gwei。


4. BASEFEE 的特点

  • 动态调整:BASEFEE 会根据网络拥堵情况自动调整,无需用户手动设置。
  • 销毁机制:BASEFEE 会被销毁,而不是支付给矿工,这有助于减少以太坊的流通量。
  • 交易费用结构:用户支付的交易费用由 BASEFEE 和优先费(Priority Fee,即矿工小费)组成。

5. 总结

EIP-1559 通过引入 BASEFEE 机制,使交易费用更加可预测和稳定。BASEFEE 的动态调整基于前一个区块的 gas 使用情况,目标是使区块的 gas 使用量趋近于目标值,从而有效管理网络拥堵。

相关推荐
天涯学馆2 天前
Solidity自毁合约:让你的区块链代码优雅谢幕
智能合约·solidity·以太坊
闲人编程3 天前
Python与区块链:如何用Web3.py与以太坊交互
python·安全·区块链·web3.py·以太坊·codecapsule
友莘居士3 天前
八步开启以太坊智能合约开发:环境、编写、测试与部署
智能合约·以太坊
野老杂谈4 天前
【Solidity 从入门到精通】前言
web3·智能合约·solidity·以太坊·dapp
许强0xq5 天前
Solidity 的十年与重生:从 Classic 到 Core
web3·区块链·智能合约·solidity·以太坊
小攻城狮长成ing6 天前
从0开始学区块链第12天—如何使用可见性标识符
web3·区块链·智能合约·solidity·以太坊
野老杂谈9 天前
如何快速学习智能合约开发语言 Solidity
开发语言·学习·智能合约·solidity·以太坊·区块链开发
大桔骑士v12 天前
【区块链学习笔记】17:以太坊中的GHOST协议
区块链·以太坊·比特币·ghost
kida_yuan17 天前
【以太来袭】2. 节点设计与部署
后端·区块链·以太坊