以太坊的擴容之路:哪個方案才是未來?
先知实验室
2022-03-21 07:51
本文约13886字,阅读全文需要约56分钟
深層研究以太坊擴容方案優劣性。

前言

前言

前言

無論你是不是區塊鏈技術方面的專家,只要你待在Crypto的世界裡夠久。以太坊擴容,layer2,Rollup這些詞語對於你來說都不會陌生。很多人都對這些概念中的一個或多個有所了解,但是他們之間的關係到底是怎樣的?我們為什麼需要這些技術?他們想要解決什麼樣的問題?

正文

正文

正文

自從CryotoKitty造成以太坊鏈上擁堵的那天開始,以太坊開發者們就在不停的探索提高以太坊吞吐量的方案。

從原理上可以分為兩類:

(1)是對以太坊區塊本身進行改造,我們姑且稱之為Layer1方案,這裡的主要解決方案是分片。

(2)是改變我們使用以太坊的方式,將交易的執行和處理放在鏈下,以太坊本身只用來校驗其交易有效性,提供安全性。這就是我們經常聽到的Layer2。

二級標題

二級標題

一、狀態通道

以下是一個狀態通道的最原始結構:

相比描述他的原理,

相比描述他的原理,一個例子更能夠說清楚什麼是狀態通道:

你很喜歡樓下的一家理髮店,每次去理髮店的時候Tony老師都會在你的耳邊一直讓你辦卡。

有一天你終於決定了,辦卡就辦卡吧,反正我以後還會來。於是你向理髮店轉賬一千元辦了一張卡。

以後每次去理髮,你都不需要再向理髮店轉賬,取而代之的是你的卡里的餘額會被扣除,同時每次理髮你都和理髮店完成了一次實際上的交易。

過了一個月,你要搬家了,可是你卡里的錢還沒用完。於是你向理髮店申請退卡,理髮店的Tony老師退給了你200元。

在這一個月的時間裡,你在理髮店消費了十幾次,但你和理髮店實際上只互相轉賬了兩次。

將這個過程放在區塊鏈上,你買卡的過程實際上是將錢存進了某個智能合約,同時開啟了一個你與理髮店間的狀態通道。你退卡的過程關閉了你與理髮店之間的“狀態通道”。你和理髮店之間的互相轉賬相當於在以太坊主鏈上的兩筆交易。

應用場景

應用場景

應用場景

(1)狀態通道在某些簡單場景如流支付中能夠發揮很大的作用,其通過在鏈下對消息簽名的方式對交易數據進行記錄,將大量在邏輯上發生了的交易簡化成了主鏈上的兩筆交易。

1:原理

局限性

二級標題

二、Plasma

1:原理

現在我們都知道了狀態通道的局限性,而為了解決這個問題———— Plasma應運而生。其解決了將資產發送給任意目標人的問題,同時也能夠確保TPS的提升。事實上在開發者們研究Layer2解決方案的開始很長一段時間裡,Plasma一度被認為就是那“一個”。

要理解Plasma,首先要明白它並不是一種實際的技術,它更像是一種設計思想或者技術架構。

Plasma通常是一條鏈,它可以擁有與主鏈不同的共識機制,也可以擁有自己的礦工。但最重要的是Plasma鏈上會有一個叫做“Operator”的角色定期的根據子鏈上的狀態轉換,生成一棵默克爾樹,並將這棵默克爾樹的樹根哈希值提交給主鏈做驗證和記錄。關於為什麼默克爾樹和其樹根哈希值能夠用作狀態轉換的驗證,我們會在同樣使用了這一應用的Rollup中講到。

通過這樣的方式,無論在兩次提交期間,子鏈上發生了多少筆交易,子鏈只需要將交易執行造成的狀態信息提交到主鏈上即可。

以下是使用Plasma機制的簡單示意圖:

用戶想要進入Plasma鏈需要在以太坊主鏈上做資產的映射,而當其需要將Plasma鏈上的資產轉移或主鏈上時,需要經歷一段時間的挑戰期來供其他人使用「 欺詐證明」機制來確認資產轉移的有效性。

「 欺詐證明」意味著任何人在這段挑戰期(通常是7天或者更久)內,都可以通過默克爾樹校驗的方式來提交證明用戶資產的退出是不合法的。

但這帶來兩個問題:

(1)想要驗證這個提款的正確性需要有節點保存Layer2上的交易和狀態信息,因為Plasma只會提交其狀態轉移的結果,而想要提交欺詐證明必須有Layer2上的信息,這將大大提升驗證者這一角色的成本。

(2)是所謂的三、Rollup二級標題

三、Rollup

我們可以看到Plasma一個很重要的問題是他的“數據不可用”,主鏈只會收到Operator提交的狀態轉移結果,其只能期待有人存儲了鏈下的的交易和狀態信息,通過欺詐證明機制來確保子鏈的提交真實性,它在這個過程中只承擔了確認者的角色,其安全級別是較差的。

1.具體理解“數據不可用”

以太坊將其鏈上發生的所有數據都公開,所有人都可以查詢。但Plasma不會提交這些交易數據到主鏈上,而只提交執行結果,因此其效率上的提升是很高的,但是這樣做的代價是Plasma無法建立和以太坊主鏈同一級別的信任。

Rollup實際上可以算是原始主鏈處理方式和Plasma方式的折中,其會將數據提交給主鏈,但他會最大限度通過聰明的編碼方式壓縮這些數據,同時基於Rollup本身的特性適當刪除和縮減一部分數據,只要保證最終的提交能夠供任何人驗證即可。

數據可用性

數據可用性數據可用性”,它會將數據提交給主鏈,這大大加強了安全性。

2.原理

2.原理

(1) State Root:首先Rollup在主鏈上擁有一個(或者一系列相互關聯的)合約:

這個合約用來維護Rollup層中的狀態記錄,這個狀態記錄實際上是一棵默克爾樹的根節點存儲的哈希值,這個哈希值被稱為state root

而這顆默克爾樹的葉子節點是Rollup中的賬戶狀態信息。如果你不知道什麼是默克爾樹,以下是一個簡單的例子:

可以看到這是一顆二叉樹,在二叉樹的葉子節點上記錄著當前rollup層賬戶的狀態信息。

對於每兩個狀態信息(例如State 1/State 2),我們可以根據某種哈希公式計算出一個唯一的哈希值(eg: Hash(1,2) )來作為這兩個葉子節點的父親節點,依次一層一層往上類推,最終得到一個哈希值存儲在根節點中:

你不需要知道怎樣計算哈希值,你只需要記住幾件事情。

1 任意一個葉子結點的改變都會導致根節點的值變化(任何一個狀態的變化都會導致Root hash發生變化)

2 如果兩棵樹的根哈希值相同,那說明他們的葉子結點存儲的信息完全一致正文

正文

正文

其中key是賬戶地址,value則包含餘額/Nonce/合約代碼/存儲(對於合約賬戶)等狀態信息

當rollup上發生交易的時候,很顯然的,這些賬戶的狀態會發生改變,由此產生新的state root。

雖然這樣可以非常準確和及時的反饋Rollup上最新的狀態變化,但是如果每發生一筆交易就在主鏈更新一次state root,產生的成本反而會比將這些交易在Layer1上執行更高。

所以為了解決這個問題,rollup中產生的交易將被按批次打包匯總,同時根據這批交易全部執行完成後的狀態,會產生一個新的state root。無論是誰將交易打包提交給主鏈上的智能合約,他都需要計算這個新的state root,並將其和上一個state root以及交易數據一併提交。

正文

正文

3:疑惑

3:疑惑

看完以上的描述你可能會有一些問題,別擔心,我們會一步一步進行推演和解釋。

(1)如果提交全量交易數據,還是很難擴容吧?前文說的數據壓縮是解決這個問題的嘛?怎麼做的?

這兩種技術方案能夠做到擴容,核心都是交易的壓縮和打包。這是因為以太坊的區塊gas limit 是有上限的, 壓縮後的交易越小,一次能提交給主鏈的交易就越多。那麼如何做到這一點呢?

以下是Vitalik在其文章中描述的一種壓縮模式,作為例子幫我們理解

以太坊主鏈上一筆簡單的交易(比如發送ETH)通常消耗約110 字節。然而,在Rollup 上發送ETH 可以縮減到約12 字節。

達到這樣的壓縮效果,一方面是採用了更簡單高級編碼,而目前Ethereum 的RLP 在每個值的長度上都浪費了1 字節。另一方面,還有一些巧妙的壓縮技巧:

Nonce:在rollup 中可以完全省略nonce

Gasprice:我們可以允許用戶使用固定範圍的gasprices 進行支付,例如2 的16 次冪等

Gas:我們同樣也可以將gas 設置為2 的多次冪。另外,我們也可以在batch 層面設置gas 限制。

To:可以通過默克爾樹上的索引來標識地址

Value:我們可以用科學計數法存儲value。在大多數情況下,轉賬僅需1 ~ 3 有效位。

Signature:我們可以使用BLS 聚合簽名,將多個簽名整合為一個

這些壓縮技巧是rollup 擴容的關鍵,如果我們不對交易數據進行壓縮,rollup 或許只能在主鏈的基礎上的有大約10 倍的提升效率,但有了這些壓縮技巧,我們才能做到50倍100倍甚至更高的壓縮效率。

與此同時,為了節省gas,這些被壓縮過的交易數據會被放入calldata參數中存儲。著名的EIP-4488,提出calldata中每一字節數據gas消耗降低,就是為了進一步優化一筆主鏈交易能夠承載的roll層交易數據量。對於具體的壓縮效果,我們會在下面對於兩種不同的ZK-Rollup進行對比時展示簡單的數據。

(2)怎麼來驗證提交的可供驗證的信息是正確的?

既然最終的狀態轉換確認(也代表著交易的確認)由state root的更新決定,但是目前看起來Rollup上的提交者可以隨意提交他想要的交易數據和state root,那麼怎麼來驗證他提交的這些信息是正確的呢?

對於這一問題,大體上有兩種解決方案,而根據解決方案的不同,rollup也被分成了兩類:

4:Optimistic Rollup

正和它的名字一樣,這種解決方案選擇樂觀的相信提交者提交的batch是正確的,除非有人通過一個欺詐證明來證明提交者是其實是一個壞蛋,他提交了一個錯誤的batch。

(1)以下是一個欺詐證明構建的簡單例子(再次感謝Vitalik):

1.提交者提交的batch

1.提交者提交的batch

2.上一個state root代表的默克爾樹(實際上代表了真實的賬戶狀態信息)的一部分,根據這一部分能夠構建完整的默克爾樹

  • 基於第二部分構建的默克爾樹,我們模擬執行batch中提交的交易,從而得到了新的賬戶狀態,得到新的默克爾樹,得到新的state root。

  • 將上一步得到的state root和batch中的state root進行比對從而驗證batch中的是否正確

(2)驗證過程

我們從邏輯上梳理了Optimstic確保state root真實性的過程,實際上,為了確保能夠威懾提交者不作惡,提交者往往需要質押資金,當他的提交被驗證為錯誤時,一部分質押資金將會被扣除作為懲罰。同時,提交了相應欺詐證明的驗證者在某些解決方案中會得到被扣除的資金,以此來激勵監測和提交欺詐證明的行為。

(1)Zk-rollup的核心

5:ZK-Rollup

(1)Zk-rollup的核心

另一類解決方案是ZK Rollup,與OR(Optimistic Rollup)不同,ZK Rollup做了這樣的根本假設:

有效性證明

有效性證明有效性證明”,他可以直接用來被驗證所提交的batch是正確的。這個證明被提交到Rollup合約之後,任何人都可以使用它來驗證Rollup層中特定批次的交易,而,這意味著rollup不再需要在提交後再等待7-14天來做驗證。

(2)有效性證明和欺詐證明的區別

那麼如何通俗的理解ZK-Rollup這樣的“有效性證明”和Plasma/Optimsitic Rollup使用的“欺詐性證明”之間的區別呢?

首先這三種方案都需要有人來做Layer2上交易的排序,執行和打包,我們姑且稱這個角色為“執行者”。

Plasma的執行者只會提交執行結果,秉承著其他人愛信不信的原則,你如果不信任我就需要發起挑戰,而發起挑戰需要你自己保存底層的交易數據。

OR也是一樣,但是執行者在提交的同時會把交易數據也放上來,同樣是愛信不信,你如果不信就自己根據這個交易數據去驗證就完了。

但ZK不一樣,ZK說我不想等你好幾天讓你來挑戰我,那多浪費時間啊,我趕著確認我的交易呢。於是ZK直接在提交的時候生成一個證明,把這個證明也放上去,在提交的同時完成驗證。

與此同時,Plasma/OR都需要通過質押的方式來確保執行者作惡是有損失的,而ZK不用,因為它不需要別人相信它,每次提交他都會自證清白。

除了這方面的區別外,另一個有意義的地方在於,ZK-SNARK可以讓我們在不提交全部交易數據的情況下證明這批交易的有效性,這對於Rollup來說是很重要的,在下面我們會解釋這一點。

(3)ZK-Rollup的實現邏輯

首先ZK-Rollup本質上還是一種Rollup解決方案,因此其仍然需要做以下兩件事情:

  • 生成新的state root

  • 生成新的state root

唯一不同的是驗證方式,ZK-Rollup不會等待驗證者發起欺詐證明流程,而是直接生成一個ZK-SNARK 證明並添加到Batch裡提交給主鏈rollup合約。

如圖示,提交的內容相比OR來說增加了一個ZK-Proof,同時驗證人這一角色被隱去了。

提交到rollup合約之後任何人都可以進行驗證,驗證成功後主鏈rollup合約會將State root更新為提交的最新數據。

(4)如何生成一個ZK-SNARK 有效性證明?

A 什麼是ZK-SNARK?

ZK-SNARK的全稱是“Zero-Knowledge Succinct Non-Interactive Argument of Knowledge.”

簡潔非交互零知識證明。我會盡量解釋其中每一部分的意思:

Succint(簡明):與實際證明的數據量相比,這種方法生成的證明要小很多。

例如我們要證明一系列交易確實存在並發生,所生成的證明數據量必須要小於這些交易本身的數據量。

Non-interactive (無交互): 在證明構建完成後,證明者只需要向驗證者發一次簡單的消息,而且通常情況下允許任何人無需許可的驗證。

這對於ZK-Rollup或者區塊鏈上的ZK應用是很重要的,因為有一些ZK證明需要證明人和驗證人之間多次交互(猜顏色問題是一個典型的例子),放在鏈上則意味著要發起多筆交易,這在成本上是不可容忍的。

Arguments:可以抵抗計算能力有限的證明者的攻擊

這一部分意味著生成證明使用的加密算法複雜度在現有的算力條件下,無法以可接受的時間和經濟成本被暴力破解。

of Knowledge:在不知曉要證明的是什麼的情況下不可能構建一個證明

這對於ZK-Rollup來說也是很重要的,因為我們不能允許有人能夠根據非交易數據創建一個ZK Proof 提交給主鏈合約。

最後,也是最重要的“Zero-Knowledge”:

零知識意味著在證明人向驗證者證明某個論斷(Statement)時,不透露任何有用的或和所證明的實體本身有關的任何信息。

B 一個最簡單的零知識證明例子是這樣的

Alice想向Bob證明知道某個保險箱的密碼,密碼是打開保險箱的唯一方式,但她不想告訴Bob保險箱的密碼,怎麼辦呢?

正好Bob知道保險箱裡有一副Bob前女友寫給他的情書,上面有Bob和前女友共同的指紋。

於是Alice背著Bob打開了保險箱,拿出了這封情書給了Bob。

由此證明了Alice知道保險箱的密碼,同時Alice並沒有告訴Bob密碼是什麼,成功!

C 如何為ZK-Rollup生成一個ZK-SNARK證明?

簡要的說,生成一個ZK-SNARK證明分為以下幾步:

確定問題在邏輯上的驗證規則(例如檢查balance,nonce是否符合要求等)

將邏輯上的驗證規則轉化為門電路Circle問題

將門電路Circle問題轉化為R1CS(rank-1 constraint system,一階約束系統)形式

這篇文章

這篇文章這篇文章

如果你覺得這一部分的複雜程度超過了之前的每一部分,你是對的。同樣覺得複雜的還有目前的ZK-Rollup解決方案提供商,這也是為什麼目前ZK-Rollup研發進度和實際應用要比Optimstic Rollup慢的原因之一。如果你不是數學/密碼學專家,或者不是Matter Labs的開發者,你只需要知道以下幾件事情:

  • 生成一個ZK-SNARK證明比驗證一棵默克爾樹需要花費的算力和時間成本都要高很多

  • 並不是隨便一種語言,編譯環境,虛擬機,指令集都能夠無縫支持完成以上提到的過程,需要做額外的適配。

對於第一點,這是各大ZK解決方案提供商目前在努力的方向。首先是時間成本,如果生成一個可用的ZK-Proof需要一個小時,那麼間接的用戶提款的時間也會變長。而計算成本包括兩部分,一部分是生成的ZK-Proof的數據量,另一部分是驗證這個Proof所需要花費的算力。這兩部分越大,在以太坊上需要消耗的Gas就越多,進而影響到ZK-Rollup的優化表現。

對於第二點,這是當前限制ZK-Rollup發展的一大原因。在EVM設計之初,開發者們完全沒有想到之後會用到ZK技術。因此為EVM操作生成可用的零知識證明是幾乎不可能的,由此催生了ZK-EVM的需求。

D 為什麼兼容EVM對於ZK來說如此困難?

打開DeFillama,你會發現TVL排名前幾的Layer2解決方案清一色的都是OR,這是因為這些OR解決方案都已經有了自己的網絡,這些網絡都做到了EVM兼容,開發者可以無縫的將以太坊上的智能合約移植到他們的網絡上,用戶也可以在其網絡上做到swap,抵押,提供流動性等操作。

而ZK-Rollup目前還很難做到這一點,現有的很多解決方案只能夠支持簡單的支付和swap場景。

為什麼如此呢,首先我們要明確一點,在Layer 1 上,已部署智能合約的字節碼都存儲在以太坊storage(存儲項)內。然後交易將在點對點網絡中傳播,對於每一筆交易,每個全節點需要加載對應的字節碼並在EVM 上執行以獲得相同的狀態(交易將作為輸入數據)。

而在Layer 2 上,智能合約的字節碼雖然同樣存儲在存儲項內,用戶的操作方式也相同。但是其交易將在鏈下發送至一個中心化的zkEVM 節點,同時,zkEVM 不單需要執行字節碼,還必須生成一個Proof來表明交易達成後狀態已正確更新。最後,Layer 1 合約才能驗證該證明並更新狀態,而這時layer2上不需要重新執行交易。

也就是說在zk-Rollup上執行交易是完全不同的邏輯和路徑,與此同時zkEVM還有在執行交易的同時適配生成zk電路證明,而現有的EVM生成ZK-SNARK證明有以下幾個問題:

  • 對ZK-SNARK所需要的部分橢圓曲線運算不支持

  • 和傳統虛擬機相比,EVM有許多獨特的操作碼,這些操作碼對電路設計來說很困難

  • EVM 基於256 位整數運行(就像大多數基於32~64 位整數運行的普通虛擬機那樣),零知識證明則“天然” 基於素域運行。

這些也只是在EVM中生成ZK Proof的部分問題,而OR雖然同樣需要構建虛擬機來執行EVM操作,但由於其只需要在執行交易的基礎上在完成交易打包等功能即可,所以構建起來要簡單的多。對於ZK-Rollup,除了在兼容EVM的同時生成ZK-Proof存在難度之外,在Layer1上驗證這個證明也並不容易。

如果你想了解更多關於ZK-EVM難度的更多信息,可以看這篇文章:https://hackmd.io/@yezhang/S1_KMMbGt

看完以上內容,不可否認的是zk-Rollup的實現有很高的技術難度,那為什麼我們不直接使用更“簡單的”的Optimistic Rollup技術呢?

現在讓我們對這兩種Rollup技術做一個簡單的對比。

6:Optimstic VS ZK

來源

來源

來源

感謝@W3.Hitchhiker 團隊的貢獻!

圖上我們可以看到ZK方案要比OR方案的效率更高,為什麼呢?

對於一個Rollup方案來說,最重要的是在一筆以太坊交易中能夠攜帶多少Layer2上交易的數據,而這和兩個參數有關:

  • Rollup壓縮的一筆交易的Gas消耗

  • 以太坊區塊的max gas limit

其中Rollup可以解決的是第一點,雖然ZK-Rollup證明的存儲和驗證需要消耗一定的存儲空間和gas(一個可信的數據是在500K 左右)。但是由於在交易壓縮上做的更好,而交易數據的存儲消耗是Gas消耗的絕大部分,所以ZK-Rollup要比OR效率優化表現更好。

另外提一句,你可能注意到表中ZKPort的TPS和交易成本優化最好,這主要由於其使用的Validium本質上是一種將欺詐證明替換為ZK Proof的Plasma 方案,它不會提交交易數據,其效率完全是由Plasma鏈的處理效率決定的,但是安全性上同樣面臨著數據不可用的問題。

上面的計算假設gas price為30 Gwei,而我們都知道以太坊活動大幅上升時,gas price會達到什麼樣的水平。屆時Rollup尤其是ZK方案的成本優化效果會更加明顯。

(2)時間成本

我們之前說到過,因為欺詐證明機制,在Optimtisc Rollup上提款需要7-14天的提交期以供其他人來證偽潛在的作惡行為。

當然我們可以通過一些獨立於Rollup機製本身的行為來減少提款期,類似Boba Network等Optimstic Rollup解決方案提出的流動性池機制。

讓我們假設這樣一個場景:

Alice是OR用戶,在L2上擁有5ETH的資產。

在L1上又一個流動性池B,轉為ALice這樣的OR用戶提供流動性。

現在Alice想從OR上取回所有資產,現在他和B做了一筆交易:

Alice可以從Bob這裡直接拿走5ETH,同時支付一定的手續費

7天后Alice的資產被解鎖,這時Alice拿走的5ETH回到池子裡。

這對於流動性池來說有一定的風險,因此他可以通過監測OR合約,獲取不誠實提交的罰金來對沖風險,同時收取的手續費也是降低風險的儲備。

但是這種方式不適用於NFT,因為NFT不可分割,而且流動性池無法簡單的複制一個NFT給用戶。

而ZK-Rollup並不存在這一問題,提交者在提交時必須自證清白,提供可供驗證的ZK-SNARK證明,目前的ZK-SNARK證明生成時間已經可以達到幾分鐘。用戶只需要等待下一個batch提交並被驗證即可。

時間成本是OR的硬傷,也是ZK-Rollup的顯著優勢之一。

(3)可適配性

Optimsitic和ZK 都面臨著需要兼容適配複雜EVM合約調用操作的問題,但顯然Optimstic實現起來更容易。

包括Arbiturm,Optimsim在內的OR解決方案都擁有EVM兼容的虛擬機,允許其能夠處理在以太坊主鏈上發生的所有事務。一些OG級別的DeFi協議如Uniswap/Synthetix/Curve等也都已經在OR 網絡上部署。

(4)安全性

(4)安全性

這個問題的答案是顯而易見的,OR 的安全性來自於經濟學。為了能夠良好的運轉,OR必須設計合理的激勵機制驅使一批主鏈上的驗證人隨時監測提交者,並準備提交欺詐證明。而對於提交者,其也需要通過質押等方式確保節點作惡會付出相應的代價。

而ZK的安全性來自於數學或者密碼學,正如區塊鏈中建立信任的一大基礎:代碼不會作惡一樣。數學和密碼學提供的保障要遠比樂觀的相信人性不會作惡來的穩。

當然,當前的Rollup機製本身也存在一定的安全問題,雖然rollup將數據提交到主鏈解決了數據可用性問題。但是我們還沒有討論過到底誰來負責交易的處理,排序,壓縮,打包和提交。當前一些主流解決方案,如Arbitrum、Optimism 和StarkNet,使用一個叫sequencer的角色, 是它們自己運行的單個節點。這種方式帶來的結果是高度的中心化。

我們知道去中心化是一切安全的前提,這種sequencer模式好處在於效率高,在rollup還在摸索階段時可以進行快速的迭代,這些解決方案也聲明了要在未來逐步進行sequencer的去中心化過程。例如使用PoS或dPoS方式進行sequencer節點的選舉等,像Metis這樣新的解決方案已經進行了一些探索。

(5)總結

讓我們根據一個表格來具像化上面的討論:

總體而言,OR在現階段是更成熟的解決方案,事實上也是如此,目前Optimstic和Arbiturm的產品已經可供以太坊開發人員使用。但是由於使用欺詐證明機制,其提款時間和安全性目前來看值得商榷,同時其成本優化相比ZK也略遜一籌。

而ZK Rollup的弱點基本都屬於技術問題,隨著大量優秀的開發人員投入到相關研究,包括Vitalik在內的大多數人都認同ZK Rollup在未來會是更優秀的擴容方案。

7:Rollup是完美的嗎?

經過以上對於三類Layer2方案的闡述,相信你已經對他們有了一定的認知。事實上文章撰寫的順序也是開發者們對於Layer2擴容方案研究的順序,往往是發現某一種解決方案存在的問題之後,另一種更好的解決方案被提出用來解決相關問題。不僅在加密研究領域如此,這一流程可以被推及到所有工程類的問題上:

提出想法,測試,迭代,優化,直到找到最可行的解決方案。

現在看上去Rollup就是我們想找的那個答案,他解決了普適性的問題,解決了數據可用性的問題,同時在安全性和效率上看起來也不錯。那麼,它是完美無缺的那一個嗎?

答案是否定的,任何方案都不能做到完美無缺,Rollup同樣存在著許多問題,即使是看上去更好的ZK-rollup,也無法避免它們。

(1)效率優化存在天花板:

當我們說到rollup和plasma的主要區別時,我們談到為了保證數據可用性。 rollup需要將交易數據提交給主鏈,這是rollup方案戰勝plasma的主要原因。

但我們要看到另一方面,交易上鍊意味著rollup仍會收到以太坊主鏈容量的限制:

簡單算一筆賬:

當前以太坊區塊max gas limit:12.5M gas

每字節存儲在鏈上的數據成本:16 gas

每個塊的最大字節數:~781,000 bytes (12500000/16)

Rollup進行一次ETH 轉賬所需的數據量:12 bytes(可見上節gas成本)

每個區塊能承載的交易:~65,000(781,000 bytes/ 12 bytes)

以太坊的平均出塊時間:13 秒

TPS:~5000(65,000 tx/13 s)

在這裡我們做了很多的假設,例如我們假設所有交易都是簡單的ETH轉賬。而實際的交易會包含很多的複雜合約調用,消耗的gas要更高。而且對於ZK-Rollup 我們還需要算上驗證ZK-Proof的成本(一半在500K gas左右) 。

即使如此Rollup所能達到的TPS也只有5000左右,我們也在上面看到使用Plasma機制帶來的直接效率優化要比Rollup高很多。

以太坊基金會也很清楚這個問題,目前它們主推的方案是分片+rollup,這將使得rollup帶來的TPS提升再上一個數量級。

(2)流動性的割裂:

在當前多鍊格局的影響下,本身的流動性割裂情況已經日趨嚴重。

而由於目前多種技術方案,多家解決方案提供上的存在,未來的rollup網絡的數量只會不斷增長,由此帶來了更嚴重的流動性割裂情況。

當前以太坊及其layer2網絡TVL一覽

好消息是跨鏈通信可以解決這一問題,代表性的事件是Synthetix已經在著手將其在以太坊主鍊和Optimism上的債務池進行合併。如果這一過程順利且絲滑的完成,相信會對主鍊和子鏈上的流動性合併趨勢有一定的推進。

畢竟合成資產項目的債務池模型遠比目前更常見的流動性池模型複雜,可以預見Uniswap等主流DeFi項目延續這一進程。

(3)通信難題和技術障礙帶來的可組合性降低:

上一個問題中我們談到了通信問題使得流動性發生了割裂,這一現象同樣適用於主鏈dapp和子鏈dapp之間的交互,在以太坊上構建的每個新協議都像樂高積木一樣,其他協議可以輕鬆地在其上構建,這也是DeFi 發展迅速的原因之一。

如果無法解決通信問題,那麼子鏈上的dapp需要重新建立自己的生態,這就造成了更大的資源浪費。不僅是子鍊和主鏈之間,子鍊和子鏈之間也需要構建通信機制。

Again,一些優秀的開發者也正在解決這方面的問題,讓我們希望他們能夠簡化這些操作和流程。畢竟Layer1本身的操作已經夠繁瑣了,如果再加上layer2的複雜度,這將使Web3世界的門檻更高。

結語

結語

結語

全文寫完已經超過一萬字,遠遠超出了我的預期。以太坊的擴容本身是一個很宏大,很複雜的主題。而本文中只涉及到了Layer2解決方案的一部分。 Layer1的擴容解決方案(分片),以及其他Layer2方案如Side Chain,Validium 等都沒有提及。事實上以太坊的擴容並不是某一個單一方案能夠一勞永逸解決的。很多解決方案提供商也都在多條路徑上進行著探索,像Polygon這樣的公司更是投資了一大批不同類型的Layer2方案。

同時文中很多東西限於篇幅原因還有待挖掘,比如Layer2和Layer1之間的提交需要的通信支持是怎麼樣的。欺詐證明/有效性證明在Layer1上都是如何具體實現的,各家ZK/OR實現方案之間的具體區別等。理解這些事情對於想要深入了解Layer2尤其是Rollup擴容的研究者來說都是相當重要的。文章中的某些概念為了便於理解和梳理,我們做了比較籠統的概括,例如OR/ZK在交易數據壓縮方面解決方案有很大的不同等,文中使用的vitalik的例子更偏向ZK的解決方案。在寫作的過程當中我們也參考了一些優秀的Layer2內容,在文中和文末我們都做了標記,我們也希望有更多更優秀的內容能夠出現,幫助大家進一步建立相關的認知。

最後,單就我們介紹的Rollup兩種方案來看,Optimstic Rollup目前已經佔據市場先機參考文獻:參考文獻:

參考文獻:

1.An Incomplete Guide to Rollups (Vitalik)

2.W3hitchhiker 團隊對四種Layer2解決方案的成本對比

3.Scorll Tech 對於zkEVM實現的解讀

先知实验室
作者文库