说明
说起以太坊,就绕不过以太坊链拥堵的问题,最后必然就涉及到了gas price的问题.说起gas price,那么EIP1559就必然会出现,EIP1559是一个非常重要的EIP,它改变了以太坊的gas price机制,从而解决以太坊链拥堵的问题.
以太坊的gas price是由矿工自己决定的,这就导致了矿工可以随意的设置gas price,导致gas price的波动非常大,这就导致了以太坊的链拥堵问题.所以以太坊的gas price需要一个机制来控制,这就是EIP-1559的由来.
EIP-1559之前
在没有EIP1559之前,矿工挖矿不仅会获得挖出新区块奖励,还会获得这个区块内所有的交易手续费。用户为一笔交易所指定的 gasPrice * gasUsed 会全部给矿工,作为额外的奖励。
所以,如果交易如果想首先上链,那么就需要设置一个很高的gas price,这样才能让矿工愿意打包这笔交易.但是这样就导致了gas price的波动非常大,这就导致了以太坊的链拥堵问题。
EIP-1559之后
EIP-1559的目标是将gas price的波动控制在一个合理的范围内,并且让gas price的波动不会影响到用户的交易.在具体介绍EIP-1559,就需要先了解与EIP-1559的Gas Price相关的几个概念。
Base Fee
在 EIP1559 之前,区块链上的 gas 费是由矿工,这整个群体来决定的,他们完全可以选择只打包 gasPrice 高昂的交易从而让用户不得不多出 gas 费。而在 EIP1559 之后,区块链上的 gas 费就完全由以太坊系统决定了,而这个由以太坊系统决定价格就是 Base fee。
决定以太坊系统上 Base Fee 的因素只有一个,就是上一个区块打包的 gas limit 是否使用超过了一半。如果超过了一半,就提升下一个区块的 Base Fee,最多提升 12.5%;如果没有超过一半,就减少下一个区块的 Base Fee,最多减少 12.5%。
可以看到,在 EIP1559 的规则之下,矿工失去了对 gas 费的定价权:如果他们只打包少量高 gas 的交易导致区块容量不满一半,以太坊系统就会减少 Base fee,降低用户的使用费用。
这个新机制是为了帮助平滑交易费用,防止Gas费用突然飙升。谈到基本费用,最重要的是要记住:它是100%自动的,可直接从网络上读取。
Max Priority Fee
翻译成为中文含义就是:最高优先费–通常也被称为矿工小费–是一种 “可选的”额外费用,直接支付给矿工,以激励他们将你的交易纳入区块。这表示对于如果你有一个很重要的重要的交易或者当网络高度拥堵时,想让矿工优先打包你的交易,就需要更高的最高优先费来优先处理你的交易。
最高优先费的一个微妙差别是,它代表了你愿意支付给矿工的最高小费。然而,如果基本费用加上最高优先费用超过了最高费用(见下文),最高优先费将被减少,以满足最高费用的上限。这意味着实际小费可能需要小于你的最高优先费,在这种情况下,你的交易对矿工的吸引力可能会降低。
Max Fee
中文意译表示最高费用,简单点说就是本次交易的最高预算。无论系统的Base Fee是多少,无论设置Max Priority Fee是多少,两者加起来的费用不能超过预算,即最高费用Max Fee。为啥需要这么个 Max Fee 呢?
我们知道为一笔交易最小要支付的费用是 Base Fee。但 Base Fee 也是会按照网络拥堵情况进行调整的,如果交易发出去之后,在被打包进区块之前,Base Fee 调高了,那么所发送的交易就处于”给价过低”的状态,这笔交易有可能会长期在网络中游荡没节点处理,甚至直接被节点丢弃掉。
为了避免这种不可预料的情况,我们需要设一个 Max Fee。把有可能 Base Fee 上调的可能性考虑进去,增加交易被打包成功的概率。实际的花费大概率是比 Max Fee 要低的。
按照官方的推荐设置方法是:Max Fee = (Base Fee *2) + Max proority Fee
通过这个公式,可确保您的交易在连续六个100%完整的区块内保持可被纳入。模拟计算的方式参考以太坊EIP-1559 Gas费用计算指南
计算方式
对于Base Fee,Max Priority Fee,Max Fee以一个比较生活化的例子来说明。Base Fee相当于是你去餐馆吃饭的费用,Max Priority是你愿意为服务员支付的最多的小费,Max Fee就是你口袋里面的钱。按照生活常识,我们吃饭的费用加上小费,必然是不会超过我所有的钱。即:
1 | Base Fee + Max Priority Fee <= Max Fee |
通过上面对三种类型的Fee的介绍以及举例,我们很容易得到矿工得到的费用的计算方式:
1 | Min( Max fee - Base fee, Max priority fee) |
列举说明:已知下一个区块的 Base fee 为 30。对手交易费用设置是,Max fee 为 32,Max priority fee 为 2。我们的交易费用设置是,Max fee 为 35 , Max priority fee 为 1。对手的矿工实际获得的费用是:min(32-30,2)=2。我们的矿工实际获得的费用是:min(35-30,1)=1。很明显,矿工会首先打包对手的交易。
所以,如果想优先让交易上链,对于Max fee 和Max priority fee也是需要技巧的。
Gas解析
前面介绍了EIP1559的相关概念和设置技巧,下面以Etherscan交易中的具体数值来进行说明。
首先是如何区分一笔比较是否是采用了EIP-1559呢?通过etherscan中的Txn Type确定。
可以看到两者在Gas Fees上的显示明显不同。使用了EIP-1559的页面上会显示Base Fee,Max,Max Priority。
下面以0x292b2d0500f924b6ed465bb73124b75f9bddf3366836545308e841828533eb50来详细说明各项数值的含义。
Base: 4.202027656 Gwei,当前交易时系统的Base Fee是4.202027656 GweiMax: 108 Gwei,用户为这笔交易设置的最大的交易费是108 GweiMax Priority: 2.2 Gwei,用户愿意为这笔交易支付的最高优先费是2.2 GweiGas Limit & Usage by Txn: 140,537 | 100,413 (71.45%),用户为这笔交易限制的最大的Gas是140,537,实际交易使用到的Gas是100,413。Usage By Txn一般也称为Gas Usage by TxnGas Price: 0.000000006402027656 Ether (6.402027656 Gwei),这个和 EIP-1559 之前的 Gas Price 含义相同,是用户为每一个单位的 Gas 所付出的费用。也称 Gas 价格。与 EIP-1559 之前不同的是,之前的 Gas Price 都是用户指定的,这里的 Gas Price 是按公式计算出来的:Gas Price = Base Fee + Max Priority Fee。即4.202027656 + 2.2 = 6.402027656Transaction Fee: 0.000642846803021928 Ether ($0.86),用户这笔交易实际的花费。计算公式是Transaction Fee = Usage by Txn * Gas Price。即100413 * 0.000000006402027656 = 0.000642846803021928,和实际一致。Burnt: 0**.**000421938203021928 Ether ($0.56),表示本次交易消耗掉ETH的数量。计算公式是Burnt = Base Fee * Gas Usage by Txn。即4.202027656 * 100413 / 10**9 = 0.000421938203021928Txn Savings: 0.010201757196978072 Ether ($13.60),表示愿意付的最高费用和实际花费的差额。计算公式是Tx Savings Fees = Max Fee * Gas Usage by Txn - (Base Fee + Max Priority Fee) * Gas Usage by Txn。即108 * 100413 / 10**9 - (4.202027656 + 2.2) * 100413 / 10**9 = 0.010201757196978073- others
Txn Type: 2 (EIP-1559),表示本次交易采用的是EIP-1559方式Nonce: 908,表示本次交易是对应账户的Nonce是908Position: 40,表示本次交易在整个区块中是排40位
总结
了解了EIP1559的设定,可以在我们进行交易时作为一个很好的参考,帮助我们更省GAS更快交易上链。通过对etherscan上的费用的详细说明,也对各种含义有了更加深刻的认识。