作者:Jason
這是我第一篇宏觀分析類型的文章,之前的文章都是分析某一個具體的項目,這次想試著講講更宏大也是我更不擅長的領域,同時也把之前零散發在Twitter 上的內容結構化整理成一篇文章。
Web3 一直是一個概念新詞滿天飛的領域,所以我斗膽用一篇文章嘗試為大家講講我所理解的Layer0、1、2,也許你會疑惑為什麼標題不叫《一文講清楚Layer0、1、2》呢?一方面是因為我沒有自信和實力可以講清楚,另一方面是其中很多定義到目前很模糊,並沒有行業標準,比如在我的視角里Celestia 屬於Layer0,但是也有很多說法它屬於Layer1,所以本文均為站到個人視角的理解,可能存在不全面或者與你的觀點不一致的情況,歡迎探討。
文章速覽:
-
Layer0: 跨鏈通信
-
Layer0: 模塊化區塊鏈
-
Layer1 底層區塊鏈
-
Layer2 主流解決方案:rollups
Layer0: 跨鏈通信
Layer0 是我認為目前行業對其定義最模糊也是理解最複雜的一層,所以我會多花一些時間講解。
很多人將Layer0 定義為區塊鏈基礎設施服務層,但我覺得這個概念還是太大太粗,目前我認為Layer0 的關鍵詞就是發鏈、多鏈與跨鏈,核心內容落在了跨鏈通信與模塊化區塊鏈,所以講清楚了跨鏈通信和模塊化區塊鏈,Layer0 的內容也就基本覆蓋了。
先說說跨鏈通信,要注意跨鏈通信和跨鏈不一樣,跨鏈通信是一個技術實現,跨鏈則是一個業務場景。
跨鍊是區塊鏈極其重要的能力,假設每條鏈都是一個銀行,如果區塊鏈無法跨鏈則等於無法實現銀行轉賬。我們常說的跨鍊是指資產跨鏈,即我想把A 鏈的aToken 跨到B 鏈,首先Token 的項目方需要在兩條鏈上都發行自己的原生Token,然後使用跨鏈橋來進行兩邊Token 的“轉移”,轉移打引號的原因是轉移的過程並不是我們所理解的從A 移動到B,其工作原理是將A 鏈的aToken 鎖定,然後再在B 鏈鑄造對應數量的bToken,至於A 鏈鎖定資產,到B 鏈鑄造資產這個中間的過程則會產生很多問題,主要就是通信的問題,A 鏈如何通知B 鏈“張三剛才在我這裡鎖定了20個aToken,你現在趕緊的給他弄20個bToken 出來”呢?
鏈本身是封閉的情況下只能通過鏈下的監控來連接兩條鏈的資產變化情況,比如我寫個腳本之類的。但這不夠native,也不夠安全,所以跨鏈橋經常出問題,跨鏈通信則是主要解決多鏈之間原生信息傳輸的問題。
專注於做跨鏈通信的LayerZero 協議我之前也寫過一篇與它相關的文章《那個可以跨鏈的Gh0stlyGh0sts 會成為下一個Azuki 嗎? 》,這也是第一個使用LayerZero 實現原生跨鏈通信從而達到NFT 資產跨鏈效果的項目。
剛才說到傳統的跨鏈橋是通過鏈下監控兩條鏈的方式來實現了偽通信,而並不是真正的兩條鏈產生了信息傳遞,如下圖中左邊和中間的模式,LayerZero 則是直接在兩條鏈裡面部署了自己的節點,這些節點完成了多鏈之間的通信。
如下圖所示,我可以直接在合約代碼裡寫清楚我要給哪條鏈(chainId)傳輸什麼信息過去,這是區塊鏈原生的跨鏈通信。
我非常看好LayerZero 這個協議,它也完成了紅杉領投的1.35億美金融資。原因是我覺得這是真正純原生的跨鏈解決方案,並且資產跨鏈只是它的一個應用業務場景,鍊和鏈之間的通信不僅限於資產,就像是銀行之間的通信也不僅限於轉賬,我在工行產生了壞賬信譽不好,則工行可以將該消息告訴建行,我在建行貸款就會出現問題,跨鏈通信背後的業務場景一定會可以挖出很多。
講完了LayerZero 後Layer0 主要的內容跨鏈通信就明白了,這裡要注意的是Layer0 是概念,LayerZero 則是這個概念裡的具體某個協議,這兩個不要搞混了。
Layer0: 模塊化區塊鏈
Layer0 還有一個重要的內容模塊化區塊鏈,跨鏈通信這個詞大家能夠理解確實還挺底層的,屬於Layer0,但模塊化區塊鏈這個詞大家乍一聽會覺得非常“大”,不像是一個Layer 即層的概念,而是一個“全套”,就是區塊鍊是一個漢堡的話,Layer 就是裡面的生菜、肉餅和麵包片,但是模塊化聽起來就像是一個全套大漢堡而不是某一片生菜。
如果從廣義的概念來說模塊化區塊鍊是一種“架構”,layer2 也是模塊化區塊鏈,將計算層模塊化抽像出來,但是從目前狹義的對於模塊化區塊鏈的定位來說,我們要明白將區塊鏈模塊化以後的目的是什麼,從而再定義其處在哪一層,我認為最直接的目的是在於如何能夠更簡單快速的去發一條鏈出來,模塊化的效果是能夠把區塊鏈技術架構拆的更清晰,封裝的更完整,然後開箱即用就像是搭積木一樣,可以直接使用模塊化區塊鏈的能力用更低的成本發一套新鏈出來。你可以粗糙的理解成模塊化區塊鏈的目的是發一條Layer1 出來,這樣是不是就理解為什麼它處在Layer0 了。
模塊化區塊鏈的兩個代表Cosmos 和Celestia 為大家進行展開介紹從而更清晰的理解其含義,其中 Cosmos 要感謝@Kasey_ibc,他是Cosmos 生態的深度貢獻者,與他進行了探討並研究了其Twitter 優質內容。
模塊化區塊鏈概念的佈道者是Celestia,我之前關於模塊化區塊鏈曾經發過一個分析Twitter,這裡我援引該Twitter 的內容講講Celestia,具體的內容大家可以看我當時的Twitter,鏈接如下:
这段时间研究了模块化区块链,分享一些自己的理解,因市面上成熟资料还是不多,很多内容只能靠看文档和白皮书推演,所以可能存在偏差或者错误,如若出现欢迎讨论交流
— jason chen (@jason_chen998) August 22, 2022
可以看到官網對於其優勢的描述第一點就是像智能合約一樣輕鬆部署區塊鏈,降低發鏈的門檻和成本。
模塊化區塊鏈的對立面是目前大多數Layer1 都屬於單體區塊鏈,也就是一條鏈承擔了共識、數據可用性和執行的工作。
共識:整個網路中節點決定打包哪些交易,以什麼順序打包;
數據可用性:就是驗證某個區塊是已經完成廣播是寫入鏈上的;
執行:具體交易和狀態的變更。
如果一條鏈把這三件事都乾了,那它就是單體區塊鏈,也就是目前L1 面臨的問題,交易、結算、出塊都排著隊完成。所以設計思路就是把共識、數據可用性和執行這幾個區塊鏈核心工作職責給拆開,每個職責單獨做一條鏈即一層,然後各司其職干好自己的事,再將其拼裝組合到一起。
說到這里大家應該就意識到了,這就是30 年軟件開發都遵循的模塊化設計原則,封裝多態耦合內聚那套理念,把一個複雜系統拆分職能,各干各的,再組裝到一起,所以至少這條頂層設計理念是一直存在的,將這套設計理念應用在了區塊鏈設計上,並不是什麼很新穎的理念。
然後當說到將共識、數據可用性、執行拆分出來成為一條鏈,大家應該意識到這就是L2 在做的事,rollup 擴容思路就是將執行層單獨拿出來做一條子鏈去完成以太坊的交易處理工作,然後將結果再返回至以太坊主鏈,所以rollup 其實就是模塊化設計理念,所以如上文所說廣義的模塊化區塊鏈不是一個具體的東西,它是一種概念或者是設計理念,但狹義的模塊化區塊鏈則是指將區塊鏈的共識、數據可用性的底層能力封裝起來,這兩層也是對於一條區塊鏈的地基,複雜度和難度也是最高的,然後這兩層能力具備了新發一條鏈就門檻和成本很低,只需要將精力關注於自己的業務與計算。
那麼Celestia 主要是將數據可用性能力模塊化,通過共識機制存儲交易記錄並提供數據可用性,而不用參與結算和執行層的事,只管存,並保證存的東西是有效的,其他開發者就能以rollup 的形式在Celestia 上構建出自己的結算層和執行層。所以Celestia 就像是區塊鏈領域的AWS,傳統一家公司開發軟件需要買一台服務器放在機房,10家公司就要10台服務器,於是AWS 說你們都別買了,我自己整一個大的,你們只管軟件開發,需要存取數據就來我這,我能夠保證你們的數據有效的(存的進來,取得出去)。
那麼為什麼Celestia 要做數據可用性層模塊化呢?如果我想發一條鏈最難的就是這麼讓盡可能多的節點參與到我的鏈中去為我完成共識和數據可用性的過程,有這麼多節點來維護我的鏈,那才能在鏈上做更多應用層執行的事情。
所以需要先看一下L1 鏈的數據可用性是如何完成的。我們都知道區塊鍊是由大量可自由加入的節點組成的,節點越多也就越安全,越去中心化。節點分為全節點和輕節點,全節點就是要完整的維護一套數據賬本,所以少量節點惡意攻擊不會影響全局節點,這也是區塊鏈的立根之本。
但是隨著時間數據也越來越多,維護一個全節點成本過高,如果大家都不願意來做全節點,那區塊鏈就趨於中心化變得不安全,所以會有輕節點的存在,不會維護驗證全量交易數據,而只存區塊頭,當出現需要驗證數據可用性的時候,就將其發送給相鄰全節點幫忙驗證,然後再將結果返回回來。
所以總結一下,搞一個鏈最難的是這麼能搞到這麼多的節點來維護我這條鏈的共識和數據可用性。這也就是Celestia 想解決的問題,它在官網說希望能夠讓創建一條鏈像創建智能合約一樣簡單,大家不用管下面的數據問題,交給Celestia 完成,只需要專注於自己上層執行結算,實現“一鍵發鏈”的效果。
看完Celestia 我們再看一下Cosmos,其實這兩家組織的成員重合度很高,很多人都是同時貢獻於這兩家組織的。
Cosmos 的目標是成為區塊鏈的互聯網,首先它提供了一套“發鏈”能力,讓每個社區都可以擁有一條自己的主權鏈,主權鏈即獨立的區塊鏈,數據的產生和寫入都是內部閉環的,其次鏈之間可以進行數據通信交互,實現萬鏈互聯,這個願景還是非常有感召力的。
至於為什麼它認為有讓社區發自己鏈的需求呢,是因為它將區塊鏈分為公共鍊和專有鏈,在以太坊這樣的公共鏈上開發者需要面對的兩層治理,鍊和應用,並且應用要遵循受限於底層鏈,從而很難釋放出應用的價值,所以它想針對於每個應用都可以產生一個量身定制的鏈。
所以為了達到這個目的首先要解決發一條新鏈門檻與成本的問題,其次解決這麼多鏈之間如何通信形成一個滾雪球生態的問題。
門檻和成本Cosmos 的解決思路與Celestia 一致,即將底層的能力封裝起來,區塊鏈架構分為三個大層:網絡、共識和應用,它將網絡和共識層封裝起來,也包括了賬號、交易、簽名等原子能力,提供了SDK 使得開發人員基於此進行主權鏈的開發,通過預置好的模塊來進行自定義構建區塊鏈,然後發佈到Cosmos 網絡中和其他的兄弟鏈進行交互,交互則是使用跨鏈通信協議IBC 來實現了一個hub 集線器的效果,其他的鏈都通過IBC 連接到這個集線器中,在此進行數據中繼。
所以Layer0 的概念至此總結一下,其工作主要集中在發鏈、多鍊和跨鏈這三層,讓發鏈變得更簡單,但發了這麼多鏈互相不通那也無法形成合力,於是需要解決跨鏈的問題。
Layer1 底層區塊鏈
Layer1 是底層區塊鏈,熟知的比特幣、以太坊、幣安鏈都屬於Layer1,以及Avalanche、Near 和Terra 等,因為它們都是自己生態系統中的主要網絡,在自身區塊鏈上處理並完成交易,同時也具備自己的原生Token,最近新起的兩大新公鏈Aptos 和Sui 也是Layer1,但是注意很多人容易把Layer1 和公鏈混為一談,公鏈包含Layer1 但不是等於的關係。
Layer1 公鍊是crypto 世界中護城河最深的一個物種,當越來越多的節點、開發者、項目加入其生態後,滾雪球的優勢將會非常明顯,除非是出現了Luna 之於Terra 這樣的基礎代幣直接崩盤,導致這個大雪球發生了大雪崩,否則生態內大量錯綜複雜的利益關係會互相牢牢綁定到一起,使得鏈的根會攀枝錯節的紮的非常深,所以打造出來一條成功的Layer1 公鏈一直是整個crypto 圈子裡無數組織前赴後繼的。
目前應用領域最大的Layer1 公鍊是以太坊,所以競對鏈都會想辦法從以太坊生態中爭奪開發者與用戶,因為以太坊這個貴族鏈在高峰期動輒數十美金的GAS 費對於我這種普通小韭菜來說還是肉疼的不行,所以目前絕大多數的競對鏈都主打低gas、高TPS 的策略來爭搶用戶資源,比如這個星期剛完成空投大熱的Aptos,這裡簡單提一嘴,當時Aptos 上主網後很多營銷號帶節奏說Aptos 號稱10KTPS 實際上只有4TPS,然後一通冷嘲熱諷讓別人覺得注水了,10KTPS 是理論最高可以承載的量,4TPS 是當時實際正在跑的量,就像是港珠澳大橋理論上號稱單日25萬通關量,實際上每天跑的車寥寥幾輛,但是能說港珠澳大橋性能注水了嗎?
打造公鏈就像是打造一座城市,一座城市的繁榮需要的是先修建好住房、醫院、商場、鐵路等基礎設施,打造宜居的環境,居民才會搬過來生活,如果一條鏈沒有應用把用戶搶過來也沒用呀,Aptos 性能上再強理論TPS 再高,沒有足量的應用去驗證也是一座沒有車跑的港珠澳大橋狀態,所以公鏈吸引開發者的手段可以分為幾種:
-
公鏈給足開發者扶持,來我這裡開發應用給錢給流量,所以這也就是為什麼大量的公鏈背後都是交易所站台,得出得起錢呀,然後整天搞黑客松,發grants 來招商引資。
-
新公鏈對於開發者來說最大的吸引力在於足夠空白,因為成熟的以太坊競爭已經太激烈太捲了,去了新的公鏈甚至可以直接把以太坊上已經驗證成功的應用直接照搬上去,比如最近大家應該看到sui 上的NFT 交易平台、域名服務商這些已經在以太坊滾瓜爛熟的東西依然拿到了大額融資,群裡我看很多人戲稱換個語言任何項目都能重新做一遍。
-
還有一個我認為行之有效的手段就是直接EVM 以太坊虛擬機兼容,對於開發者來說最大的成本不是寫代碼,而是學代碼,一種完全陌生的技術棧從零開始學起,然後實操開發,調試debug 等等一套下來會勸退很多開發者,那有沒有什麼辦法能夠讓以太坊生態的開發者可以順滑的低成本遷移到新鏈上去呢?有沒有辦法我可以用Mac 電腦開發並調試運營Windows 的應用呢?安裝一個虛擬機,大家應該身邊也存在這樣的朋友買個Mac 用的不順手,給它改成Windows 系統,或者其實就是運行了一個虛擬機,虛擬機就是用軟件模擬計算機系統。 EVM 就是服務於以太坊的智能合約,所以如果使用EVM 兼容對於開發者就可以直接順滑的將以太坊的應用遷移到兼容鏈上去,大家熟知的BSC 就是EVM 兼容鏈。
Layer2 主流解決方案:rollups
再來聊聊Layer2,剛才說很多Layer1 的競爭鏈瞄準以太坊“貴”和“慢”來打,但是對於以太坊本身有什麼辦法能夠優化呢? Layer2 是一種方式。
在講Layer0 部分的時候我聊到了單體鏈,一條鏈上將所有事都乾了,這能不堵嗎?這時有人想到了能不能把以太坊上的交易拿出來在外面執行,然後將結果返回給以太坊做數據可用性處理,這種操作方式被稱為rollups,也是Layer2 主流解決方案,就像是原本一條路上非常堵,我給它修個高架橋,當然我還看到一種有趣的解釋,做核酸10人混管就是rollups。
所以通過將交易放在鏈下處理,不需要經過以太坊緩慢的共識過程,從而來減少以太坊主網上的計算量,提高整體處理速度和吞吐量。
我之前讀書時恰好研究方向也是區塊鏈擴容,當時寫的論文中提出的方案也和rollups 異曲同工如下圖所示。
剛才說到rollups 就是將計算在鏈下執行再將結果放到鏈上的過程,這個過程最大的問題就是在於怎麼證明這個結果是有效的,兩種證明方式也就產生了兩種主流的rollups 方案:Optimistic rollups 和zk rollups。
人如其名,Optimistic 的英文含義是樂觀的,即Optimistic rollups 使用了欺詐證明作為數據有效性的驗證方式,在將鏈下計算完的結果同步給以太坊主網後,會樂觀的默認數據是正確的,如果有人認為數據不正確也就是存在欺詐,就可以在窗口期又稱質詢期內通過計算欺詐證明來質疑匯總交易的結果。
如果證明成功存在欺詐,則會重新執行交易更新數據狀態,並且當時將該交易打包的排序節點就會受到懲罰,削減它提交的保證金(成為排序節點是需要繳納保證金的),並分發給提交了欺詐證明的驗證節點。
在這個過程中重要的角色除了兩個節點:排序節點和驗證節點外,還有另外兩個重要的角色參與:CTC 交易合約和SCC 狀態合約。
這裡邏輯稍微有些複雜需要大家耐心理解,所有Optimism 的交易數據區塊都存儲在以太坊一個特殊的被稱為CanonicalTransactionChain 的合約,簡稱CTC,合約地址為:
0x5E4e65926BA27467555EB562121fac00D24E9dD2
可以看到排序節點Sequencer 每分鐘大約寫入兩批次(批次的專業術語叫Batch),每個批次可能包含幾百筆交易數據,CTC 合約主要存著的是交易數據摘要。
另外將交易後的狀態根StateRoot 存入StateCommitmentChain 合約,簡稱SCC,合約地址為:
0xBe5dAb4A2e9cd0F27300dB4aB94BeE3A233AEB19
約每6 分鐘寫入一批次,驗證節點可以去讀取這兩個合約中的記錄進行驗證計算是否交易存在欺詐行為。
以上就是Optimistic 證明數據有效性的方式,有點博弈論的感覺,通過雙方對抗加激勵模型實現最小程度作惡欺詐的效果,我們再看看ZK 是如何解決的。
zkSync 是zk rollups 的主要玩家,它的官網slogen 是rely on math, not validators,依賴數學,而不是驗證者,這句話就是針對於Optimistic 欺詐證明說的,可見對於Optimistic 火藥味滿滿啊。
zk rollups 中每一筆交易的有效性都是在交易發生前驗證的。排序節點無法作惡。但是Optimistic Rollup 中,排序節點的行為不受約束,因此必須存在驗證節點去監視欺詐交易,一旦發現就需要向主網提交欺詐證明。
zk rollups 相比於Optimistic rollups 最大的好處在於因為使用零知識證明的純數學計算來進行交易有效性驗證,所以將資金轉移至以太坊不會存在延遲,因為一旦zk rollup 合約完成了有效性證明,就會執行交易。相反從Optimistic rollups 中提取資金會有所延遲,因為要為欺詐證明留出一定時間。
zk rollups 的核心架構:
-
鏈上合約:邏輯與Optimistic 一樣,在以太坊部署對應的智能合約用於存儲區塊匯總數據、驗證合約等,但是不需要像Optimistic 一樣去發布太多交易數據在以太坊鏈上合約,因為其有效性在上鍊之前就已經得到了證明,而不是Optimistic 需要將數據發到鏈上用於他人驗證,但zk rollups 也可以將交易數據存放在智能合約的calldata 中,它是一種不可更改,但是不持久的臨時存儲區域,類似於內存,所以有需要也可以獲取到交易數據。
-
鏈下虛擬機:雖然zk rollups 依附於以太坊,但交易執行過程存在於獨立的EVM 虛擬機,即實際zk rollups 執行的環境。
其在大流程上和Optimistic 類似,用戶簽署交易後,提交給zk rollups 的Layer2 排序節點進行處理並打包在一個批次中,然後提交給以太坊。
zkSync 使用的零知識證明太複雜了涉及到大量的加密數學,看的頭大實在沒理解透認慫了,所以這裡就不班門弄斧複雜粘貼一些開發手冊裡我自己都看不懂的數學公式假裝我看懂了。
以上就是我個人對於Layer0、1、2的研究與理解,還是一開始說到的Layer 層的概念目前沒有明確的統一界定,所以這篇文章均為我個人的理解分析,不代表官方立場,也肯定會存在一定程度的主觀、偏差和不足,歡迎交流探討,共同學習。