作者:Luka,SeerLabs
無論你是不是區塊鏈技術方面的專家,只要你待在Crypto的世界里夠久。以太坊擴容,layer2,Rollup這些詞語對于你來說都不會陌生。很多人都對這些概念中的一個或多個有所了解,但是他們之間的關系到底是怎樣的?我們為什么需要這些技術?他們想要解決什么樣的問題?
如果你想要知道以上問題的答案,那希望這篇文章會對你有所幫助:
本文中的所有內容都是邏輯上的梳理,不會涉及密碼學/計算機科學方面的知識,所以相信只要你對以太坊本身熟悉,基本都可以理解。
自從CryotoKitty造成以太坊鏈上擁堵的那天開始,以太坊開發者們就在不停的探索提高以太坊吞吐量的方案。
從原理上可以分為兩類:
是對以太坊區塊本身進行改造,我們姑且稱之為Layer1方案,這里的主要解決方案是分片。
是改變我們使用以太坊的方式,將交易的執行和處理放在鏈下,以太坊本身只用來校驗其交易有效性,提供安全性。這就是我們經常聽到的Layer2。
Layer2的核心思想是將大批實際發生的交易放在鏈下執行和計算,再將其通過以太坊上極少量的交易進行交易最終有效性的驗證。無論是StateChannel,Plasma還是Rollup,實際上都遵循了這一原則。
現在談起Layer2,很多人第一反應都是將其與Optimistic/ZKRollup掛鉤,但在這里我們先簡單介紹一下狀態通道和Plasma,這有助于我們理解為何Rollup最終勝出,成為當前我們談論最多的Layer2解決方案:
一.狀態通道
以下是一個狀態通道的最原始結構:
狀態通道是一種已經存在很久的區塊鏈擴展方案,他最出名的應用是比特幣的閃電網絡。
相比描述他的原理,一個例子更能夠說清楚什么是狀態通道:
你很喜歡樓下的一家理發店,每次去理發店的時候Tony老師都會在你的耳邊一直讓你辦卡。
有一天你終于決定了,辦卡就辦卡吧,反正我以后還會來。于是你向理發店轉賬一千元辦了一張卡。
以后每次去理發,你都不需要再向理發店轉賬,取而代之的是你的卡里的余額會被扣除,同時每次理發你都和理發店完成了一次實際上的交易。
過了一個月,你要搬家了,可是你卡里的錢還沒用完。于是你向理發店申請退卡,理發店的Tony老師退給了你200元。
在這一個月的時間里,你在理發店消費了十幾次,但你和理發店實際上只互相轉賬了兩次。
將這個過程放在區塊鏈上,你買卡的過程實際上是將錢存進了某個智能合約,同時開啟了一個你與理發店間的狀態通道。你退卡的過程關閉了你與理發店之間的“狀態通道”。你和理發店之間的互相轉賬相當于在以太坊主鏈上的兩筆交易。
設想一下你沒有辦卡,那每次理完頭你都需要給理發店轉一次帳。通過這個例子我們發現,通過狀態通道,只有第一步和最后一步需要我們在區塊鏈上進行交易,在這些步驟之間,你和理發店可以向對方發送無限數量的簽名消息,指示付款。在這種情況下,以太坊區塊鏈僅用作結算層來處理一次性付款的最終交易,這大大減輕了底層區塊鏈的負擔。
應用場景
狀態通道在某些簡單場景如流支付中能夠發揮很大的作用,其通過在鏈下對消息簽名的方式對交易數據進行記錄,將大量在邏輯上發生了的交易簡化成了主鏈上的兩筆交易。
狀態通道因為其成本較低,很適合一些微支付的場景,比如用ETH或者BTC買早餐咖啡等。
局限性
但同時,狀態通道需要資金的發送方和接受方都進入這個通道來,而為了維護狀態通道,支持比流支付更復雜的操作,大筆的資金需要被鎖定。因此開發者們很快意識到狀態通道無法作為可選的擴容方案之一。
二:Plasma
原理
現在我們都知道了狀態通道的局限性,而為了解決這個問題————Plasma應運而生。其解決了將資產發送給任意目標人的問題,同時也能夠確保TPS的提升。事實上在開發者們研究Layer2解決方案的開始很長一段時間里,Plasma一度被認為就是那“一個”。
要理解Plasma,首先要明白它并不是一種實際的技術,它更像是一種設計思想或者技術架構。
Plasma通常是一條鏈,它可以擁有與主鏈不同的共識機制,也可以擁有自己的礦工。但最重要的是Plasma鏈上會有一個叫做“Operator”的角色定期的根據子鏈上的狀態轉換,生成一棵默克爾樹,并將這棵默克爾樹的樹根哈希值提交給主鏈做驗證和記錄。關于為什么默克爾樹和其樹根哈希值能夠用作狀態轉換的驗證,我們會在同樣使用了這一應用的Rollup中講到。
以太坊自合并以來ETH銷毀量逾76萬枚:金色財經報道,據ultrasound.money數據顯示,以太坊自合并以來,ETH銷毀量已逾76萬枚,當前銷毀量為762,895.83枚。[2023/6/12 21:30:45]
通過這樣的方式,無論在兩次提交期間,子鏈上發生了多少筆交易,子鏈只需要將交易執行造成的狀態信息提交到主鏈上即可。
以下是使用Plasma機制的簡單示意圖:
用戶想要進入Plasma鏈需要在以太坊主鏈上做資產的映射,而當其需要將Plasma鏈上的資產轉移或主鏈上時,需要經歷一段時間的挑戰期來供其他人使用「欺詐證明」機制來確認資產轉移的有效性。
「欺詐證明」意味著任何人在這段挑戰期內,都可以通過默克爾樹校驗的方式來提交證明用戶資產的退出是不合法的。
但這帶來兩個問題:
想要驗證這個提款的正確性需要有節點保存Layer2上的交易和狀態信息,因為Plasma只會提交其狀態轉移的結果,而想要提交欺詐證明必須有Layer2上的信息,這將大大提升驗證者這一角色的成本。
是所謂的「數據不可用」,他的意思是Plasma不會將其鏈上發生的交易數據發給主鏈進行存儲,主鏈的節點無法獲取到這些交易數據,無法通過主鏈本身的安全性為其做驗證。當然有些解決方案會把這些數據提交到中心化存儲或者IPFS上,但這對主鏈來說沒有任何意義,因為用戶使用Layer2的基礎是信任主鏈本身的安全性。
三:Rollup
我們可以看到Plasma一個很重要的問題是他的“數據不可用”,主鏈只會收到Operator提交的狀態轉移結果,其只能期待有人存儲了鏈下的的交易和狀態信息,通過欺詐證明機制來確保子鏈的提交真實性,它在這個過程中只承擔了確認者的角色,其安全級別是較差的。
1、具體理解“數據不可用”
以太坊將其鏈上發生的所有數據都公開,所有人都可以查詢。但Plasma不會提交這些交易數據到主鏈上,而只提交執行結果,因此其效率上的提升是很高的,但是這樣做的代價是Plasma無法建立和以太坊主鏈同一級別的信任。
Rollup實際上可以算是原始主鏈處理方式和Plasma方式的折中,其會將數據提交給主鏈,但他會最大限度通過聰明的編碼方式壓縮這些數據,同時基于Rollup本身的特性適當刪除和縮減一部分數據,只要保證最終的提交能夠供任何人驗證即可。
交易數據上鏈后,任何人都可以根據這個數據來校驗Rollup提交的結果是否正確。因此,Rollup的安全性要比Plasma高。
總結一下,Rollup的核心優勢是所謂的“數據可用性”,它會將數據提交給主鏈,這大大加強了安全性。
那么究竟Rollup是如何實現的呢?
2、原理
(1)StateRoot:首先Rollup在主鏈上擁有一個(或者一系列相互關聯的)合約:
這個合約用來維護Rollup層中的狀態記錄,這個狀態記錄實際上是一棵默克爾樹的根節點存儲的哈希值,這個哈希值被稱為stateroot。
而這顆默克爾樹的葉子節點是Rollup中的賬戶狀態信息。如果你不知道什么是默克爾樹,以下是一個簡單的例子:
可以看到這是一顆二叉樹,在二叉樹的葉子節點上記錄著當前rollup層賬戶的狀態信息。
對于每兩個狀態信息(例如State1/State2),我們可以根據某種哈希公式計算出一個唯一的哈希值(eg:Hash(1,2))來作為這兩個葉子節點的父親節點,依次一層一層往上類推,最終得到一個哈希值存儲在根節點中:
你不需要知道怎樣計算哈希值,你只需要記住幾件事情。
1任意一個葉子結點的改變都會導致根節點的值變化
2如果兩棵樹的根哈希值相同,那說明他們的葉子結點存儲的信息完全一致
3根據根節點的哈希值和指向某一個狀態信息的路徑,我們可以確認某一個狀態信息存在于這顆哈希樹中。
Batch:通過stateroot我們可以得出一個賬戶狀態的key-valuemap:
其中key是賬戶地址,value則包含余額/Nonce/合約代碼/存儲等狀態信息
當rollup上發生交易的時候,很顯然的,這些賬戶的狀態會發生改變,由此產生新的stateroot。
雖然這樣可以非常準確和及時的反饋Rollup上最新的狀態變化,但是如果每發生一筆交易就在主鏈更新一次stateroot,產生的成本反而會比將這些交易在Layer1上執行更高。
ConsenSys Mesh選擇Codefi Staking運營其在以太坊上的驗證器:據官方消息,ConsenSys Mesh選擇了ConsenSys的機構級質押服務Codefi Staking來運營其在以太坊上的驗證器。
ConsenSys于2020年12月推出Codefi Staking,作為一個面向交易所、托管方、基金、錢包和其他機構的以太坊質押即服務平臺。Codefi Staking有助于消除質押ETH的技術和操作風險,幫助機構實現回報最大化。如今,Codefi Staking運行著超過8000個以太坊驗證器節點,擁有99.95%的正常運行時間記錄。
Codefi Staking將在其多區域、多云和多客戶端平臺上分發MESH的驗證器。在與Codefi Staking合作時,MESH將保留對其ETH的托管和控制權。[2022/6/1 3:56:48]
所以為了解決這個問題,rollup中產生的交易將被按批次打包匯總,同時根據這批交易全部執行完成后的狀態,會產生一個新的stateroot。無論是誰將交易打包提交給主鏈上的智能合約,他都需要計算這個新的stateroot,并將其和上一個stateroot以及交易數據一并提交。
這一部分的打包被稱為一個”batch”,提交者將batch提交給Rollupcontract之后,主鏈會去驗證新的stateroot是否正確,如果通過驗證,則將stateroot更新為最新提交的stateroot,并最終完成一次rollup內的狀態轉移確認。
Rollup的實質:以下是一個簡化版本的OptimsticRollup流程,可以看到和Plasma的最大的區別其實在于新增了交易數據的提交。
所以,Rollup的實質是將一大筆實際產生的交易匯總成一筆主鏈上的交易,這些交易由Rollup鏈來執行和計算,但會將數據提交給主鏈,同時由主鏈扮演一個“最高法院法官”的角色最終確認這些交易。由此我們利用了主鏈的共識和安全性,同時提升了實際上的交易效率,降低了交易成本。
3、疑惑
看完以上的描述你可能會有一些問題,別擔心,我們會一步一步進行推演和解釋。
如果提交全量交易數據,還是很難擴容吧?前文說的數據壓縮是解決這個問題的嘛?怎么做的?
這兩種技術方案能夠做到擴容,核心都是交易的壓縮和打包。這是因為以太坊的區塊gaslimit是有上限的,壓縮后的交易越小,一次能提交給主鏈的交易就越多。那么如何做到這一點呢?
以下是Vitalik在其文章中描述的一種壓縮模式,作為例子幫我們理解
以太坊主鏈上一筆簡單的交易通常消耗約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進行對比時展示簡單的數據。
怎么來驗證提交的可供驗證的信息是正確的?
既然最終的狀態轉換確認由stateroot的更新決定,但是目前看起來Rollup上的提交者可以隨意提交他想要的交易數據和stateroot,那么怎么來驗證他提交的這些信息是正確的呢?
對于這一問題,大體上有兩種解決方案,而根據解決方案的不同,rollup也被分成了兩類:
以太坊L2網絡總鎖倉量為66.8億美元:金色財經報道,L2BEAT數據顯示,截至3月28日,以太坊Layer2上總鎖倉量為66.8億美元。其中鎖倉量最高的為擴容方案Arbitrum,約35.5億美元,占比53.15%;其次是dYdX,鎖倉量為9.72億美元,占比14.55%;第三為MetisAndromeda,鎖倉量為6.55億美元,占比9.81%。[2022/3/28 14:21:14]
4:OptimisticRollup
正和它的名字一樣,這種解決方案選擇樂觀的相信提交者提交的batch是正確的,除非有人通過一個欺詐證明來證明提交者是其實是一個壞蛋,他提交了一個錯誤的batch。
以下是一個欺詐證明構建的簡單例子:
提交一個欺詐證明來證明某個提交的batch是錯誤的,需要下圖的綠色部分包括的信息:
1.提交者提交的batch
2.上一個stateroot代表的默克爾樹的一部分,根據這一部分能夠構建完整的默克爾樹
基于第二部分構建的默克爾樹,我們模擬執行batch中提交的交易,從而得到了新的賬戶狀態,得到新的默克爾樹,得到新的stateroot。
將上一步得到的stateroot和batch中的stateroot進行比對從而驗證batch中的是否正確
驗證過程
我們從邏輯上梳理了Optimstic確保stateroot真實性的過程,實際上,為了確保能夠威懾提交者不作惡,提交者往往需要質押資金,當他的提交被驗證為錯誤時,一部分質押資金將會被扣除作為懲罰。同時,提交了相應欺詐證明的驗證者在某些解決方案中會得到被扣除的資金,以此來激勵監測和提交欺詐證明的行為。
如果我們將OR和Plasma進行比對,我們會發現一些相似性,例如他們都使用了欺詐證明機制,需要有一個驗證者的角色來監測OR給主鏈的提交。但由于OR同時向主鏈提交了交易數據,所以OR上的驗證者不需要在自己去保存記錄OR上的交易,作為對比,再將前文的簡單架構圖放在這里以供讀者對比:
5:ZK-Rollup
Zk-rollup的核心
另一類解決方案是ZKRollup,與OR不同,ZKRollup做了這樣的根本假設:
不相信提交者能主動提交正確的batch,或者說類似法律學中的“有罪推定”。提交者在提交batch時除了交易數據以及post/previousstateroot之外,還要攜帶一個ZK-SNARK證明。
ZK-SNARK本質上是一個“有效性證明”,他可以直接用來被驗證所提交的batch是正確的。這個證明被提交到Rollup合約之后,任何人都可以使用它來驗證Rollup層中特定批次的交易,而,這意味著rollup不再需要在提交后再等待7-14天來做驗證。
有效性證明和欺詐證明的區別
那么如何通俗的理解ZK-Rollup這樣的“有效性證明”和Plasma/OptimsiticRollup使用的“欺詐性證明”之間的區別呢?
首先這三種方案都需要有人來做Layer2上交易的排序,執行和打包,我們姑且稱這個角色為“執行者”。
Plasma的執行者只會提交執行結果,秉承著其他人愛信不信的原則,你如果不信任我就需要發起挑戰,而發起挑戰需要你自己保存底層的交易數據。
OR也是一樣,但是執行者在提交的同時會把交易數據也放上來,同樣是愛信不信,你如果不信就自己根據這個交易數據去驗證就完了。
但ZK不一樣,ZK說我不想等你好幾天讓你來挑戰我,那多浪費時間啊,我趕著確認我的交易呢。于是ZK直接在提交的時候生成一個證明,把這個證明也放上去,在提交的同時完成驗證。
與此同時,Plasma/OR都需要通過質押的方式來確保執行者作惡是有損失的,而ZK不用,因為它不需要別人相信它,每次提交他都會自證清白。
除了這方面的區別外,另一個有意義的地方在于,ZK-SNARK可以讓我們在不提交全部交易數據的情況下證明這批交易的有效性,這對于Rollup來說是很重要的,在下面我們會解釋這一點。
ZK-Rollup的實現邏輯
首先ZK-Rollup本質上還是一種Rollup解決方案,因此其仍然需要做以下兩件事情:
打包壓縮一個批次的交易數據
生成新的stateroot
以太坊未確認交易為193,394筆:金色財經消息,據OKLink數據顯示,以太坊未確認交易193,394筆,當前全網算力為652.90TH/s,全網難度為8.72P,當前持幣地址為62,498,209個,同比增加125,910個,24h鏈上交易量為2,481,514ETH,當前平均出塊時間為12s。[2021/9/10 23:16:22]
唯一不同的是驗證方式,ZK-Rollup不會等待驗證者發起欺詐證明流程,而是直接生成一個ZK-SNARK證明并添加到Batch里提交給主鏈rollup合約。
如圖示,提交的內容相比OR來說增加了一個ZK-Proof,同時驗證人這一角色被隱去了。
提交到rollup合約之后任何人都可以進行驗證,驗證成功后主鏈rollup合約會將Stateroot更新為提交的最新數據。
如何生成一個ZK-SNARK有效性證明?
A什么是ZK-SNARK?
ZK-SNARK的全稱是“Zero-KnowledgeSuccinctNon-InteractiveArgumentofKnowledge.”
簡潔非交互零知識證明。我會盡量解釋其中每一部分的意思:
Succint:與實際證明的數據量相比,這種方法生成的證明要小很多。
例如我們要證明一系列交易確實存在并發生,所生成的證明數據量必須要小于這些交易本身的數據量。
Non-interactive(無交互):在證明構建完成后,證明者只需要向驗證者發一次簡單的消息,而且通常情況下允許任何人無需許可的驗證。
這對于ZK-Rollup或者區塊鏈上的ZK應用是很重要的,因為有一些ZK證明需要證明人和驗證人之間多次交互(猜顏色問題是一個典型的例子),放在鏈上則意味著要發起多筆交易,這在成本上是不可容忍的。
Arguments:可以抵抗計算能力有限的證明者的攻擊。
這一部分意味著生成證明使用的加密算法復雜度在現有的算力條件下,無法以可接受的時間和經濟成本被暴力破解。
ofKnowledge:在不知曉要證明的是什么的情況下,不可能構建一個證明
這對于ZK-Rollup來說也是很重要的,因為我們不能允許有人能夠根據非交易數據創建一個ZKProof提交給主鏈合約。
最后,也是最重要的“Zero-Knowledge”:
零知識意味著在證明人向驗證者證明某個論斷時,不透露任何有用的或和所證明的實體本身有關的任何信息。
B一個最簡單的零知識證明例子是這樣的
Alice想向Bob證明知道某個保險箱的密碼,密碼是打開保險箱的唯一方式,但她不想告訴Bob保險箱的密碼,怎么辦呢?
正好Bob知道保險箱里有一副Bob前女友寫給他的情書,上面有Bob和前女友共同的指紋。
于是Alice背著Bob打開了保險箱,拿出了這封情書給了Bob。
由此證明了Alice知道保險箱的密碼,同時Alice并沒有告訴Bob密碼是什么,成功!
C如何為ZK-Rollup生成一個ZK-SNARK證明?
簡要的說,生成一個ZK-SNARK證明分為以下幾步:
確定問題在邏輯上的驗證規則
將邏輯上的驗證規則轉化為門電路Circle問題
將門電路Circle問題轉化為R1CS(rank-1constraintsystem,一階約束系統)形式
將R1CS轉化為QAP(QuadraticArithmeticProgram)?
經過以上轉換,我們就可以根據邏輯上的驗證規則得到一組可通過固定驗證方法驗證的ZK-SNARK證明。具體的轉換過程可以看這篇文章:
https://mp.weixin.qq.com/s/M1ZAXPSPqO8KpE3VyExwTw
如果你覺得這一部分的復雜程度超過了之前的每一部分,你是對的。同樣覺得復雜的還有目前的ZK-Rollup解決方案提供商,這也是為什么目前ZK-Rollup研發進度和實際應用要比OptimsticRollup慢的原因之一。如果你不是數學/密碼學專家,或者不是MatterLabs的開發者,你只需要知道以下幾件事情:
生成一個ZK-SNARK證明比驗證一棵默克爾樹需要花費的算力和時間成本都要高很多
以太坊擴容團隊計劃為以太坊式智能合約提供全面支持:以太坊擴容團隊FuelLabs計劃在2021年下半年為以太坊式智能合約提供全面支持。另外,Fuel還發布v1.5預覽頁面,將實現無托管原子交換、擴展消費者硬件和支持所有ERC20代幣,且無新穎的密碼學和協議代幣。另外,每秒交易量將可達到4300TPS,每筆交易的gas費用約為384Gwei。[2020/11/10 12:10:40]
并不是隨便一種語言,編譯環境,虛擬機,指令集都能夠無縫支持完成以上提到的過程,需要做額外的適配。
對于第一點,這是各大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場景。
為什么如此呢,首先我們要明確一點,在Layer1上,已部署智能合約的字節碼都存儲在以太坊storage內。然后交易將在點對點網絡中傳播,對于每一筆交易,每個全節點需要加載對應的字節碼并在EVM上執行以獲得相同的狀態。
而在Layer2上,智能合約的字節碼雖然同樣存儲在存儲項內,用戶的操作方式也相同。但是其交易將在鏈下發送至一個中心化的zkEVM節點,同時,zkEVM不單需要執行字節碼,還必須生成一個Proof來表明交易達成后狀態已正確更新。最后,Layer1合約才能驗證該證明并更新狀態,而這時layer2上不需要重新執行交易。
也就是說在zk-Rollup上執行交易是完全不同的邏輯和路徑,與此同時zkEVM還有在執行交易的同時適配生成zk電路證明,而現有的EVM生成ZK-SNARK證明有以下幾個問題:
對ZK-SNARK所需要的部分橢圓曲線運算不支持
和傳統虛擬機相比,EVM有許多獨特的操作碼,這些操作碼對電路設計來說很困難
EVM基于256位整數運行,零知識證明則“天然”基于素域運行。
這些也只是在EVM中生成ZKProof的部分問題,而OR雖然同樣需要構建虛擬機來執行EVM操作,但由于其只需要在執行交易的基礎上在完成交易打包等功能即可,所以構建起來要簡單的多。對于ZK-Rollup,除了在兼容EVM的同時生成ZK-Proof存在難度之外,在Layer1上驗證這個證明也并不容易。
如果你想了解更多關于ZK-EVM難度的更多信息,可以看這篇文章:https://hackmd.io/@yezhang/S1_KMMbGt
看完以上內容,不可否認的是zk-Rollup的實現有很高的技術難度,那為什么我們不直接使用更“簡單的”的OptimisticRollup技術呢?
現在讓我們對這兩種Rollup技術做一個簡單的對比。
6:OptimsticVSZK
(1)效率優化
以下是特定以太坊環境下,目前市場上幾種不同方案的費用和TPS對比:
來源:@W3.Hitchhiker團隊
圖上我們可以看到ZK方案要比OR方案的效率更高,為什么呢?
對于一個Rollup方案來說,最重要的是在一筆以太坊交易中能夠攜帶多少Layer2上交易的數據,而這和兩個參數有關:
Rollup壓縮的一筆交易的Gas消耗
以太坊區塊的maxgaslimit
其中Rollup可以解決的是第一點,雖然ZK-Rollup證明的存儲和驗證需要消耗一定的存儲空間和gas(一個可信的數據是在500K左右)。但是由于在交易壓縮上做的更好,而交易數據的存儲消耗是Gas消耗的絕大部分,所以ZK-Rollup要比OR效率優化表現更好。
另外提一句,你可能注意到表中ZKPort的TPS和交易成本優化最好,這主要由于其使用的Validium本質上是一種將欺詐證明替換為ZKProof的Plasma方案,它不會提交交易數據,其效率完全是由Plasma鏈的處理效率決定的,但是安全性上同樣面臨著數據不可用的問題。
上面的計算假設gasprice為30Gwei,而我們都知道以太坊活動大幅上升時,gasprice會達到什么樣的水平。屆時Rollup尤其是ZK方案的成本優化效果會更加明顯。
(2)時間成本
我們之前說到過,因為欺詐證明機制,在OptimtiscRollup上提款需要7-14天的提交期以供其他人來證偽潛在的作惡行為。
當然我們可以通過一些獨立于Rollup機制本身的行為來減少提款期,類似BobaNetwork等OptimsticRollup解決方案提出的流動性池機制。
讓我們假設這樣一個場景:
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網絡上部署。
而構造兼容EVM的ZK-SNARK證明難度很大,以至于目前為止都沒有能夠公開使用的ZK-Rollup解決方案。不過我們在最近有一些好消息,zkSync2.0公共測試網在二月底正式上線,這也是以太坊測試網上首個兼容EVM的ZKRollup。或許ZKRollup的正式大規模實際使用要比我們想象的要快一些。
(4)安全性
這個問題的答案是顯而易見的,OR的安全性來自于經濟學。為了能夠良好的運轉,OR必須設計合理的激勵機制驅使一批主鏈上的驗證人隨時監測提交者,并準備提交欺詐證明。而對于提交者,其也需要通過質押等方式確保節點作惡會付出相應的代價。
而ZK的安全性來自于數學或者密碼學,正如區塊鏈中建立信任的一大基礎:代碼不會作惡一樣。數學和密碼學提供的保障要遠比樂觀的相信人性不會作惡來的穩。
當然,當前的Rollup機制本身也存在一定的安全問題,雖然rollup將數據提交到主鏈解決了數據可用性問題。但是我們還沒有討論過到底誰來負責交易的處理,排序,壓縮,打包和提交。當前一些主流解決方案,如Arbitrum、Optimism和StarkNet,使用一個叫sequencer的角色,是它們自己運行的單個節點。這種方式帶來的結果是高度的中心化。
我們知道去中心化是一切安全的前提,這種sequencer模式好處在于效率高,在rollup還在摸索階段時可以進行快速的迭代,這些解決方案也聲明了要在未來逐步進行sequencer的去中心化過程。例如使用PoS或dPoS方式進行sequencer節點的選舉等,像Metis這樣新的解決方案已經進行了一些探索。
(5)總結
讓我們根據一個表格來具像化上面的討論:
總體而言,OR在現階段是更成熟的解決方案,事實上也是如此,目前Optimstic和Arbiturm的產品已經可供以太坊開發人員使用。但是由于使用欺詐證明機制,其提款時間和安全性目前來看值得商榷,同時其成本優化相比ZK也略遜一籌。
而ZKRollup的弱點基本都屬于技術問題,隨著大量優秀的開發人員投入到相關研究,包括Vitalik在內的大多數人都認同ZKRollup在未來會是更優秀的擴容方案。
7:Rollup是完美的嗎?
經過以上對于三類Layer2方案的闡述,相信你已經對他們有了一定的認知。事實上文章撰寫的順序也是開發者們對于Layer2擴容方案研究的順序,往往是發現某一種解決方案存在的問題之后,另一種更好的解決方案被提出用來解決相關問題。不僅在加密研究領域如此,這一流程可以被推及到所有工程類的問題上:
提出想法,測試,迭代,優化,直到找到最可行的解決方案。
現在看上去Rollup就是我們想找的那個答案,他解決了普適性的問題,解決了數據可用性的問題,同時在安全性和效率上看起來也不錯。那么,它是完美無缺的那一個嗎?
答案是否定的,任何方案都不能做到完美無缺,Rollup同樣存在著許多問題,即使是看上去更好的ZK-rollup,也無法避免它們。
(1)效率優化存在天花板:
當我們說到rollup和plasma的主要區別時,我們談到為了保證數據可用性。rollup需要將交易數據提交給主鏈,這是rollup方案戰勝plasma的主要原因。
但我們要看到另一方面,交易上鏈意味著rollup仍會收到以太坊主鏈容量的限制:
簡單算一筆賬:
當前以太坊區塊maxgaslimit:12.5Mgas
每字節存儲在鏈上的數據成本:16gas
每個塊的最大字節數:~781,000bytes(12500000/16)
Rollup進行一次ETH轉賬所需的數據量:12bytes
每個區塊能承載的交易:~65,000
以太坊的平均出塊時間:13秒
TPS:~5000
在這里我們做了很多的假設,例如我們假設所有交易都是簡單的ETH轉賬。而實際的交易會包含很多的復雜合約調用,消耗的gas要更高。而且對于ZK-Rollup我們還需要算上驗證ZK-Proof的成本(一半在500Kgas左右)。
即使如此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世界的門檻更高。
(4)中心化風險
我們在上文提到當前各類Rollup解決方案中,負責執行,排序,壓縮和打包交易的sequencer目前都是一個較為中心化的角色。Rollup若想進一步的提升安全性,必須要著手解決當然的中心化問題。
結語
全文寫完已經超過一萬字,遠遠超出了我的預期。以太坊的擴容本身是一個很宏大,很復雜的主題。而本文中只涉及到了Layer2解決方案的一部分。Layer1的擴容解決方案,以及其他Layer2方案如SideChain,Validium等都沒有提及。事實上以太坊的擴容并不是某一個單一方案能夠一勞永逸解決的。很多解決方案提供商也都在多條路徑上進行著探索,像Polygon這樣的公司更是投資了一大批不同類型的Layer2方案。
同時文中很多東西限于篇幅原因還有待挖掘,比如Layer2和Layer1之間的提交需要的通信支持是怎么樣的。欺詐證明/有效性證明在Layer1上都是如何具體實現的,各家ZK/OR實現方案之間的具體區別等。理解這些事情對于想要深入了解Layer2尤其是Rollup擴容的研究者來說都是相當重要的。文章中的某些概念為了便于理解和梳理,我們做了比較籠統的概括,例如OR/ZK在交易數據壓縮方面解決方案有很大的不同等,文中使用的vitalik的例子更偏向ZK的解決方案。在寫作的過程當中我們也參考了一些優秀的Layer2內容,在文中和文末我們都做了標記,我們也希望有更多更優秀的內容能夠出現,幫助大家進一步建立相關的認知。
最后,單就我們介紹的Rollup兩種方案來看,OptimsticRollup目前已經占據市場先機,上線可用產品的同時逐步吸引主流Dapp融入生態,不可否認相關開發者的偉大貢獻。但是從長遠來看ZKRollup+分片是我們更應該期待的未來。
鏈捕手消息,多鏈去中心化保險協議NeptuneMutual近日宣布開放公測。在未來的三周內,NeptuneMutual將逐步開放:購買參數保險單、提供穩定幣流動性、bond和抵押池、報告事件、領.
1900/1/1 0:00:00原作者:KunalGoel原標題:《GoldfinchFinance-Let''sGetReal》編譯:Beam.
1900/1/1 0:00:00作者:餅干,鏈捕手 為期15日的Gitcoin第13輪捐贈將于北京時間3月25日上午8點結束,參與本輪捐贈的項目數量目前已經達到830個,主獎金池的資金則從上一輪的100萬元提高到120萬美元.
1900/1/1 0:00:00原文標題:《GavinWood:波卡平行鏈可能超過100條,生態中可能還會出現第三條中繼鏈》撰文:TheDefiant?編譯:PolkaWorld?近日.
1900/1/1 0:00:00原文標題:《資本齊聚GameFi平臺MirrorWorld》作者:凱爾,?蜂巢Tech3月11日,GameFi平臺型項目MirrorWorld的一筆400萬美元融資吸引了十余家資本參投.
1900/1/1 0:00:00作者:Crescent/律動BlockBeats在我們的認知里,買賣行為通常為「一手交錢,一手交貨」,事件發生在某個具體的時間點。但是我們所有的交易行為,并不僅僅是錢貨兩訖這樣簡單.
1900/1/1 0:00:00