從五個方面探究ETH的交易成本組成
W3.Hitchhiker
2022-07-26 12:00
本文约11761字,阅读全文需要约47分钟
在以太坊中,鏈上最寶貴的資源是gas,那麼ETH 交易成本由哪些組成呢?

原文作者:Xiang

原文作者:Xiang

原文修訂:Evelyn

眾所周知,以太坊有自己的虛擬機。

什麼意思呢?

就是比特幣中的交易長這樣:

“如果小明的簽名驗證通過,小明轉10 元錢給小紅的地址。”

而以太坊中的交易可能長這樣:

“當小明的簽名驗證通過並且滿足blablablabla 條件時,將小明賬戶中的10 元錢轉到小紅的賬戶上。”

這其中的blablablabla 條件,實際上可以是任何邏輯或者任何程序,其中可以有條件判斷,可以有循環,這些以太坊都支持。但問題就來了—— 要是有個不善良的礦工打包了個死循環放在區塊裡,豈不是能讓所有的以太坊節點都死機?

為了防止這種事情發生,以太坊中設置了每個區塊的Gas 上限以及每個計算步驟所需要消耗的Gas 量。

我們可以簡單粗暴地把Gas 理解成汽油。比如,一個條件判斷需要10 gas,一個簽名驗證需要100 gas,一個狀態讀寫需要10 gas 等等……然後,每筆交易都需要註明這筆交易需要使用的Gas(當然,還需要付錢) 。比如說,在某筆交易之後,你註明“跑1000 個gas 的”,於是,以太坊的節點會執行這筆交易,但是當計算需要消耗的gas 超過1000 了,不管交易的步驟執行沒執行完都會停下來。

於是,死循環不會出現,比如你寫了個死循環,但是每次循環會燒10 gas,而區塊的gas 上限是10000,你於是最多給這個程序買10000 的gas,那麼所有節點會執行1000 次循環,直到把你給的gas 燒完就停下來,而不會無限循環下去。

而這個時候就引出了另一個以太坊和比特幣不同的區別:

一級標題

一級標題

一級標題

ETH 的TPS

  1. ETH 的gas 機制

  2. ETH 的交易成本

  3. ETH 的交易成本

  4. 一級標題

  5. 一級標題

一級標題

1、ETH 的gas 機制

  • 我們知道比特幣區塊鏈中消耗的礦工費用是BTC,為了激勵以太坊網絡中的計算,於是在以太坊中產生了gas 的概念,在以太坊區塊鏈上執行寫入操作都需要支付gas費用,以太坊定義了貨幣是1 ETH,且1 ETH = 1e18 Wei。 Wei 是其中的最小額,在整個工作中,發送代幣、調用合約都要支付gas,且以Wei 作為單位來計算。

    Wei的由來

戴維(Wei Dai)是一位華裔計算機工程師,對密碼學和加密貨幣的貢獻而聞名,他開發了Crypto++ 密碼庫,創建了B-Money 加密貨幣系統,並共同提出了VMAC 消息認證碼算法。 2013 年,Vitalik Buterin 的以太坊(Ethereum)最小單位Wei,便以他的名字命名。比特幣白皮書的排名第一的參考資源也是戴維的B-money,中本聰在建立比特幣初期也多次想與戴維聯繫。

目前ETH消耗gas 的單位是Gwei,對應1 Gwei=1e9 Wei

簡單說,gas price 就是汽油單價,gas limit 相當於發動一次汽車需要的最大汽油量。

Gas Price再具體點的表達是:

Gas Limit是以太坊內計算消耗1 個gas 對應多少Gwei 的標準量,單位是Gwei。

是消耗gas 的上限單位。在完成每筆交易中最多使用多少個gas(交易的gas limit)。區塊的Gas Limit

是能夠將一定量的交易“裝在” 該區塊中的交易所用總Gas 數的上限。當節點在選擇要打包的交易時,節點必須確保加入這筆交易後,區塊裡的交易所用總Gas 數不會超過區塊Gas 上限。對於要被打包的交易來說,其Gas Limit 加上其他交易的Gas Limit 總和,必須小於等於區塊Gas Limit。當然,如果有一筆交易不能被打包進入當前區塊,它還是有機會被後面的區塊打包的。區塊的Gas Limit 大小是動態調整的,倫敦升級為以太坊引入了可變大小的區塊Gas limit。每個區塊的目標大小為1500 0000 gas,但區塊大小會根據網絡需求增加或減少,直至區塊限制為3000 0000個gas(目標區塊大小的2 倍)。

  1. 區塊gas limit 為什麼要改變

  2. 讓區塊大小可以根據網絡交易多寡,自由調整區塊大小。在網絡交易量大時,可自動實現擴容。

防止惡意用戶的惡意for 循環攻擊使網絡癱瘓。

一級標題

一級標題

2、ETH的交易成本

圖片描述

圖片描述

圖片描述https://ethereum.github.io/yellowpaper/paper.pdf

截圖來自:

使用ETH需要付費,以及gas 的概念。總的來說,每一筆交易都有與之關聯的gas ——發送一筆交易的成本包含兩部分:固有成本和執行成本。

執行成本根據該交易需要使用多少ETH虛擬機(EVM)的資源來運算而定,執行一筆交易所需的操作越多,則它的執行成本就越高。

  • 固有成本由交易的負載( payload )決定,交易負載分為以下三種負載:

  • 二級標題

  • 二級標題

固有成本gas

固有成本gas

假設Nzeros 代表交易負載中,字節為0 的字節總數;Nnonzeros 代表交易負載中,字節不為0 的字節總數。可以通過下列公式計算出該交易的固有成本,參考黃皮書6.2章節:

固有成本= Gtxdatazero × Nzeros + Gtxdatanonzero × Nnonzeros + Gtxcreate + Gtransaction + Gasscesslist成本

  • Gtransaction = 21,000 Wei

  • Gtxcreate = 32,000 Wei

  • Gtxdatazero = 4 Wei

  • 在黃皮書的附錄G 中,可以看到一份創建和執行交易的相關成本的費用表。其中與固有成本相關的內容如下:

  • Gasscesslistaddress = 2400 Wei

  • Gasscessliststorage = 1900 Wei

Gtxdatanonzero = 16 Wei (在伊斯坦布爾升級前為68 wei)

圖片描述

圖片描述

圖片描述

交易的固有成本必須小於該交易設置的gas 上限

我們知道了固有成本後,就能理解為什麼一旦交易的固有成本高於Gas 限制,則該交易就會被視為非法。 Gas Limit 規定了一筆交易在執行時,能夠消耗掉的Gas 上限;如果在還沒開始執行該交易前,我們就知道它的固有成本是高於Gas 上限的,那我們就沒有理由執行這筆交易。 (這是因為在交易之前就會報錯)

而其他代幣的轉賬就會比ETH 的21000 gas limit 高很多,這是因為其他代幣是通過智能合約執行交易,比普通的轉賬需要更複雜的計算和寫入。

Gas Limit 範圍雖然可以調整,但是如果填寫太少,可能會導致交易失敗,就好比油價很高,但是你拿一個可樂瓶來做油箱,並且要跑100 公里的路,但事實是還沒有上高速車就沒有油了,所以gas limit 不夠礦工消耗的話會就會導致代碼執行中斷。儘管如此,礦工還是會把勞務費gas 收走的~

那ETH 目前的tps 大約在什麼範圍?

2022 年2 月28 日下午的區塊gas limit 為30,000,000 左右,以太坊的出塊時間在13 秒左右,交易的最低成本為21000,對應ETH 的tps 上限為110 左右,由於還存在大量不是普通轉賬的交易,而是與合約交互的交易,所以實際ETH 的tps 只有10 多筆。

執行成本gas

在以太坊中,執行交易會改變狀態—— 好幾筆交易被打包進一個區塊,每個區塊就相當一個交易列表;當交易被按照順序執行後,會輸出新的合法狀態。

  1. 交易按照以下步驟執行:
    將發送者賬戶nonce 值加 1

  2. 每當發送一筆交易,發送者賬戶nonce 就會增加。這個操作在交易執行之初就會完成,如果交易執行失敗,則賬戶nonce 值回滾。
    從發送者賬戶扣除交易預付額( gas limit × gas price )

  3. 我們會從發送者賬戶餘額裡扣除交易預付額,這個機制很簡單——由發送者為自願付出的執行交易成本(gasLimit × gasPrice)付費。
    確定該交易能夠用於執行的gas 值(gas limit - intrinsic cost)

  4. 交易的gas 總額(gas limit)扣掉固有成本後,剩下的就是可用於執行交易的gas 。
    執行該交易包含的操作(轉賬、調用或創建智能合約)
    執行交易還涉及EVM 的操作列表,其中唯一完全不需要EVM 操作的交易——就是普通轉賬。

    每一項EVM 操作都有對應的gas 成本;在交易執行過程中,每做了一項EVM 操作,就會從可用gas 中扣掉對應的gas 成本。直到下列兩種情況中的一種出現才停止:

    可用gas 被耗盡,執行失敗

  5. 執行結束後可用gas 還有剩,或是剛好為零
    通過SELFDESTRUCT 和SSTORE 函數對發送者退款
    在以太坊中,SELFDESTRUCT 操作碼用於銷毀不再需要的智能合約。每銷毀一個合約,執行者能夠收取24,000 Wei 。
    同樣的,當使用SSTORE 操作碼寫入0 (有效刪除值)的時候,操作者每寫入一個0 ,就能收取1500 Wei 。以太坊的設計合理性一文中找到)。
    一文中找到)。

  6. 還有一個重點是,必須在交易所包含的操作都執行結束後,才會進行退款。因此任何應該返還的gas 都不會被交易執行過程所消耗,從而避免了可能出現的_永遠不會耗盡gas 的交易_。
    退還交易發送者任何未使用的gas

  7. 如果用於交易的預付款超過交易所使用的gas,則發送方有權在執行交易後收回剩餘的gas。
    向受益人賬戶(通常屬於挖出包含該交易的區塊的礦工)轉入挖礦收益

執行交易所使用的所有Gas 被視為交易手續費,由礦工獲得。這種機制激勵礦工持續出塊,並在網絡安全層面永續合作。

執行交易包含的操作成本參考下圖黃皮書的對應內容,例如MUL、DIV、ADD、SUB 等等。

  1. 與gas、tps 相關的EIP 方案:

  2. EIP-5: 調整RETURN 和CALL 的Gas 用量

  3. EIP-150:大量IO 操作的Gas 成本變化

  4. EIP-158:狀態清除

  5. EIP-1108:降低alt_bn128 預編譯Gas 成本

  6. EIP-1283:SSTORE 操作碼的Gas 調整

  7. EIP-2028:減少交易數據使用成本

  8. EIP-2200:淨Gas 計量的結構化定義

  9. EIP-2565:指定ModExpGas 成本

  10. EIP-1559:ETH 1.0 鏈的收費市場變化

  11. EIP-2929:狀態訪問操作碼的Gas 成本增加

  12. EIP-1077: 合約調用的Gas 中繼

  13. EIP-1087:用於SSTORE 操作的Gas 計量

  14. EIP-1285:在CALL 操作碼中增加GcallstipendGas

  15. EIP-1380:降低了內部調用的Gas 成本

  16. EIP-1613: Gas 站網絡

  17. EIP-1930:具有嚴格Gas 語義的CALL

  18. EIP-2045:EVM 操作碼的顆粒Gas 成本

  19. EIP-2046:降低了對預編譯進行靜態調用的Gas 成本

  20. EIP-2542:新的操作碼TXGASLIMIT 和CALLGASLIMIT

  21. EIP-3322:帳戶Gas 存儲操作碼

  22. EIP-2780:減少內部交易Gas

  23. EIP-4488:減少交易calldata gas 與總calldata 限制

EIP-1559

EIP-4844:分片Blob 交易

2019 年由v 神提出,2021 年8 月5 日上線。

一種交易定價機制,包括固定的每個區塊的交易費用,該費用將被銷毀並動態擴展/收縮區塊大小以應對瞬時的堵塞。

  • 動機

  • 動機

動機

動機

“當前以太坊的“最高價拍賣”費用模式效率低下,對用戶來說成本高昂。此EIP-1559 提出了一個取代這種機制的方法,即根據網絡需求來對一個基本網絡費用進行調整,從而創建更好的費用價格效率,並降低用於避免支付不必要的高額費用所需的客戶端軟件的複雜性。”

在當前的以太坊系統中,新提交的交易必須等待被某個礦工打包進入下一個區塊,但這些交易可以通過增加Gas Price 參數使其高於網絡平均水平,以此來激勵礦工打包自己的交易。礦工是總是會希望將那些包含最大交易費的交易打包進入新區塊中,因此預計被打包進入下一個區塊中的交易總是那些有著最高Gas 價格的交易。

這種最高價拍賣模式的問題在於,在交易需求旺盛的時期,情況可能會很快失控。當區塊接近達到滿塊時,使交易被打包進入下個區塊的成本(交易費)可能會急劇上升,因為用戶會試圖以比其他人更高的價格來讓自己的交易被打包。

儘管當前礦工們有一定的能力(備註:比如增加區塊gas 上限) 來增加在單個區塊中打包的交易筆數,但這一上限無法很快得到改變,且實際上礦工們更樂於使用較小的滿塊,而不是將區塊gas 上限越推越高(對於礦工來說,由於存在叔塊率,更大的區塊帶來更高的風險)。尤其是如果你的錢包使用了gas 定價算法,從而使你的交易在一個特定的時間框架內被打包,那麼你可能最終會支付一筆相當高昂的交易費來讓你的交易被打包進入下一個(幾乎) 滿了的區塊。

EIP-1559 引入了gas 費用的“base fee”(基本費) 概念,這筆費用被設定為會動態地調整,當網絡超出目標每區塊gas使用量時,“base fee”會略有增加,而當數量低於目標時,“base fee”用會略有下降。這筆“base fee”不會流向礦工的口袋,而是會被銷毀。

為了激勵礦工打包交易,用戶還將設定一個“Tip” (小費) 參數,並設定一個他們為了讓自己的交易被打包進入區塊而願意支付的最大金額,礦工將獲得這筆“Tip” (小費)。

由於“基本費”不會根據網絡需求的瞬息變化而劇烈波動,因此用戶在一定程度上遠離了“最高價拍賣”模式帶來的低效率問題(“Tip”費用仍然是最高價模式),因為“基本費”會被銷毀,而不是給礦工,這樣礦工就不會有動機去嘗試操控交易費了。重要的是,此機制也試圖解決錢包開發者在自動預估網絡交易費方面遇到的一個重大問題,使交易費預估變得更加可預測。

簡單總結

EIP-4488

動機

動機

動機

動機

Rollups 在短期和中期,也可能是長期的,以太坊唯一的去信任擴展解決方案。長時間來,L1 的交易費用一直非常高,並且迫切需要採取任何必要的措施來幫助促進整個生態系統向rollup 的遷移。 Rollups 顯著降低了許多以太坊用戶的費用:Optimism 和Arbitrum 經常提供比以太坊L1 層本身低約3-8 倍的費用,而具有更好的數據壓縮並且可以避免包含簽名的ZK rollups 的費用約低40-100 倍的費用。

然而,即使是這樣,費用對許多用戶來說也太貴了。對rollups 本身長期不足的長期解決方案一直是數據分片,這將為鏈中的rollups 添加約1-2 MB/秒的專用數據空間。然而,數據分片仍然需要相當長的時間來完成實施和部署。因此,需要一種短期解決方案來進一步降低rollup 成本,並激勵整個生態系統向以rollup 為中心的以太坊過渡。

該EIP 提供了一種快速實施的短期解決方案,同時也降低了安全風險。

二級標題

二級標題

一級標題

一級標題

一級標題

3、ETH 的網絡

ETH 節點之間的數據都是通過P2P 網絡進行傳輸,ETH 的P2P 網絡會影響節點間的區塊數據的同步速度,因此也會限制TPS 的增長。

Devp2p 是一組形成以太坊P2P 網絡的網絡協議。服務於與以太坊相關的任何網絡應用程序的需求。

該系統提供對整個Internet 中其他節點的發現以及與這些節點間的安全通信。libp2pIPFS 的

二級標題

二級標題

與ETH 網絡相關的EIP:

  1. EIP-8: devp2p 前向兼容性要求

  2. EIP-8: devp2p 前向兼容性要求

  3. EIP-627:Whisper 規範

  4. EIP-706:DEVp2p 快速壓縮

  5. EIP-778:以太坊節點記錄(ENR)

  6. EIP-868:v4 ENR 擴展

  7. EIP-2124:減少交易數據使用成本

  8. EIP-2364:ETH/64:forkid 擴展協議握手

  9. EIP-2464:ETH/65:交易公告和檢索

  10. EIP-2481:ETH/66:請求標識符

  11. EIP-2976:基於Gossip 的類型化交易

EIP-4444

動機George KadianakislightclientAlex Stokes動機

動機

動機

客戶端停止在p2p 層上提供超過一年的歷史收據。客戶可以在本地修剪這些歷史數據。

歷史塊和收據目前佔用超過400GB 的磁盤空間(並且還在增長!)。因此,要驗證鏈,用戶通常必須擁有1TB 的磁盤。

驗證新塊不需要歷史數據,因此一旦客戶端同步了鏈的末端,只有在通過JSON-RPC 明確請求或對等方嘗試同步鏈時才會檢索歷史數據。通過修剪歷史,該提議減少了節點的硬盤需求。修剪歷史數據還允許客戶端刪除處理歷史塊的代碼。這意味著執行客戶端不需要維護處理每次升級的複合更改的代碼路徑。

二級標題

二級標題

一級標題

一級標題

一級標題

信標鏈

二級標題

信標鏈

信標鏈將管理或協調擴展的分片和質押網絡。但它不會像今天的以太坊主網。不能處理賬戶或智能合約。

信標鏈的角色會隨著時間而改變,但它是正在努力實現的安全的、可持續和可擴展的以太坊的基礎組成部分。

信標鏈將向以太坊引入POS。這是一種幫助您確保以太坊安全的新方法。把它想像成一種公共物品,它將使以太坊更健康,並在此過程中為你賺取更多的ETH。挖礦挖礦

(網絡當前的方式)更容易。從長遠來看,這將有助於使以太坊更加安全。參與網絡的人越多,它就會變得越去中心化和安全。

最初,信標鏈將與我們今天使用的以太坊主網分開存在。但最終,它們將被連接起來。該計劃是將主網“合併”到由信標鏈來控制和協調的POS 系統中。

信標鏈啟動時間2020 年12 月份。

棄用ETH2ethereum.org以太坊協議正發生重大變化。客戶端團隊正在升級協議,對以太坊進行擴容,以滿足全球用戶的需求,同時提升以太坊安全性與去中心化程度。除了協議開發,以太坊的一個極為重要的轉變在於棄用術語“ Eth1 ” 與“ Eth2 ”。 2021年年底起,核心開發者就停止使用“ Eth1 ” 與“ Eth2 ” 了,分別以“ 執行層” 與“ 共識層”取而代之。今天,正如我們在Q1 路線圖中強調那般,

  • 也對此做出同樣的改變。

  • Eth1 → 執行層

  • Eth2 → 共識層

執行層+ 共識層= 以太坊

概覽

  • 概覽

  • 術語Eth1與Eth2 ( 以太坊2.0 ) 逐步停止使用

  • 執行層( Eth1 ) 與共識層( Eth2 ) 作為新術語

  • 以去中心化的方式來擴展以太坊的路線圖保持不變

用戶不需要有任何操作

以太坊2.0 從何而來?

作為路線圖的一部分,以太坊一直計劃以去中心化的方式來擴展網絡,並過渡到PoS ( 權益證明) 。早些時候,研究者們分別對這些計劃進行研究,但在2018 年左右,上述都被納入進“ 以太坊2.0 ” 路線圖中。

作為路線圖的一部分,現有的PoW鏈( Eth1 ) 最終會通過難度炸彈被棄用。用戶與應用將被遷移到新的以太坊PoS 鏈(即Eth2 ) 上。

2019 年初ConsenSys 發表的《 Serenity 路線圖》 解釋了具體情況。

發生了什麼改變?

隨著信標鏈的工作開始,很明顯,分階段進行的以太坊2.0 將要花費數年時間才能完全交付。這導致對PoW 鏈的研究計劃又重新活躍起來,例如Stateless Ethereum ( 無狀態以太坊),這是一個通過刪除網絡裡不再被訪問的狀態來限制狀態膨脹率的範式。

正文

正文

正文

為什麼我們不能用Eth2?

Eth2 這個品牌名的主要問題之一是Eth2 會對新以太坊用戶創造一個不完整的心智模型。他們會直覺地認為:Eth1 在前,Eth2 在後;或者Eth2一旦創世了, Eth1就不復存在了。這兩種觀念都是錯誤的。通過不再試用Eth2 這個術語,未來用戶就不會再形成這種容易錯誤理解的思維模式了。

包容性

包容性

隨著以太坊路線圖的升級,以太坊2.0 已經變得不能準確表達以太坊路線圖的意思了。嚴謹且準確的詞彙選擇,可以讓大眾更好理解以太坊的內容。

防止詐騙

不幸的是,一些惡意行為者試圖利用Eth2 這一誤稱來騙用戶用ETH 來兌換代幣“ ETH2 ” ,或者要在Eth2 升級前,必須以某種方式遷移他們的ETH。

我們希望這次更新的術語能夠清楚地消滅這種詐騙元素,讓生態變得更安全。

合併

合併

最初,最初,信標鏈與主網分開運行。以太坊主網繼續通過POW得到保護,即使信標鏈使用

POS 共識並行運行。合併是這兩個系統最終融合在一起的時候。

想像一下以太坊主網是一台載滿遊客並高速運行的火車,信標鏈也同樣如此,他們在高速運行的同時,還需要相互對接,合併成一台全新性能更強的火車,並且過程中游客是無感知的,可想而之難度是非常大的。合併後標誌著以太坊工作量證明的結束,並開啟一個更可持續、更環保的以太坊時代。此時,以太坊將更接近實現其以太坊願景

中概述的全面、安全和可持續性,並且用戶全程將會是無感知的。一旦發生合併,將分配質押者來驗證以太坊主網。二級標題

二級標題

一級標題

一級標題

5、分片

5、分片

二級標題

二級標題

二級標題

分片的特點

二級標題

二級標題

二級標題

分片鏈的細節討論

分片鏈版本1:數據可用性

當第一個分片鏈運行時,它們只會向網絡提供額外的數據。他們不會處理交易或智能合約。但是當與rollup 相結合時,它們會處理大量事務。

Rollup 是當今存在的“layer2 ”技術。它們允許dapp 將交易捆綁或“rollup”到鏈外的單個交易中,生成加密證明,然後將其提交給鏈。這減少了事務所需的數據。匯總與分片提供的所有額外數據可用性相結合,每秒可以獲得100000個事務。

分片鏈版本2:代碼執行

考慮到版本1 分片提供的處理能力,是否還需要將分片應用到處理執行過程。在社區中存在爭論。 Vitalik Buterin 提出了3 個值得討論的潛在選項。

(1)不需要狀態執行

這意味著我們不會讓分片能夠處理智能合約只將它們作為數據倉庫。

二級標題

(3)等待(ZK)snarks

二級標題

二級標題

合併合併二級標題

原文鏈接

原文鏈接

原文鏈接

W3.Hitchhiker
作者文库