IOSG:我對L2的理解與思考

Layer2,相對於Layer1,在Layer1的基礎上提供更豐富功能,更好的用戶體驗。資金狀態確定性時長,安全性,可編程性是目前討論的焦點。

原文標題:《IOSG Weekly Brief | L2的理解與思考#88》;特別鳴謝本文原作者Trapdoor Tech 創始人Star.LI的支持!

Layer2是個大的話題。是否去中心化,是否安全,資金狀態確認時間是Layer2的主要的討論話題。最近有點時間,總結一下Layer2的理解和思考。

Layer2交互模型

Layer2,相對於Layer1,在Layer1的基礎上提供更豐富功能,更好的用戶體驗。抽像一下Layer2的邏輯以及交互模型如下:

除了Layer1的交易外(入金),其他Layer2的交易都在Layer2執行。為了Layer2在必要時恢復交易狀態,所有Layer2的交易數據需要安全存儲。簡單起見,也為了和Layer1保持一樣的安全性,所有Layer2的交易數據一般存儲在Layer1。這種交易數據的隨時可訪問,稱為”Data Availability”(數據可用性)。所有的Layer2交易都在Layer2執行,並同步到Layer1。如何證明Layer2同步的狀態正確,不同的layer2方案有不同的實現方法。

Layer2實現分類

從Layer2狀態同步方式,Layer2分為兩類:一類是側鏈實現(Side Chain),一類是Rollup。側鏈,就是通過不同於Layer1的共識進行Layer2狀態向Layer1的同步。僅從這一點,整個側鏈的安全性,就降低到Layer2的共識的安全性。 Rollup又分為兩種:一種是zkRollup,一種是Optimistic Rollup。所謂Optimistic Rollup,樂觀性Rollup,期望絕大多數情況下Rollup正確向Layer1同步狀態。同時,為了防止同步錯誤的狀態,提供了挑戰機制。樂觀預計挑戰的機率比較小。在需要挑戰的情況下,Layer1可以判斷正確狀態。 zkRollup是最直接的狀態同步方式,通過零知識證明技術,在向Layer1提交狀態的同時提供狀態變化的證明。 Layer實現分類如下:

zkRollup,按照採用的零知識證明協議又分為三類:1/ Groth16 2/ PLONK 3/ STARK。 Groth16協議需要針對每一個電路進行初始設置(Trusted Setup)。 PLONK協議在一定規模下的電路只需要一次初始設置。 STARK協議不需要初始設置。但是,相對另外兩種算法,STARK協議,證明數據量大,驗證時間長。相對來說,在Layer2的場景下,PLONK是目前廣泛使用的算法。

STARK協議和SNARK(Groth16/PLONK)協議比較(來源於Matter Labs的github鏈接):

https://github.com/matter-labs/awesome-zero-knowledge-proofshttps://github.com/matter-labs/awesome-zero-knowledge-proofs

總結一下,從安全性角度看,各種Layer2的排序如下:zkRollup,optimistic Rollup,側鏈。從提現的時間也印證了安全性,zkRollup的提現是分鐘級別,其他兩種方案,小時甚至是天級別。 zkSync是比較完善的zkRollup開源項目,感興趣的小伙伴可以查看之前的分析文章:

L2 – zkSync源代碼導讀

L2 – 深入理解zkSync電路

zkRollup,雖好,目前存在很大的缺陷:可編程性差。

細看zkRollup

相對其他Rollup方案,zkRollup方案多了zk證明系統。也就是說,在Layer2每個交易除了“執行”外,還需要生成證明,證明執行過程的正確性。熟悉零知識證明技術的小伙伴都知道,零知識證明的安全性在於”電路“的安全性。對於Layer2,每種交易的處理”固化“為電路,電路邏輯完全公開。對應於每種電路,存在唯一的驗證秘鑰。驗證秘鑰用在Layer1驗證狀態證明。通過驗證的狀態證明,符合固化電路的邏輯。

關鍵就在於Layer2交易的執行和固化電路語義是否一致。公開電路就是一種共識方式,供所有人查閱電路邏輯。簡單的說,為了實現zkRollup,需要實現Layer2執行對應的電路。事實上,電路的實現相對複雜,沒有高級語言,很多情況下都是手寫R1CS。進一步,為了利用zk證明系統,為了優化電路的實現,整個Layer2的狀態經常優化為電路友好結構(merkle樹)。所以,zkRollup的系統需要考慮電路的結構,從而約束了Layer2交易以及賬戶模型。細心的小伙伴可以發現,不管是zksync/zkswap/loopring,都只實現了特定交易場景。

反過來說,如果需要通過zkRollup支持EVM的交易執行,需要將EVM的交易抽象成電路友好的賬戶模型。這種抽象並不容易,再者,EVM的描述電路可以預見比較大。從零知識證明的性能看,這方面會限制整個zkRollup的性能。

再看看zkRollup方案在Layer1的gas消耗。整個zkRollup方案的主要gas消耗為三部分(withdraw不考慮在內):

  • Transaction Raw Data:在zksync中稱為pub data。為了保證data availability,所有的Layer2的交易都會以裸數據的形式提交到Layer1。

  • Layer2 Block管理:在Layer2提交區塊狀態時,Layer1維護著Layer2的區塊結構和狀態。

  • 驗證Layer2 Block狀態:在Layer2提交證明時,Layer1需要驗證狀態證明。

以一個區塊350筆交易,每個交易的Transaction Raw Data的大小為20字節為例,一個區塊處理的gas消耗:

雖然上述的數據不是精確值,但是足以說明交易原始數據在整個zkRollup方案中的gas消耗佔比是非常高的。從這個角度看,Layer2的有些項目選擇通過其他鏈下的方式存儲交易數據。

樂觀對比仲裁員?

Optimistic Rollup兼容EVM。也就是說,Layer2支持可編程性,並且在以太坊上的程序幾乎無縫遷移。為了保證鏈上的狀態正確,這兩種方案都提供一段時間內的挑戰機制。挑戰者提供挑戰的證據,Layer1抉擇正確與否。深入理解Optimism和Arbitrum可以查看之前的文章:

L2 – 深入理解Arbitrum

L2 – 深入理解OVM

Optimism採用OVM執行Layer2交易。取名OVM是為了區分Layer1的EVM。因為提交到Layer1的狀態需要檢驗正確性,Layer1需要“重放”Layer2的交易,也就是說,Layer1在有些情況下需要執行OVM交易的執行。 Optimistic Rollup最複雜的地方也在於此,用EVM模擬OVM,並執行Layer2的交易。可想而知,在Layer1的EVM模擬OVM的執行是比較繁瑣,消耗較大的操作。

Arbitrum也是採用挑戰機制。為了避免挑戰的gas費用低,Arbitrum引入了AVM:

相對於EVM,AVM是一個相對簡單的虛擬機。 Arbitrum在AVM虛擬機上模擬EVM執行環境。也就是說,所有的Layer2交易都是在AVM執行,交易的執行狀態可以用AVM狀態表示。在提交到Layer1的狀態有分歧時,挑戰雙方(Asserter和Challenger)先將狀態分割,找出“分歧點”。明確分歧點後,挑戰雙方都可提供執行環境,Layer1執行相關操作確定之前提交的狀態是否正確。在Layer1挑戰的是AVM的狀態,分歧點的AVM的指令執行。

簡單的說,為了省挑戰的gas費用,Arbitrum採用了精簡的AVM(非常方便狀態表示),通過快速分割,在鏈上只需要執行一個指令,判斷狀態是否執行正確。 Arbitrum介紹文檔中提到,整個挑戰需要大概500字節的數據和9w左右的gas。在AVM的基礎上,Arbitrum設計了mini語言和編譯器,模擬了EVM的執行環境,從而兼容EVM。

總結

Layer2,相對於Layer1,在Layer1的基礎上提供更豐富功能,更好的用戶體驗。資金狀態確定性時長,安全性,可編程性是目前討論的焦點。 zkRollup是資金狀態確定性最快的方案。 optimistic Rollup/側鏈具有可編程性。 zkRollup支持EVM的證明是個期待的方向。

展開全文打開碳鏈價值APP 查看更多精彩資訊

Total
0
Shares
Related Posts