概述 Layer 2:狀態通道、側鏈、等離子鏈和 Roll Up

一邊是區塊鏈應用的逐漸推進,另一邊是當今區塊鏈協議非常有限的能力。這一對矛盾催生了許多被稱爲二層協議(Layer 2)的技術,例如:狀態通道(State Chainnel)、側鏈(Side Chain)、等離子鏈(Plasma)和 Roll Up 等。本文深度介紹了這些實現的技術細節以及它們的優缺點。

二層協議解決方案背後的核心思想,是讓幾方可以在不往主鏈發送交易(這被視爲第一層)的前提下,以某種方式進行安全的互動。並且仍然在某種程度上利用主鏈的安全機制作爲(這種互動的)仲裁。

不同的二層解決方案擁有不同的特性和優缺點。個人覺得最令人振奮的是 Roll Ups,我將最後介紹。

感謝 Ben Jones (Plasma 團隊),Tom Close (Magmo),Petr Korolev 和 Georgios Konstantopoulos,他們檢查了本博客的草稿。

狀態通道(State Channels)

作爲二層方案的一個入門介紹,讓我們首先看看簡單支付通道。支付通道是當今最廣泛採用的二層協議之一。閃電網絡(Lightning Network)就基於支付通道。

支付通道是另一更通用概念的特定實現,那就是狀態通道。狀態通道是在一組固定的參與者(通常是兩個)之間進行安全線下交易(transact)的協議。對於支付通道來說,這種線下交易就表現爲資產的交換。支付通道協議如下運作:兩方先在主鏈上存入一些資產,例如 10 美金的比特幣。這表現爲兩筆線上交易。這之後,只要雙方保持非負的資產,就可以即時互相發送資產,而無需主鏈的參與。這是通過互相之間發送狀態更新消息,格式類似於:【交互編號,金額,簽名】。

一旦某一方想要終止支付通道。他們可以執行一個稱爲“exit”的操作:提交最後的狀態更新到主鏈上,並將各方最後的餘額各自發回。主鏈可以通過簽名驗證狀態更新的有效性以及最後的餘額是否正確。這樣就能確保支付通道無法從一個無效的狀態退出(exit)。

這種退出機制的問題是,主鏈無法驗證提交的這些狀態更新序列是完整的。這裏完整指的是,不會再有新的狀態更新發生在這次退出提交之後。例如,考慮如下圖的場景:

概述 Layer 2:狀態通道、側鏈、等離子鏈和 Roll Up

當進行到 Alice 有 11 刀,Bob9 刀的狀態時,Alice 發送 7 刀給 Bob 形成一個狀態更新,並等待 Bob 給她提供這 7 刀所購買的服務。然後 Alice 發起退出流程,但是隻向主鏈提交了發送 7 刀之前的狀態更新序列。這樣,主鏈是無法知曉最後那個狀態更新的存在,誤以爲這次退出是有效的。

解決這個問題的辦法是,在 Alice 提交退出後,保留一段時間給 Bob 進行退出挑戰。通過提交有 Alice 簽名的更新的一個狀態更新(因爲交互編號更新),Bob 將挑戰成功,獲得 16 刀,而不是 Alice 進行退出流程中所稱的 9 刀。

儘管,(加上挑戰時間後的)退出機制現在安全了,但也帶來一個很顯著的不便:參與各方在退出時,都要被迫等待一段相當長的時間,通常長達 24 小時。而且各方還需要定期(至少要每個退出週期一次)監視主鏈以確保對手方沒有試圖利用舊的狀態更新提交一個退出。一個稱爲 WatchTowers 的技術可以用來委託這個監視工作給第三方。

如果雙方可以合作,那麼等待退出是有辦法避免的。許多(狀態通道的)實現中都有“合作退出”的概念。某個參與方可以簽署一份“結束證明”,這份證明就能讓另一方無需等待退出挑戰時間而直接退出狀態通道。

只要主鏈可以驗證那種狀態轉移的正確性,支付通道就可以泛化爲支持任意的狀態轉移,而不僅僅是支付行爲。例如,可以使用狀態通道進行象棋遊戲,棋手把他們的棋步作爲交易(狀態更新)互相提交。

儘管有上述的那些不便,狀態通道當今廣泛應用於支付,遊戲以及其他場景中。這是因爲它的直接確認特性(一旦對手方確認了狀態更新收據,狀態更新就獲得了確認),這個過程沒有任何手續費,除了一開始的主鏈存入和最後的通道退出環節。另外,狀態通道構建起來相對簡單。

狀態通道網絡

上述狀態通道的另一個缺陷是,它僅支持兩個參與方。當然你可以構建一個 N 到 N 的多籤以支持在多方之間維持一個狀態通道,但是最好的方式還是希望能有一個類似狀態通道的 2 層解決方案,讓兩個沒有直接通道連接的參與方可以直接交易。

有趣的是,可以這樣構建狀態通道:當 Alice 和 Bob 之間有狀態通道,且 Bob 和 Carol 之間有狀態通道。則 Alice 就可以自動通過 Bob 與 Carol 進行安全的交易。這樣一來,整個狀態通道網絡就建立起來,允許一大批參與方兩兩之間的交易,而不用爲交易的每一對參與者構建直接的鏈接。

這就是閃電網絡(Lightning Network)背後的思想。在我們與 Interledger 的 Dan Rabinson 的一期白板對話中,我們深入探討了閃電網絡的設計:https://youtu.be/VJgPuylMPxA

側鏈

一個簡單側鏈的核心思想是:一條擁有自己的驗證者和操作者的完全獨立的鏈;可以通過橋(bridges)與主鏈進行資產互轉;可以選擇將自己的塊頭快照到主鏈上以避免自己的分叉。

快照提供了防止分叉的安全性,即使側鏈的驗證者們串謀試圖分叉:

概述 Layer 2:狀態通道、側鏈、等離子鏈和 Roll Up

上圖中,側鏈產生塊,並快照到主鏈中。快照僅僅是保存在主鏈中的側鏈區塊的 hash。側鏈的分叉選擇規則規定了,如果一條鏈不是基於最新的快照塊,就不可能是正確的鏈。在上圖中,即使側鏈驗證者都串謀,試圖在產生區塊 A 後,通過構造一個更長的 A‘->B\’->C\’ 進行雙花。但只要區塊 A 已經在主鏈中做了快照,則那條更長的鏈也會被側鏈的參與者所忽略。

當用戶想從主鏈轉移資產到側鏈,他們“鎖住”主鏈上的這部分資產,並在側鏈上提供鎖定的證明。要解鎖主鏈上的這部分資產(即要讓資產從側鏈回到主鏈),他們需要在側鏈上發起一個退出(exit),並提供退出的證明。這個證明會被放在側鏈的區塊中。

然而,儘管側鏈確實可以藉助主鏈的安全性防止分叉,側鏈的驗證者還是能夠串謀發起另一種形式的攻擊,稱作“無效狀態轉移”。這種攻擊的思想是,主鏈不可能驗證側鏈的所有區塊(否則就失去了側鏈存在的本意了)。因此如果超過 50% 或 66% 的驗證者串謀(百分比根據具體側鏈設計決定),他們可以創建一個完全無效的區塊,偷取其他人在側鏈上的資產,並把該區塊快照到主鏈上。這個無效區塊發起了一個對那些偷來的資產的退出,並由此完成了偷取的過程。

我們曾經介紹過分片環境下的無效狀態轉移問題;這個問題在分片和側鏈下是一一對應的,一個分片就對應一條側鏈,而主鏈就對應分片中的信標鏈。原文地址:https://medium.com/nearprotocol/unsolved-problems-in-blockchain-sharding-2327d6517f43

上面鏈接的文章也提到了一些解決無效狀態轉移的方法,但是在現實中都還未實現。目前絕大多數側鏈都基於一個前提假設,就是不會有超過 50%(或 66%,基於設計)的驗證者出問題。

等離子鏈(Plasma)

等離子鏈(Plasma)是一種支持“無託管”(non-custodial)思想的側鏈設計。也就是說,即使所有側鏈(叫做等離子鏈)驗證者都串謀進行有害的行爲,離子鏈上的資產還是安全的,也可以安全的退回主鏈。

等離子鏈的最簡設計,通常指的是類似等離子現金(Plasma Cash)這種,僅僅可以操作簡單的非同質化代幣(NFT),並在每次交易中僅僅容許轉移特定數量的代幣。它的機制如下圖:

概述 Layer 2:狀態通道、側鏈、等離子鏈和 Roll Up

每個塊包含一個稀疏默克爾樹(SMT),它的葉子包含了特定代幣的所有者的變化信息。例如:上圖中,共有四個代幣在流通。在塊 B 中,代幣 1、3 和 4 的所有者未改變(葉子中用零符號表示)。而代幣 2 改爲屬於 Alice。如果塊 D 中包含了 Alice 簽名的一筆交易,轉移代幣給 Bob,那麼相同的那個代幣 2 就在區塊 D 中對應這筆交易。

爲了轉移資產給某人,用戶必須提供該代幣的全部(所有者信息變更)歷史,從代幣移動到這個鏈上開始,直到這筆交易爲止的等離子鏈上的所有塊。在上面的例子中,如果 Bob 想轉移代幣給 Carol,那麼交易(在圖中下方有表示)將包含每個塊對應的一條記錄,要麼是該塊上該代幣的所有權變化的默克爾證明,要麼是空表示所有權未改變。

等離子鏈快照所有塊頭到主鏈上,因此 Carol 可以驗證所有的默克爾證明,對應主鏈上快照的塊頭 hash,以確定每個塊的所有權變化都是有效的。一旦這筆交易在等離子鏈上被記入區塊,則對應的 Carol 條目也被寫進默克爾樹,Carol 現在就是(該代幣的)所有者了。

既然等離子鏈的假設是其操作者在任何時候都可能出問題,所以其退出就不能是即時完成的(因爲等離子鏈操作者快照的狀態 hash 不可信),需要一個退出機制。即使在我們上文介紹的這種相對簡單的設計中,其退出機制也相當複雜。在與來自 Loom Network 的 Georgios Konstantopoulos 的白板系列的一章中,深度介紹了等離子現金的技術細節。他介紹了 Loom Network 使用的退出機制。我們找到了一個例子,通過隱瞞數據,操作者可以要麼從誠實用戶手中偷取資產,要麼能夠執行一個相對痛苦和悲傷的攻擊(細節參見視頻中 41:40 處)。後來,Dan Robinson 提出了一個簡化的退出機制,解決了這個問題。但是再次,一個重整區塊的例子被發現可以破壞該機制。視頻地址:https://youtu.be/EHqkA5wX5so

總之,等離子鏈最大的優點就是其上代幣的安全性。一個誠實用戶可以確信能取出自己的代幣,無論下列哪種情況發生:等離子鏈操作者創建一個無效狀態轉移(在誠實用戶獲得代幣之前或之後都可以),等離子鏈操作者扣押區塊,甚至完全不生成區塊。在所有這些場景中,或者簡單說,在任何場景下,代幣不會丟失。

缺點是在轉賬代幣時,必須提供完整的代幣歷史,以及其退出機制的複雜性(對這些機制的推導)。

更多的技術細節參見上文提到的 Loom Network 那一集。還有和來自 Plasma 團隊的 Ben Joines 的那一集,他談論了等離子現金流(Plasma CashFlow),一個更復雜的等離子現金,容許任意麪額的代幣交換。視頻地址:https://youtu.be/-8Jp7VjspQE

Roll Up

正如我在談論側鏈時提到的,解決側鏈中無效狀態轉移的一種方式就是提供每次狀態轉移正確性的密碼學證明。由 Matter Labs 構建的稱爲 Roll Ups 的二層方案就是這個方式的一種特定實現。它最初由 Barry White 發表在 ethresear.ch 上:https://ethresear.ch/t/roll-up-roll-back-snark-side-chain-17000-tps/3675

從以下角度來說,Roll Up 實際上是個側鏈。它產生區塊,並快照這些區塊到主鏈上。然後,Roll Up 上的操作者不需要被信任。也就是說,我們假定,在任意時刻操作者都可能停止生產區塊,或生產一個無效區塊,或隱瞞數據,或嘗試其他有害的操作。

與普通側鏈一樣,操作者不能產生一個分叉去替代任何在主鏈上已經快照的區塊。一旦主鏈上包含快照的那個區塊被 finalized,這個快照對應的 Roll Up 區塊也就被 finalized。

爲了解決狀態有效性問題,每次 Roll Up 操作者快照區塊的時候,他必須提供一個一批交易的零知識證明,正是這批交易形成了狀態轉移。參考下面的圖例:

概述 Layer 2:狀態通道、側鏈、等離子鏈和 Roll Up

roll up 鏈上有 ABC 三個塊,快照分別對應位於主鏈上的 XYZ 三個塊。任何時候,主鏈只需存儲 roll up 鏈上狀態的最新的默克爾樹根。當區塊 A 被快照時,一筆交易發給主鏈,包括:

  • 默克爾樹根 h (S2),來自當時的最新狀態 S2;

  • 要麼全狀態 S2,要麼 A 中的所有交易;

  • 一個零知識證明(zk-SNARK),可驗證從狀態 S1 的哈希到狀態 S2 的哈希的轉換與前面 2 中提供的數據相符。

這筆交易會驗證那個零知識證明是正確的,並在主鏈上存儲新的默克爾樹根 h (S2)。重要的是,它並不在鏈上存儲區塊 A 的全部數據,而是自然地保留在 call data 區域,將來還可以獲取(用於下一次交易的驗證過程)。

將全區塊數據存儲在 call data 上雖然是某種瓶頸,但它提供瞭解決數據有效性問題的方案。在當前 Matter Labs 的實現中,計算一筆交易零知識證明的時間是 1 分鐘(多筆交易可以並行計算),同時每筆交易消耗 1k 主鏈的 gas,以及佔用 9 個字節的 call data 存儲。

在這樣的設計下,惡意操作者的任何行爲,包括下線在內,都不會造成任何損害:

  • 無法扣押數據,因爲快照區塊的那筆交易必須包含完整區塊或完整狀態作爲參數,並會驗證內容是否正確。這些數據還會存儲在主鏈的 calldata 區域;

  • 無法生成一個無效狀態轉移區塊,因爲必須提交零知識證明去驗證狀態轉移的正確性。而一個無效區塊無法獲得這樣一個零知識證明;

  • 無法進行分叉,因爲分叉選擇規則總是選擇包含最新快照的塊,即使存在更長的分枝。

儘管該 2 層方案在 call data 的存儲量方面沒有顯著的改善,但實際可寫存儲的消耗是常數級的(也非常小)。同時鏈上驗證對 gas 的消耗也僅僅是每筆交易 1k gas,比鏈上交易的 gas 消耗低 21 倍。

重要的是,在 Roll Up 操作者協作的情況下,退出是即時的,無需一個退出機制。這些特性的結合使得 Roll Up 鏈是當今二層方案中最激動人心的方案之一。

結尾**

**

我正在開發一個分片協議項目 NEAR。很多人有一個誤區,在討論區塊鏈擴展性時,把一層的分片協議與二層方案作比較。然而實際上即使分片協議成功落地了,二層協議仍然會大放光彩。二層方案爲應對特定的用例場景而生,它天生比一層網絡更便宜,能提供更高的吞吐量。

本文是關於區塊鏈協議和相關主題的高質量技術內容的一部分。NEAR 還製作了一系列視頻,與 Ethereum Serenity, Cosmos, Polkadot, Ontology, QuarkChain 等許多協議的創立者、核心開發者交流。

敬請關注我的社交媒體賬號,當我們發佈新的專稿和視頻時獲得更新。

原作者:ALEXANDER SKIDANOV

翻譯:Marco

編輯:Buster

概述 Layer 2:狀態通道、側鏈、等離子鏈和 Roll Up