BTC
ETH
HTX
SOL
BNB
查看行情
简中
繁中
English
日本語
한국어
ภาษาไทย
Tiếng Việt

科普| 擴展DeFi吞吐量:Layer-One篇

以太坊爱好者
特邀专栏作者
本文約9314字,閱讀全文需要約14分鐘
探索以太坊的局限性及其對DeFi 用戶的影響。
AI總結
探索以太坊的局限性及其對DeFi 用戶的影響。

編者按:本文來自以太坊愛好者(ID:ethfans)編者按:本文來自

以太坊愛好者(ID:ethfans)

編者按:本文來自

以太坊愛好者(ID:ethfans)

圖片描述

編者按:本文來自

圖片描述

,作者:Remco Bloemen,翻譯&校對:閔敏& 阿劍,Odaily經授權轉載。

- 如果是小額交易,手續費可能會超過交易金額的10% -

Gas 使用量


我們想要創建一個能讓所有價值自由流動的代幣化世界,區塊鏈的局限性會阻礙我們實現這一願景。這就是為什麼0x Labs 組建了一個專門的研究工程師團隊針對這些局限性開發解決方案。在本文中,我們將探索以太坊的局限性及其對DeFi 用戶的影響。我們還將簡要介紹下一代區塊鏈。在後續文章中,我們將探索另一類解決方案(Layer 2),並介紹我們自己解決DeFi 需求的策略。

首先,要知道以太坊交易的大小是以Gas 消耗量來衡量的。交易會打包到區塊中,大約每13 秒出一個塊。每個區塊只能容納有限的交易,因為有所謂的“區塊Gas 上限”。目前,每個區塊的Gas 上限是1200 萬。一個普通的ERC20 代幣交易需要消耗大約5 萬Gas 。這就意味著,一個區塊最多可容納240 筆代幣轉賬操作,即,每秒可完成大約18 筆交易。 DeFi 交易通常涉及多筆代幣轉賬,以及其它記賬操作,這會導致成本翻倍,並進一步限制吞吐量。 Gas 容量和出塊時間意味著有源源不斷的Gas 可供交易使用。

圖片描述

Gas 使用量

圖片描述

回顧整個以太坊的發展史,Gas 的供應量(灰色部分)和消耗量(黑色部分)如下圖所示:

二級標題

圖片描述

如圖所示,在拜占庭(Byzantium)、君士坦丁堡(Constantinople)和繆爾冰川(Muir Glacier)硬分叉發生前,Gas 供應量都出現了鋸齒狀的驟降。這些都是以太坊難度炸彈,又稱冰河世紀(ice age),所產生的影響。在冰河期,出塊時間會呈指數型增加,導致每天挖出的塊數量減少,每天的Gas 供應總量也隨之減少。當然了,這種情況是非常糟糕的,因此以太坊網絡需要用硬分叉來恢復網絡。難度炸彈的用意正在於此:引入改進措施,以免出現創新停滯的情況。由於君士坦丁堡硬分叉忘了重新設置難度炸彈,以太坊緊接著又引入了繆爾冰川硬分叉。之後的柏林硬分叉正在考慮改變這一機制(EIP 2515)。

二級標題

通過圖中黑色部分的Gas 使用量,我們可以看出2017 年ICO 熱潮以來,以太坊的Gas 使用量佔Gas 上限的60% 以上。自此以後,Gas 上限經過幾次躍升,增長了四倍。每次躍升後,Gas 使用量也出現相應增長。過去幾個月來,以太坊的Gas 使用量似乎卡在了Gas 上限的95% 上。

要想知道以太坊的Gas 使用率為何無法超過95% ,我們需要先了解空塊和叔塊。

二級標題

空塊率隨時間的流逝而穩定增長,目前在5% 左右。所有礦池都有挖空塊,因此不是惡意行為。真正的問題是,出塊速度過快。如果挖出一個區塊的時間少於6 秒,這個塊是空塊的概率會成倍增加(譯者註:作者這個斷言應該是根據時間戳統計數據得出的,因為沒有使用虛擬語氣)。

Gas 價格

2018 年,Gas 使用量達到頂峰時,叔塊率也達到了頂峰(現已降至穩定的5%)。那段時間,空塊率也有增加,可能是因為礦工改變了策略。

二級標題

Gas 價格

有一些方法可以用來降低空塊率和叔塊率。假設導致空塊率和叔塊率較高的根本原因是,由於網絡和區塊處理延遲,礦池無法獲得最新狀態。一種簡單(但是不可取)的方法是,讓礦池變得更加中心化,將最新狀態集中在一處。去中心化更高的解決方案是,使用bloxroute 在礦池之間創建專屬的互聯通道。還有一種解決方案的靈感來自“間諜挖礦(spy mining)”,就是讓礦池預先共享它們正在挖的區塊。其它礦池就能針對每一個在挖區塊準備好下一個區塊,一旦某個礦池成功挖出了區塊,其它礦池就知道下一個該挖哪個區塊,並且馬上切換過去。從更高層次來看,改進節點通信協議和處理算法也會帶來幫助,或許也能帶來一些收益。但是,正如我們所見,降低叔塊率和空塊率最多可以將每日gas 供應量提高5% 左右。

二級標題

當以太坊用戶對Gas 的需求接近上限時,會發生什麼情況?礦工可以隨心所欲地選擇交易進行打包(詳見下文)。但是實際上,礦工會優先打包Gas 價格高的交易,因為這會讓他們的收益最大化,最終引發針對Gas 的最高價格拍賣。

Gas 上限

二級標題

圖中數據代表被打包進下一個區塊所需支付的最低價格。如果你願意等久一點,Gas 價格會低得多。從近期的歷史數據來看,如果你願意等待兩分鐘及以上,Gas 價格就會下降。 EIP 1559 有助於在降低溢價的同時加快交易的處理速度。

Gas 上限

正文

正文

目前,由於缺乏關於礦工真實行為的詳細信息,我們採取了一種比較簡單的方法:投票系統。希望我們將來能通過軟分叉將這一方法轉變成更精確的算法。

正文

圖片描述

—— 以太坊的基本設計原理(2015 年3 月)

圖片描述

正文

正文

二級標題

Gas 耗用量

提高Gas 上限會給以太坊帶來很高的隱形安全成本。正如我們所見,提高Gas 上限會提高叔塊率和空塊率。在交易負載量正常的情況下,這一影響不大。但是出於安全性考慮,我們只對極端情況感興趣,並不關心正常情況。根據Perez 和Livshits(2019)的研究,在最糟糕的情況下,如果生成一批處理效率極低的交易(在Gas 成本相同的情況下,處理這類交易的速度比普通交易慢100 倍),並將其打包到區塊內,節點需要花90 秒的時間來處理這個區塊,從而導致節點落後,礦池挖出大量空塊和叔塊。自這項研究發布以來,已經出現了一些緩解措施,但是問題並未得到徹底解決。因此,兩位主要的節點開發者Péter Szilágyi 和Alexey Akhunov 批評了關於提高Gas 上限的決定。

正文

因此,達到Gas 上限時,Gas 價格就會上漲,而且我們似乎不應該進一步提高Gas 上限。那麼我們還能採取什麼措施?我們能夠降低交易所需的Gas 成本嗎?

Gas 耗用量

二級標題

交易的Gas 消耗量基本上就是其EVM 操作的消耗量。一筆交易是由許多EVM 基本操作組成的,而每一個操作的Gas 耗用量都通過EIP 和硬分叉來治理的。在過去的硬分叉中,主要操作的Gas 消耗量有升(EIPs 150、160、1884)有降(EIPs 1108、2028、2200)。計劃中的“柏林” 硬分叉也在考慮引入幾個Gas 消耗量變更(EIPs 1380、1559、2046、2565、2537)。

這就意味著存儲仍然會是DeFi 成本中的一大塊。創建一個新的餘額需要2 萬Gas,而修改一個已有的餘額要耗費5 千。一筆轉賬至少要改變兩個月,一次交換則要改變至少4 個,更複雜的DeFi 交易會包含更多昂貴的狀態操作。看起來實在不容易降低相關存儲的數量和成本,這個趨勢九頭牛都拉不回來。但好消息是,Layer-2 擴展方案會嘗試做成存儲粗放且計算密集的,看起來會更討喜一些。

最後,提高區塊的Gas Limit 也同樣有安全性方面的隱憂:提高Gas Limit 是有效果的辦法中最差的。單純根據當前真實操作的平均成本來改變Gas 消耗量也是非常危險的(Naively optimizing the Gas cost for the current true average cost of operations is very dangerous.)。

到此為止,為什麼擴展以太坊是一個棘手的問題,已經很顯然了。在我們討論大家提出的解決方案以前,我們希望再探討一個當前以太坊可能傷害DeFi 用戶的缺點。

礦工可抽取價值

二級標題

區塊生產者雖然受到共識規則的限制,但共識規則也為他們提供了一些重要的自由(freedom),比如交易選擇和排序。對於一般的代幣轉賬來說,生產者的自由並不會造成很大影響,但對於DeFi 交易比如交易所交易來說,搶跑(front-running,指發送Gas Price 更高的交易來搶先使交易上鍊)可能收穫巨大的經濟價值。更複雜的問題是,一筆目標交易被夾在兩筆交易中間,像夾三明治一樣。 Daian et al. (2019) 將能夠從搶跑交易中獲得的價值稱為礦工可抽取價值(miner extractable value)。

另一方面,讓自己的交易緊跟在另一筆交易之後上鍊,可能也是有價值的,比如在價格信息傳輸機制更新信息後第一個清算倉位(liquidate a position)。這個叫做back-running,最後也會變成礦工的收益。

二級標題

礦工可抽取價值最終是從普通的DeFi 用戶處得來的,表現是更大的價差、更差的價格、更高的手續費,以及更多失敗的交易。要想獲得更好的DeFi 體驗,就應該解決這個問題。解決辦法之一是限制交易排序自由,比如要求一個區塊裡的交易按Gas Price 由低到高排序。

二級標題

現在有很多厲害的團隊在開發不同的可擴展性解決方案。解決方案主要有兩個方向,“Layer-1” 和“Layer-2”。 Layer-1 的方案致力於打造一個更可擴展的區塊鏈來取代當前的以太坊,Layer-2 方案則是嘗試在當前以太坊的基礎上接入更可擴展的基礎設施。我們這裡就談Layer-1,Layer-2 方案留給下一篇文章。

大部分其他解決方案都有三點共同之處:(1)使用WebAssembly 作為虛擬機;(2)最小化狀態的架構;以及最重要的,(3)分片。當前的以太坊是串行執行所有交易的。事實上,讓交易能排成一個隊列可以說是區塊鏈的全部意義所在。但這種模式的缺點就在於,難以並行執行交易,所以我們無法通過投入直接更多資源來解決擴展問題。那麼把區塊鏈分割成多個鬆散互聯的領域,一個線程就叫一個“分片”,就能實現並行化處理。在一個分片內部,事務仍然是串行發生的,但不同分片的事務是移步發生的。這就使得所有分片能並行運行,以分片數量為倍數擴大網絡的吞吐量。我們用來分割網絡的領域也不需要與分片一一對應,可以把多個領域分配給同一個分片(線程),甚至可以移動它們做負載均衡。看Near Protocol 的“夜影” 協議白皮書可更深入地了解分片的大體。

正文

正文

另一個需要注意的事情是,這些並發問題可能非常棘手。在現實的交易所中,訂單的填充狀態(fill-state)需要不斷更新,這就使得寫一遍的更加複雜。如果說困擾以太坊1.0 的可重入漏洞(reentrancy bug)是蝴蝶,可能引起巨大的後果,那並發問題就是床上的臭蟲(bug),無孔不入。並發漏洞是不確定的,而且在測試中可能根本看不出來。就像我們在上面的簡單的交換的例子中看到的,開發者需要從頭重新思考整個架構,就像床上的臭蟲,清除它們的唯一辦法就是把一切都推倒,從頭重建。

正文

參考文獻

Daniel Perez & Benjamin Livshits (2019). “Broken Metre: Attacking Resource Metering in EVM.”

Daian et al. (2019). “Flash Boys 2.0: Frontrunning, Transaction Reordering, and Consensus Instability in Decentralized Exchanges.”

Brian Nigito (2017). “How to Build an Exchange.”

Danny Ryan (2020). “The State of Eth2, June 2020.”

Scott Shapiro & William Villanueva (2020). “ETH 2 Phase 2 WIKI.”

DeFi
ETH
歡迎加入Odaily官方社群