觀點:我所理解的Layer0、1、2層到底是什麼?
這是我第一篇宏觀分析型別的文章,之前的文章都是分析某一個具體的專案,這次想試著講講更宏大也是我更不擅長的領域,同時也把之前零散發在 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,連結如下:
https://twitter。com/jason_chen998/status/1561576592337682434
可以看到官網對於其優勢的描述第一點就是像智慧合約一樣輕鬆部署區塊鏈,降低發鏈的門檻和成本。
模組化區塊鏈的對立面是目前大多數 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 層的概念目前沒有明確的統一界定,所以這篇文章均為我個人的理解分析,不代表官方立場,也肯定會存在一定程度的主觀、偏差和不足,歡迎交流探討,共同學習。