以太坊新的 gas 费计算
今天有同学问我 etherscan 里先生的 "Txn Savings Fees" 是啥,我就顺便把以太坊新的 gas 费计算方式讲一下吧。
下图是我从 etherscan 截取的一笔交易里与 gas 费有关的部分。
这上面的每个字段都代表啥意思呢?
Transaction Fee: 这是最终实际用户所付出的 Gas 费。在这笔交易里也就是价值差不多 0.3 美金的 ETH。在 EIP-1559 之前,这笔费用是全部分给矿工的。在 EIP-1559 之后,这笔费用分成了两部分,一部分还是给矿工,但更大的一部分是直接销毁掉的。在这笔交易里,有大概价值 0.25 美金的 ETH 是被直接销毁的,有 0.3 - 0.25 = 0.05 美金的 ETH 是分配给矿工的。
Gas Price: 这个和 EIP-1559 之前的 Gas Price 含义相同,是用户为每一个单位的 Gas 所付出的费用。也称 Gas 价格。
与 EIP-1559 之前不同的是,之前的 Gas Price 都是用户指定的,这里的 Gas Price 是按公式计算出来的:Gas Price = Base Fee + Max Priority Fee
Gas Limit: 这个一直没啥变化,是用户允许这笔交易最大可消耗的 Gas 数量。
Usage by Txn: 这笔交易实际所消耗的 Gas 量,如果像这里演示的这笔交易一样是笔普通的 ETH 转账交易,这个值为固定值 21000。其它交易的值都是大于 21000 的某个值。值得注意的是,这个值是小于等于 Gas Limit 的。
Gas Fees: 这个叫法很容易让人和 Transaction Fee 产生混淆,更准确的说这是每个单位 Gas 的费用。这部分费用由三部分构成:Base Fee,Max Fee 和 Max Priority Fee。
- Base Fee:
Base Fee 是由以太坊网络而不是用户或矿工确定的值。它根据最近确认区块的使用率来自动升高或降低。所谓区块使用率,是指打包到区块中所有交易所消耗的 Gas 量占整个区块 Block Gas Limit 的比例。
如果上一个区块使用率正好是 50%,Base Fee 保持不变。
如果上一个区块使用率正好满载 100%,Base Fee 会提高 12.5%。
如果上一个区块使用率超过 50% 但小于 100%,Base Fee 会提高不到 12.5% 的某个值。
如果上一个区块使用率是 0%,也就是空块,Base Fee 会降低 12.5%
如果上一个区块不是空块且使用率没超过 50%,Base Fee 会降低不到 12.5%
简而言之,当区块使用率超过 50% 时,下一个区块的 Base Fee 会自动升高,最高比例为 12.5%,当区块使用率低于 50% 时,下一个区块的 Base Fee 会自动降低,最高比例为 12.5%。
相对之前 Gas Price 完全由用户提供,经常大起大落,Base Fee 的变化显然是更加可预测也更加平缓的。
每个区块的 Base Fee 是维护在区块头中的。
发送交易的时候,用户不需要指定 Base Fee。
-
Max Priority Fee:
Max Priority Fee 又被称为矿工小费 Miner Tip。是为了让自己交易被优先打包额外付给矿工的费用。
这个费用不是必须要付的。一般来说付个 1 ~ 2 GWEI 意思意思就好了。当然要享受 VIP 待遇可以付更多。 -
Max Fee:
Max Fee 是为每单位 Gas 所愿意付出的最高费用。这个是在发送交易时需要用户指定的。为啥需要这么个 Max Fee 呢?
我们知道为一笔交易最小要支付的费用是 Base Fee。但 Base Fee 也是会按照网络拥堵情况进行调整的,如果交易发出去之后,在被打包进区块之前,Base Fee 调高了,那么所发送的交易就处于"给价过低"的状态,这笔交易有可能会长期在网络中游荡没节点处理,甚至直接被节点丢弃掉。
为了避免这种不可预料的情况,我们需要设一个 Max Fee。把有可能 Base Fee 上调的可能性考虑进去,增加交易被打包成功的概率。实际的花费大概率是比 Max Fee 要低的。
如何设置 Max Fee 比较好呢?这里有个公式:
Max Fee = (2 * Base Fee) + Max Priority Fee
Burnt: 这个是销毁掉的 ETH 数量
Burnt = Base Fee * Gas Usage by Txn
Tx Savings Fees: 这个是愿意付的最高费用和实际花费的差额
Tx Savings Fees = Max Fee * Gas Usage by Txn - (Base Fee + Max Priority Fee) * Gas Usage by Txn