一 Gas相关概念
1.1 Gas
以太坊中,执行交易和运行智能合约所需要的计算资源的度量单位。
智能合约中,EVM对每一个操作都有明确的Gas成本。
1.2 Gas price
Gas Price指的是用户愿意为每单位Gas支付的价格,这个价格用以太币最小单位Wei来表示
1.3 Gas Used
指的是在执行交易后或者执行智能合约后,实际消耗的Gas量。每个操作在以太坊虚拟机EVM中都有明确的Gas成本,而Gas Used就是所有这些操作成本的总和
1.4 Gas Limit
是指用户在发起交易时设定的消耗Gas的上限。这个值是用户预先定义的,表明他们愿意为执行这个交易或智能合约支付的最大Gas数量。它有两个主要目的:
确保控制成本:通过设定Gas Limit,用户可以控制他们最多愿意为执行交易支付多少费用。
防止程序错误:如果智能合约中存在编程错误,如无限循环,设定的Gas Limit将防止合约无休止地运行,从而耗尽所有的Ether。
1.5 Gas Fee
通过消耗的Gas和Gas Price等计算出需要支付的Gas 费用总额。在EIP-1559之前,计算公式如下:
Gas Fee = Gas Used(必须小于Gas Limit, 否则交易无法执行) * Gas Price(以太币计价gwei)
二 提出EIP-1559的背景
2.1 Gas费不可预测性
在原有的以太坊费用模型中,交易费用高低严重依赖于供需关系。当网络拥堵时,用户必须通过提高Gas价格来竞争有限的区块空间,这导致费用波动极大。这种模型下,费用的不可预测性给用户带来了显著的使用障碍
2.2交易费用过高
用户为了确保他们的交易快速被打包确认,往往通过支付较高的Gas费,这样矿工才会选择对自己有利的区块打包
2.3 矿工操纵交易选择
在以太坊的原始机制中,矿工可以选择哪些交易被纳入下一个区块,因此他们倾向于选择高Gas费的交易。这可能导致矿工优先处理高费用交易,而忽略了其他可能具有重要性但Gas费较低的交易
三 EIP-1559标准内容
3.1 EIP-1559核心内容
3.1.1 Gas Fee的计算
Gas Fee = (baseFee(基础费用) + priorityFee (矿工小费)) * Gas Used
3.1.2 基础费率(baseFee)
第一: 基础费率可以视为用户在每个区块中需要支付的每单位Gas的最小价格
第二: 基础费用不是用户在交易中指定的
第三: 基础费用也不是固定不变的,它是以太坊客户端在矿工对区块打包之前,根据前一个区块的容量占用率计算当前区块的基础费率
第四: EIP-1559之前的Gas费是全部给矿工的,EIP-1559之后,基础费率*消耗的gas, 这部分并不会给矿工,而是最终会被燃烧掉,保证ETH通货紧缩,减少供给,从而稳定以太币的币价
3.1.3 priorityFee & maxPriorityFee
第一: priorityFee这是用户愿意支付给矿工的额外费用的费率,以优先处理他们的交易。这部分费用是用户设定的,表示用户愿意为每单位Gas支付给矿工的额外费用,以增加交易被早期包括在区块中的可能性。它是动态的,用户可以根据自己对交易速度的需求设定不同的优先费用
第二: priorityFee用户指定,可以是0,表示不支付矿工小费
第三: maxPriorityFee表示这是用户设定的在极端网络拥堵情况下愿意支付给矿工的最大额外费用。这意味着无论网络条件如何变化,用户交易中用于激励矿工的费用不会超过这个值。当网络不那么拥堵,基础费用较低时,实际支付给矿工的优先费可能会低于最大优先费,但不会超过。
第三: EIP-1559之前的Gas费是全部给矿工的,但是1559之后,只有矿工小费部分(maxPriorityFee * gas used)才会给到矿工
3.1.4 用户愿意支付最大费率(maxFee)
第一: 它表示用于愿意为这笔交易支付的最大Gas费率是多少
第二: 如果maxFee > (baseFee + maxPriorityFee), 在交易打包后,多余的Gas费会退还给用户
第三: 如果maxFee < (baseFee + maxPriorityFee), 意味着可以等到其交易在稍后的区块中被打包,当然也可能在当前被打包,取决于俄矿工自己是否愿意了
第四: 对于矿工而言,交易设置多少的 maxFee其实并不重要,因为矿工并不能因此而得到直接的好处。关键的是,他能从这笔交易里拿到多少:Min(maxFee- baseFee, maxPriorityFee)
四 基础费率
4.1 基础费率
我们上面说过,基础费率可以视为用户在每个区块中需要支付的每单位Gas的最小价格,但是它并不是由用户指定的。而是由当前以太坊客户端在矿工打包之前根据前一个区块计算出来的。
基础费率并不是给矿工的,最终被burn掉了,确保ETH处于一种通缩状态,保持比价稳定或者上涨
4.2 区块拥挤程度
第一: EIP-1559将每一个区块的容量从12.5M提升到了25M
第二: 当区块的交易数量 / 区块的容量 = 区块容量占用率
第三: 如果区块容量占用率超过50%则提升下一个区块的baseFee基础费率;如果区块容量占用率低于50%则降低下一个区块的baseFee基础费率
第四: 每次baseFee上下限调整不超过12.5%。假设之前区块的baseFee是previousBaseFee,我们可以看到,当前区块baseFee的范围:0.875*previousBaseFee <= baseFee <= 1.125× previousBaseFee