EIP-1559提案后以太坊Gas费计算
在以太坊中,交易所需的 gas 费计算方式是:
TransactionFee = GasPrice × GasLimit
其中 Gas Limit 代表你愿意为这笔交易支付的最大 gas 量,这通常取决于交易的复杂程度。Gas Price 指的是 Gas 的价格,即你愿意为每个单位的 gas 所支付的 ETH 数量。
目前以太坊费用机制使用的是首价拍卖模式。用户需要向以太坊网络提交出价(他们愿意支付的 Gas Price)。每当生成一个新的区块时,矿工将把 Transaction Fee 最高的那些交易打包进区块里。每一笔交易都会按照它的出价来支付 gas 费。
我们通常说的“支付更多的 Gas 费” 意思是增加某笔交易的 Gas Price 以获得被打包的优先权。例如在 Metamask 中,有 “慢”、“平均” 和 “快” 这 3 个 Gas Price 选项供用户选择,用户通过这个选项支付更高的 Gas Price 来加快自己的交易被打包。
问题在于,用户与钱包都无法准确估计他们应该支付的 gas 费,事实上用户总在支付高于他们本应支付的价格,来确保交易的顺利进行。我们可以从下图中看出,ETH 交易费的平均值一直高于它的中位数,并且当网络拥堵的时候差值尤其的大。
EIP-1559会改变什么?
EIP-1559 可以称作是以太坊历史上最令人期待的提案之一。它对以太坊网络的交易费机制进行了很大改造,主要可以概括为:
引入弹性区块大小的机制,每个区块的最大 Gas Limit 被提升至原来的 2 倍,矿工可以在网络拥堵的时候弹性地改变区块的大小。
原本单一的交易费被更改为固定费用 (Base Fee)加上小费(Inclusion Fee)的模式,固定费用是必须支付的部分,并且会根据上一个区块的 Gas 使用情况进行动态调整。且每个区块的固定费用部分都会被烧毁,不会给到矿工。
弹性区块大小允许矿工动态扩张或缩小区块大小来处理暂时性的网络拥堵。有了 EIP-1559 之后,每区块的目标 Gas 限值还是 15M, 但是最大 Gas 限值会从 15M 调整到 30M(差不多2倍)。如果区块中使用的 gas 量比目标 gas 限值少,那么代表网络是不拥堵的,下一个区块的固定费用会降低。如果如果区块中使用的 gas 量比目标 gas 限值多,那么代表网络是拥堵的,下一个区块的固定费用会升高。我们会在下文仔细讲解这种机制。总的来说,交易量的波动原先会转化为交易费的波动,而如今转化为区块大小的波动。
EIP-1559 引入一种新的交易费用机制,来解决首价拍卖模型中的问题。每区块固定费用是“基础费用(Base Fee)”,给矿工的额外的激励是“小费(Inclusion Fee)”。所以交易费变为:
TransactionFee = BaseFee + InclusionFee
进一步分解:
TransactionFee = BaseGasPrice ×GasLimit + InclusionFee
Base Gas Price 代表每个区块的 Base Fee 里的 Gas 的单价,每个区块的 Base Gas Price 是固定的,而且价格高低由前一个区块的拥挤程度来决定,
BaseGasPrice = PreviousBaseGasPrice × (1 + k ×CongestionLevel)
其中 Congestion Level 代表区块的拥挤程度,Previous Base Gas Price 代表上一个区块的 Base Gas Price。k是调整速度系数,0 < k < 2。而根据 EIP-1559 的初始设定,k=1/8。拥挤程度会根据每区块中使用的 gas 量是否大于目标 gas 限值来决定。
CongestionLevel = (PreviousBlockGas / UsedTargetGasUsed – 1)
总结来说,我们可以看到,
0.875×PreviousBaseGasPrice ≤ BaseGasPrice ≤ 1.125×PreviousBaseGasPrice
假设 gas 限值相同的情况下,
0.875 ×PreviousBaseFee ≤ BaseFee ≤ 1.125 ×PreviousBaseFee
当网络拥堵时,每过一个区块后 Base Fee最多会增加 12.5%,Base Fee 不断增加直到用户因为交易不再盈利而减少交易,所以这种机制可以缓解拥堵的网络;当网络不拥堵的时候,每过一个区块后 Base Fee 最多会减少12.5%,Base Fee 的下降激励用户增加交易。
小费是用户付给矿工加速交易用的。小费是可选项,可以设置成零。矿工仍然用首价拍卖模式来优先选择有更多小费的交易来打包进下一个区块。