今天有同學(xué)問我 etherscan 里先生的 "Txn Savings Fees" 是啥迟螺,我就順便把以太坊新的 gas 費(fèi)計算方式講一下吧住拭。
下圖是我從 etherscan 截取的一筆交易里與 gas 費(fèi)有關(guān)的部分根时。
這上面的每個字段都代表啥意思呢甫匹?
Transaction Fee: 這是最終實際用戶所付出的 Gas 費(fèi)称近。在這筆交易里也就是價值差不多 0.3 美金的 ETH纯赎。在 EIP-1559 之前块攒,這筆費(fèi)用是全部分給礦工的励稳。在 EIP-1559 之后,這筆費(fèi)用分成了兩部分囱井,一部分還是給礦工驹尼,但更大的一部分是直接銷毀掉的。在這筆交易里庞呕,有大概價值 0.25 美金的 ETH 是被直接銷毀的新翎,有 0.3 - 0.25 = 0.05 美金的 ETH 是分配給礦工的程帕。
Gas Price: 這個和 EIP-1559 之前的 Gas Price 含義相同,是用戶為每一個單位的 Gas 所付出的費(fèi)用地啰。也稱 Gas 價格愁拭。
與 EIP-1559 之前不同的是,之前的 Gas Price 都是用戶指定的亏吝,這里的 Gas Price 是按公式計算出來的:Gas Price = Base Fee + Max Priority Fee
Gas Limit: 這個一直沒啥變化岭埠,是用戶允許這筆交易最大可消耗的 Gas 數(shù)量。
Usage by Txn: 這筆交易實際所消耗的 Gas 量蔚鸥,如果像這里演示的這筆交易一樣是筆普通的 ETH 轉(zhuǎn)賬交易惜论,這個值為固定值 21000。其它交易的值都是大于 21000 的某個值止喷。值得注意的是馆类,這個值是小于等于 Gas Limit 的。
Gas Fees: 這個叫法很容易讓人和 Transaction Fee 產(chǎn)生混淆弹谁,更準(zhǔn)確的說這是每個單位 Gas 的費(fèi)用乾巧。這部分費(fèi)用由三部分構(gòu)成:Base Fee,Max Fee 和 Max Priority Fee僵闯。
- Base Fee:
Base Fee 是由以太坊網(wǎng)絡(luò)而不是用戶或礦工確定的值卧抗。它根據(jù)最近確認(rèn)區(qū)塊的使用率來自動升高或降低。所謂區(qū)塊使用率鳖粟,是指打包到區(qū)塊中所有交易所消耗的 Gas 量占整個區(qū)塊 Block Gas Limit 的比例社裆。
如果上一個區(qū)塊使用率正好是 50%,Base Fee 保持不變向图。
如果上一個區(qū)塊使用率正好滿載 100%泳秀,Base Fee 會提高 12.5%。
如果上一個區(qū)塊使用率超過 50% 但小于 100%榄攀,Base Fee 會提高不到 12.5% 的某個值嗜傅。
如果上一個區(qū)塊使用率是 0%,也就是空塊檩赢,Base Fee 會降低 12.5%
如果上一個區(qū)塊不是空塊且使用率沒超過 50%吕嘀,Base Fee 會降低不到 12.5%
簡而言之,當(dāng)區(qū)塊使用率超過 50% 時贞瞒,下一個區(qū)塊的 Base Fee 會自動升高偶房,最高比例為 12.5%,當(dāng)區(qū)塊使用率低于 50% 時军浆,下一個區(qū)塊的 Base Fee 會自動降低棕洋,最高比例為 12.5%。
相對之前 Gas Price 完全由用戶提供乒融,經(jīng)常大起大落掰盘,Base Fee 的變化顯然是更加可預(yù)測也更加平緩的摄悯。
每個區(qū)塊的 Base Fee 是維護(hù)在區(qū)塊頭中的。
發(fā)送交易的時候愧捕,用戶不需要指定 Base Fee奢驯。
Max Priority Fee:
Max Priority Fee 又被稱為礦工小費(fèi) Miner Tip。是為了讓自己交易被優(yōu)先打包額外付給礦工的費(fèi)用晃财。
這個費(fèi)用不是必須要付的叨橱。一般來說付個 1 ~ 2 GWEI 意思意思就好了。當(dāng)然要享受 VIP 待遇可以付更多断盛。Max Fee:
Max Fee 是為每單位 Gas 所愿意付出的最高費(fèi)用。這個是在發(fā)送交易時需要用戶指定的愉舔。為啥需要這么個 Max Fee 呢钢猛?
我們知道為一筆交易最小要支付的費(fèi)用是 Base Fee。但 Base Fee 也是會按照網(wǎng)絡(luò)擁堵情況進(jìn)行調(diào)整的轩缤,如果交易發(fā)出去之后命迈,在被打包進(jìn)區(qū)塊之前,Base Fee 調(diào)高了火的,那么所發(fā)送的交易就處于"給價過低"的狀態(tài)壶愤,這筆交易有可能會長期在網(wǎng)絡(luò)中游蕩沒節(jié)點(diǎn)處理,甚至直接被節(jié)點(diǎn)丟棄掉馏鹤。
為了避免這種不可預(yù)料的情況征椒,我們需要設(shè)一個 Max Fee。把有可能 Base Fee 上調(diào)的可能性考慮進(jìn)去湃累,增加交易被打包成功的概率勃救。實際的花費(fèi)大概率是比 Max Fee 要低的。
如何設(shè)置 Max Fee 比較好呢治力?這里有個公式:
Max Fee = (2 * Base Fee) + Max Priority Fee
Burnt: 這個是銷毀掉的 ETH 數(shù)量
Burnt = Base Fee * Gas Usage by Txn
Tx Savings Fees: 這個是愿意付的最高費(fèi)用和實際花費(fèi)的差額
Tx Savings Fees = Max Fee * Gas Usage by Txn - (Base Fee + Max Priority Fee) * Gas Usage by Txn