哪些方案可降低以太坊 Gas 費?從 Layer 1、Layer 2 和相關 Gas 產品三個角度分析。

撰文:崔晨, 就職於 HashKey Capital Research
審覈:鄒傳偉,萬向區塊鏈首席經濟學家

最近以太坊網絡經常擁堵,用戶爲了儘快達成交易,會上調 Gas 費希望能優先被礦工打包,尤其是在交易有利可圖的時候。以太坊網絡在 2021 年之後利用率長期超過 97%,資源短缺的局面暫時不會得到緩解,按照這種趨勢,短期內以太坊的 Gas 費不會大幅下降。

HashKey 崔晨:解析降低以太坊 Gas 費的實踐及優劣勢圖 1:以太坊網絡利用率

HashKey 崔晨:解析降低以太坊 Gas 費的實踐及優劣勢圖 2:以太坊網絡的平均 Gas 費

以太坊高昂的 Gas 費深受詬病,嚴重影響了用戶體驗,降低以太坊 Gas 費迫在眉睫。Gas 費全部交給負責維護網絡執行交易的礦工,代表用戶使用網絡資源需要付出的費用。Gas 費的計算方式爲 Gas Price*Gas Used,其中 Gas Price 由用戶設置,代表用戶爲每單位 Gas 支付的價格,Gas Used 是實際中使用的 Gas 數量。在操作時用戶還需要設置 Gas Limit,代表用戶願意爲此交易支付最多的 Gas 數量,如果在執行過程中發現所需的 Gas 超過設置的 Gas Limit,會導致交易失敗,此時的 Gas Used 等於 Gas Limit,用戶仍需繳納 Gas 費。如果 Gas Used 小於 Gas Limit,交易成功後 Gas 數量會按照實際執行使用的數量收費。

根據 Gas 費的計算方式,可以通過降低 Gas Price 和 Gas Used 實現降低 Gas 費,體現在降低網絡擁擠程度,將計算轉移到二層網絡中進行;降低合約複雜度減少計算的執行步驟;改變 Gas 的收取方式等。本文將從 Layer 1、Layer 2 和相關 Gas 產品這三個角度出發,解析關於降低以太坊 Gas 費的實踐以及優劣。其中 Layer 1 指的是以太坊網絡本身,Layer 2 指的是以太坊主鏈外的網絡。

以太坊 Layer 1 上的實踐

提高區塊的 Gas Limit

以太坊對單個區塊的大小沒有強制規定,但每個區塊承載的 Gas 單位數量是有上限的,也就是區塊的 Gas Limit。提高 Gas Limit 帶來最直接的影響是單個區塊可以執行更多的操作,因此提高了整個系統的承載量。每個區塊可以打包更多交易來緩解網絡的擁堵狀況,用戶就可以降低 Gas Price。這是最直接對網絡進行擴容的方案,因執行簡便經常被用於擴容。2020 年 7 月之後以太坊區塊的 Gas Limit 達到了 1250 萬左右,相較於 2017 年末已經上漲了近兩倍。

HashKey 崔晨:解析降低以太坊 Gas 費的實踐及優劣勢圖 3:以太坊區塊的 Gas Limit

可以看出,雖然以太坊區塊的 Gas Limit 一直在提高,以太坊還是會出現網絡擁堵的情況。這是因爲以太坊的用戶和使用量是同時上漲的,只要 Gas Limit 的上漲程度沒有超過使用量的上漲,提高 Gas Limit 就無法根本解決高 Gas 費的問題。Gas Limit 具體數值由礦工投票決定,在目前的網絡擁堵程度下,有些礦工建議將 Gas Limit 繼續提高到 1600 萬,但遭到了很多阻力。

除了無法根本解決網絡擁堵的問題外,提高 Gas Limit 後由於區塊容量擴大,區塊的驗證和同步時間有所延長。因此導致網絡更容易分叉,叔塊出現的概率升高,節點維護網絡的成本也會增加,最終網絡可能出現安全性和中心化問題。雖然提高 Gas Limit 是最簡單進行網絡擴容的方式,但它帶來的弊端也是不能忽視的。不過目前網絡擁堵情況加劇,出於可用性考慮,加上礦工會受到更多筆 Gas 費獎勵的吸引,未來極有可能仍會提高區塊 Gas Limit 來增大承載量。

降低操作的 Gas 消耗

雖然以太坊區塊的 Gas Limit 在增加,區塊的承載量遠超過去,但數據顯示目前的轉賬數量剛剛與 2018 年初的轉賬數量持平,說明了以太坊網絡中大部分資源被分配給了更復雜的合約交易。如果在合約編寫上能夠降低複雜度,減少合約執行所需要的 Gas,或者直接降低操作的 Gas 定價,就可以實現節約 Gas 費的目標,並且節約網絡資源。

HashKey 崔晨:解析降低以太坊 Gas 費的實踐及優劣勢圖 4:以太坊的每日轉賬數

以太坊的黃皮書規定了 Gas 的消耗規則,智能合約的編寫過程中,同一功能的不同實現方式消耗的 Gas 會有所不同,爲了節約 Gas 費就需要執行最節約 Gas 的代碼實現方法。例如儲存新數據和修改數據都要消耗 Gas,所以最好避免重複修改,一次性儘可能多地寫入。在下圖中,兩者在結果上相同,但右邊的代碼實現消耗 Gas 會更少。

HashKey 崔晨:解析降低以太坊 Gas 費的實踐及優劣勢圖 5:同一結果的兩種代碼實現,右邊更節約 Gas

除此之外,壓縮智能合約的數據輸入,避免創建智能合約時將其用作數據存儲等方式也可以節約 Gas。有人提出操作消耗 Gas 的原始定價沒有經過充分分析,存在定價不當的問題。以太坊中的 EIP 1380、EIP 2046 等提案就涉及降低某個操作的 Gas。但以太坊 Gas 定價的改變要慎重考慮,因爲降低有些操作的 Gas 定價會降低重入攻擊的難度。

EIP 1559

EIP 1559 已經被納入在以太坊的倫敦硬分叉升級中,它改變了以太坊網絡 Gas 費的定價和分配規則。目前以太坊 Gas 費定價規則爲市場競價的方式,用戶自行設置願意支付的 Gas Price,礦工挑選支付最高 Gas Price 的交易打包。每個人都希望能儘快完成交易,因此在網絡擁堵時 Gas 費會居高不下。EIP 1559 提出了一種新的 Gas 費收取方案,用戶支付的 Gas 費分爲基礎費和小費,其中基礎費直接銷燬,小費歸礦工收入。

EIP 1559 方案引入了 Gas Target 的概念,區塊 Gas 上限是 Gas Target 的兩倍,基礎費根據網絡使用情況進行動態調節,也就是區塊實際包含的 Gas 與 Gas Target 的比較。如果區塊的 Gas 超過 Gas Target,那麼下個區塊收取的基礎費就會上漲,反之如果低於 Gas Target 就會下降。上漲和下降的幅度不會超過 12.5%,避免了 Gas 費突然暴漲暴跌。由於基礎費一直是動態調節的,如果連續多個區塊包含的 Gas 一直超過 Gas Target,基礎費就會指數上漲到誇張的價格,讓用戶不得不暫停交易,等待 Gas 降低到 Gas Target 以下,基礎費纔會下降。基礎費是用戶必須支付的,礦工的小費可選擇支付,在網絡使用率不高的情況下,基礎費就可以讓用戶及時完成交易,沒有必要支付礦工小費。如果網絡擁堵,則需要支付小費優先交易。

目前 Gas 費收取需要用戶設定支付的 Gas Price,如果太低需要等待很久,太高則造成浪費。EIP 1559 的實施會提高用戶使用體驗,因爲基礎費是已經被計算好的,理論上支付基礎費就能保證完成交易,用戶只需要選擇給礦工支付的小費,而且在不擁堵的情況下不需要給礦工小費。對於降低 Gas 費來說,EIP 1559 中沒有很直接的體現,在不擁堵時用戶只繳納基礎費於是避免了 Gas 費浪費。在網絡擁堵時持續調高基礎費沒有讓用戶花費更少,而是通過不斷漲價讓人們面對高昂收費時不得不暫緩交易。因此很多人對 EIP 1559 的實施對降低 Gas 費的有效程度存疑,尤其是短期受到很大損失的礦工羣體。但從長遠看,銷燬本來應該交給礦工的 Gas 費,能夠將交易帶來的價值引入到以太坊系統中,提升整個系統的價值也會提高礦工的收入。

以太坊 2.0 的實現

以太坊升級到 2.0 階段的最終目標是實現擴容,解決網絡的擁堵問題,除了將共識機制由 PoW 轉變爲 PoS,以太坊 2.0 的還要實現分片和部署 eWASM 虛擬機。分片就是將整個網絡分區,節點不需要維護整個系統的交易,只需要負責維護其中一個分區即可。以太坊 2.0 將有 64 個分片,將交易分佈到各分片中增加網絡的承載量。各分片可以與信標鏈進行交聯,信標鏈不儲存以太坊上的賬戶餘額和合約狀態等信息,負責管理驗證者和記錄分片狀態。分片要考慮到安全性的問題,因爲相對而言攻擊單分片的難度會降低。在以太坊 2.0 的分片上都存在至少 128 個驗證者組成的委員會,他們負責表決分片上的信息,這些人每 epoch (6.4 分鐘)更換一次,由信標鏈通過 RANDAO+VDF 的方案分配。作惡者很難保證在同一時間控制同一分片上超過三分之二的節點,因此保證了網絡的安全。

eWASM 是以太坊 2.0 階段部署的虛擬機,相較於目前的 EVM 虛擬機,eWASM 在速度和效率上會大幅提升,配合分片技術,以太坊 2.0 能夠實現大規模擴容,降低 Gas 費。但由於以太坊分片和 eWASM 的開發難度比較高,短期內不會上線。

以太坊 Layer 2 上的實踐

Rollup

Rollup 是目前受到最多關注的以太坊 Layer 2 解決方案,最有可能在短期內解決以太坊網絡擁堵的問題來降低 Gas 費,Vitalik 也指出 Rollup 是以太坊 2.0 分片技術上線之前最有效的擴容技術。Rollup 的運營者通過將計算和完整的狀態儲存放到鏈下,壓縮交易數據實現主鏈上的擴容。實際上交易數據是儲存在區塊鏈上的,風險源自運行者可能提供錯誤的數據進而控制用戶資產,爲了避免風險存在不同的 Rollup 解決方案。

ZK Rollup 通過有效性證明保證數據安全,使用 ZK-SNARK 密碼學證明,Layer 1 可以快速完成驗證並轉賬,同時可以保證隱私性,但 ZK Rollup 很難對 EVM 進行證明,因此難以應用於使用智能合約的場景。Optimistic Rollup 使用欺詐證明的方式,如果有人發現運營者處理的狀態根是錯誤的,那麼可以發佈一個證明,證明通過後會回滾交易並對運營者進行懲罰。Optimistic Rollup 在主網中支持智能合約的部署,更適用於現在的擴容需求。但由於欺詐證明的要求,在退出 Rollup 時,需要一週的時間檢查其他用戶是否提交欺詐證明。

以太坊上儲存交易的一個字節花費 50 Gas,以太坊區塊的 Gas 上限爲 1250 萬。Rollup 可以壓縮以太坊上操作的字節數量,除掉 Rollup 校驗所需要的 Gas 量,可以計算出 Rollup 在擴容方面的表現。

HashKey 崔晨:解析降低以太坊 Gas 費的實踐及優劣勢表 1:Rollup 帶來的擴容空間(來源:Vitalik 博客)

總的來說,Rollup 在擴容上十分有效,因此可以降低以太坊 Gas 費。但 Rollup 會涉及鏈上應用的遷移,使用不同團隊開發的 Rollup 還會導致互操作性下降的問題。

側鏈

側鏈是一條區別於主鏈的區塊鏈,用戶可以將主鏈資產轉移到側鏈上交易,以節約主鏈的資源和交易者的成本。嚴格意義上側鏈不算是 Layer 2 解決方案,因爲無法完全保證用戶的資金安全也不能保證側鏈與主鏈的關聯性。側鏈只能歸爲鏈下解決方案,但由於實現方式和其他 Layer 2 較爲相似,這裏暫時歸爲一類討論。狀態通道、Plasma 和側鏈都是通過鏈下交易實現擴容的,他們在具體實現方式和安全性上有所不同。側鏈的技術實現有多種,重點在於讓資產安全地轉移到側鏈,並讓側鏈資產安全地轉移回主鏈,也就是能安全地實現雙向錨定。

雙向錨定體現爲主鏈上鎖定代幣後到側鏈上發行同等數量的代幣,以及在側鏈上銷燬代幣後到主鏈上解鎖相同數量的代幣。以太坊側鏈的概念從比特幣側鏈衍生而來,有單方或多方的託管方式,SPV 模式,中繼模式等。由於目前以太坊因生態應用繁榮擁堵,實際中用戶對於側鏈更偏重易用性和生態問題,也就是資產轉移過程要簡易無感,側鏈上要有與主鏈相同的生態。因此目前最合格且受衆最多的側鏈是 BSC 和 Heco,雖然他們使用了託管方式進行資產轉移,中心化風險較高,但用戶已經足夠信任這些交易平臺作爲託管機構。完全去中心化的託管模式會因用戶不瞭解技術,或者存在黑客攻擊的風險而失去競爭力。

BSC 和 Heco 鏈上的生態發展較爲繁榮,和以太坊生態一樣出現了借貸、交易等 DeFi 應用,所以有很多用戶將 ETH 轉移到 BSC 和 Heco 上來獲得低 Gas 費的使用體驗。但對於 BSC 和 Heco 來說不是將以太坊側鏈作爲發展目標,他們同樣有獨立的生態,以太坊資產轉移到側鏈上會因此降低以太坊主鏈的價值。經測算 BSC 和 Heco 提高以太坊 TPS 上限約十倍左右,如果未來側鏈中用戶使用量過多的話,側鏈也會出現擁堵問題。

狀態通道和 Plasma

狀態通道是一種在鏈下進行交易和狀態更新的技術,比特幣閃電網絡就是一種支付通道。以太坊的狀態通道可以讓交易雙方在鏈下進行狀態的更新和交易,無需佔用鏈上資源。他們通過狀態通道進行交易時,需要對雙方的行爲進行簽名並保存副本,每一步的操作是清晰的。如果他們結束了鏈下交易,就將最終狀態簽名後返回到主鏈上來更新主鏈上的狀態。

狀態通道在用戶撤回資金時有挑戰期的要求,是爲了防止用戶上傳過期的交易記錄牟利。用戶要等待一段時間確認沒有人上傳更新的副本,等待期結束後會按照最新的副本內容執行。如果其中一個用戶在挑戰期受到攻擊掉線等,他就會因無法迴應而受到損失。狀態通道需要有一組確定的參與者,因爲在通道中的狀態改變只限用於通道內的用戶,而且部署狀態通道需要成本,適合在一段時間內頻繁進行狀態更新的場景。

Plasma 也是一種鏈下交易的方式,它通過在以太坊主鏈上創建子鏈實現,交易和狀態更新通過子鏈操作,以太坊不會保存交易副本,因此可以節約以太坊空間實現擴容。Plasma 子鏈上同樣存在區塊生產者,其中的共識機制可以與以太坊主鏈不同。他們在以太坊上建立交易的根節點來記錄子鏈狀態,作爲子鏈更新的證據。
爲了防止 Plasma 鏈上的區塊生產者作惡,Plasma 使用欺詐證明機制,如果有人發現了生產者的作惡,那麼可以提交證明讓錯誤的區塊回滾並沒收生產者的保證金。如果用戶要退出 Plasma,也需要經歷挑戰期來證明他的交易爲最新交易。但如果 Plasma 上所有人同時退回資金,那麼可能導致以太坊主鏈沒有容量同時處理這麼多交易,會導致用戶資金丟失。

狀態通道和 Plasma 的共性問題是要求資產具有所有者,這樣資產所有者纔可以出具證明。但對於智能合約不屬於任何人的應用來說很難與狀態通道和 Plasma 兼容,因此這兩者只能針對降低轉賬 Gas 費時效果明顯,但由於易用性和挑戰期的問題,技術進展處於停滯狀態。

Gas 相關產品

Gas Token

以太坊的 Gas Price 不是一直都保持在高位,而是在高低之間不斷變化,因此可以利用 Gas Price 的不斷變化進行 Gas 的儲存和套利,例如 Gas Token 的應用。Gas Token 利用以太坊的定價系統實現,在清理狀態和存儲插槽以及刪除帶有自毀操作碼的合約時的 Gas 收費爲負值,也就是會收到 Gas 的退款,最高退款爲創造時消耗量的一半。於是在低價時創建狀態,在高價時刪除會獲得 Gas,再用於其他交易就可以節約 Gas 的花費。GST1 和 GST2 是使用不同機制的 Gas Token,鑄造和銷燬就完成了一次 Gas Token 的應用,他們分別使用了儲存和退款機制、創建和自毀機制來獲得 Gas 退款,其中 GST2 得到的 Gas 更多。

1inch 實踐並創新了一種名爲 Chi 的 Gas Token。在價格低的時候,Chi 會創建來「儲存」Gas,未來 Gas 費上漲後釋放來完成交易。就相當於花費 Chi 退回的 Gas 來支付應本應花錢購買的 Gas。Chi 或者任何 Gas Token 都可以集成到其他系統中來節約 Gas 費,用戶可以鑄造 Gas Token,也可以購買 Gas Token。Gas Token 的價格會隨着 Gas Price 的漲跌而變化,對於用戶或項目方來說,在 Gas Price 低的時候自行鑄造更爲划算。

由於以太坊網絡交易量增加,賬簿容量擴張,Gas Token 由於佔用了空間被認爲是不利於網絡發展的。除了增加全節點成本的問題,未來對 Gas 操作的重新定價也會讓 Gas Token 失效,因此 Gas Token 不應該作爲長期降低 Gas 費的手段。

Gas 衍生品

Gas Price 的不斷變化會讓用戶和礦工支出收入隨之改變,爲了消除這部分的不確定性,Gas Price 可以被設計爲期貨類產品,讓投機者和用戶之間交易。例如 uGas 取一個月中以太坊交易 Gas Price 的中位數來定價,它類似於一種期貨產品。頻繁花費 Gas 的人可以通過購買 uGas 來鎖定花費,礦工可以通過鑄造並售出來鎖定收益。但期貨衍生品實用的前提是人們對 Gas Price 的預期不同,才能保證足夠的流動性。目前以太坊網絡 Gas Price 由網絡擁擠程度決定,所以很容易出現大部分人會對 Gas Price 產生相同的預期。如果大家統一看漲或看跌,uGas 就會因流動性問題偏離正常的定價範圍而很難使用。

其他節省 Gas 費的方式

一些用戶習慣以及相關輔助工具可以幫助用戶節約 Gas 費,例如:

  1. 進行同種代幣的批量轉賬;
  2. 挑選交易者休息、網絡 Gas Price 低的時間段交易;
  3. 利用 Gas Price 實時監控產品確定準確的 Gas Price 區間;
  4. 查詢常見的 Gas Limit 範圍再進行設置,避免因交易失敗造成 Gas 費浪費;
  5. 開發者可以通過代交 Gas 費的方式爲用戶節約費用等。

思考與總結

用戶在以太坊網絡中支付 Gas 費進行交易本質上就是爲使用以太坊網絡資源付費,在網絡擁堵資源稀缺的情況下 Gas 費自然就會上漲。在不減少使用人數的情況下,最好地降低以太坊 Gas 費的方法就是進行網絡擴容,降低用戶對網絡資源的競爭。以太坊擴容存在多種方案,包括提高 Gas Limit、分片、Rollup、側鏈、狀態通道等,他們的優劣進展各不相同,其中分片和 Rollup 是最有效和最可能實現的擴容方案。簡潔的代碼實現也很重要,優化智能合約降低用戶使用 Gas 的單位數量是有效降低 Gas 費的方式,AMM 的興起有這方面的因素。

EIP 1559 通過改變 Gas 費收取方式來改善目前的擁堵狀況,雖然最終仍是網絡閒暇時收費低,網絡擁堵時收費高的效果,但這是由系統自動對基礎費調整的結果。在網絡擁堵時 Gas 費會呈指數型增長,高收費會抑制人們的使用需求,所以達到緩解擁堵的效果。EIP 1559 的方案不適合長期用於緩解擁堵的手段,但由於基礎費被銷燬所以整體對以太坊生態是有利的。除此之外,針對 EIP 1559,礦工可能會聯合起來讓區塊的容量維持在 Gas Target 左右,這樣想優先交易的用戶和現在一樣只能交給礦工更多小費。因此這裏對 EIP 1559 最終實現降低 Gas 費的效果存疑。對於其他的 Gas 產品,都不適合作爲長期、大規模降低 Gas 費的工具使用。下表是對上文中提到的降低以太坊 Gas 費方式有效性和缺點的總結。

HashKey 崔晨:解析降低以太坊 Gas 費的實踐及優劣勢表 2:降低以太坊 Gas 費的方式比較

如果將以太坊比作一條承載了很多汽車的公路,提高 Gas Limit 就是在擴建公路,但過去經驗告訴我們擴建公路永遠趕不上路上車輛增多的速度。EIP 1559 是通過改變收費方案,讓一些車會因高昂的收費而不願出門,其實這是與降低 Gas 費讓更多人享受到以太坊服務的理念相悖的。優化智能合約就是將車輛改小,讓同一條公路能夠承載更多的車,雖然方式可行,但車輛不可能無限制地縮小,而且大部分智能合約在部署前都考慮到了這一點。分片是在原來的基礎上建立交橋和快速路,實現更有效率的擴容。Layer 2 是讓開汽車的人放棄這種交通方式,讓他們乘坐火車或者飛機達到目的地,將本應該在原鏈上完成的交易轉移到鏈下進行,減少對原來公路的使用。這個比喻就很清楚地讓我們看出哪些對擴容降低 Gas 費是有幫助的。