logo

Layer 2:公鏈本就不該追求性能

瀏覽數

99+

經歷了兩年時間,區塊鏈行業從無到有出現了數十個、上百個不同設計的Layer 2 項目,而大部分人對Layer 2 的認識僅僅就是「擴容方案」那般可有可無。

 

為什麼公鏈就是性能那麼低?為什麼我們覺得分層設計才是未來加密經濟的發展方向?到底什麼才是Layer 2 ,現有的方案是什麼樣的?這些問題,都是我們需要去理解的。

 

應鏈捕手(ID:iqklbs)約稿,Ryan(Community manager at Nervos Network)撰寫了本文,他所在的Nervos Network, 是一個專門為Layer 2 打造的Layer 1 底層公

 

2016年1月,距離比特幣創世區塊誕生7 年之後,一篇名為《The Bitcoin Lightning Network:Scalable Off-Chain Instant Payment》的白皮書發布,這是第二層擴容方案(Layer 2 Scaling Solutions ,簡稱Layer 2 )的開端;

 

到2018 年的年末,光是技術類型就已經有狀態通道、Plasma、Truebit 等各類Layer 2 方案,出現了Celer Network、AlphaWallet、Raiden Network、Alacris 等等一眾新星,在時間和資源都極度稀缺的情況下根據自己發現的需求,針對不同的場景給出自己的解決方案,準備迎接未來加密經濟應用的爆發。

 

01

公鏈,不能治百病

 

區塊鏈帶來了強大的去中心化應用生態,無數人對它寄以厚望,希望區塊鏈能夠打破金融孤島。2017 年上百個公鏈項目展開角逐,但到了2019 年,大規模應用落地仍舊困難:區塊鏈發展受到Vitalik 提出的不可能三角的瓶頸性限制————也就是區塊鏈系統設計無法同時兼顧可擴展性、去中心化和安全性,三者只取其二。

 

 

這個瓶頸是否屬實?是否公鏈的性能真的那麼低?以太坊、比特幣確實可以將TPS做的很大,讓每個節點處理更多的交易。甚至有人將它做簡單的參數修改,就能作為一個吞吐量非常高的聯盟鏈方案。但這個方案真的非常天真:TPS提高帶來的問題就是,由於帶寬的限制,一般的節點甚至連同步數據都難以做到,更別說參與出塊,隨後小節點就被淘汰。這樣損失的是去中心化:公鏈作為開放的協議,因為性能的需求實際上為大部分節點設置了不可進入的門檻,那如何做到開放?

 

去中心化只是一個手段,我們需要的實際上是公共可驗證:一個沒有足夠多、足夠分散的驗證者(也就是節點)的區塊鍊網絡是難以構造信任的————這個網絡可以少數人輕易被控制,我如何保證我的資產安全?

 

那麼是否能夠在保有去中心化和安全性的前提下,去追求更高數量級的吞吐量?

 

有人嘗試新的區塊鏈協議去打破不可能三角:一些團隊開始研究DAG,來取代「區塊+鏈」的數據結構來做到上萬甚至更高的TPS。但是基於看似無序實則有序的圖做交易順序的判斷是非常難,交易順序難判斷,如何避免雙花?因此很多DAG項目引入相對中心化的方案,比如IOTA採用一個中心化的Check Point,ByteBall採用見證人機制,本質上都不是共識,而是中心化的方式————而這顯然不能解決問題。

 

 如圖Byteball 的DAG 數據結構,在Byteball 中交易會根據交易距離創世塊的距離,再根據一種見證等級進行排序

 

是否能夠用分片技術,將網絡分為不同的片區,處理各自的交易,來將性能十倍、百倍的提升?但實際上,分片技術在計算層面、存儲層面、網絡層面、共識層面都有問題需要解決,並且不同層面的分片問題聯繫起來又會有新的問題出現。這些問題解決之後,還有跨片區交易問題,如著名的「Train & Hotel Problem」。

 

「主要是跨shard交易比較複雜」,原來在以太坊Research團隊研究Sharding ,現在是Nervos首席架構師的Jan曾說到。

 

這是一個很讓人失望的結果,但我們必須知道,一切事物都有自己的邊界,我們應該理解,公鏈不應該做所有的事情,它應該做它該做的事情:

 

它應是以最高效率達成全球共識的工具,能夠以最低的成本來構建信任;但我們不得不承認的是,它可能是最貴、最低效的數據庫。

 

 

作為共識的工具、信任的引擎,它不該放棄去中心化和安全性對可擴展性做妥協。那如此低的TPS,該如何利用?

 

我們是否能夠將大量的工作放到鏈下去解決,僅僅將最重要的數據提交到區塊鏈上,讓所有人都能夠驗證這些工作都是準確可靠的?

 

社會的發展帶來的是更精細的分工,區塊鏈的技術發展也如是——分層,本質上就是一種分工。公鏈不能做所有的事情,那麼就讓它來做它擅長的東西。由此,也就是第二層擴容方案的思路,我們稱為「 Layer 2」,是構建在底層區塊鏈(Layer 1)之上的基礎架構,為豐富的區塊鏈應用提供更好的可擴展性、隱私性和可用性。

 

Layer 1來保證安全和去中心化,絕對可靠、可信;它能做到全球共識,並作為「加密法院」,通過智能合約設計的規則進行仲裁,以經濟激勵的形式將信任傳遞到Layer 2上。而Layer 2追求極致的性能,它只能做到局部共識,但是能夠滿足各類商業場景的需求。

 

Nervos 從一開始就決定做一個支持Layer 2 的Layer 1,我們著眼於安全和去中心化,為上層生態傳遞信任。今天我們能夠說,我們預測的、百花齊放的Layer 2 已經到來。

 

02

Why Layer 2 ?

 

試圖用一層區塊鏈方案解決所有問題的人,往往沒有思考過一個很重要的問題:公鏈雖能夠達成全球共識,公共可驗證,但是否所有的信息都需要讓所有人驗證、知道?我們之間的日常交易是否需要讓全世界的人審核?

 

如果我不做違法的事情,當然不會介意,但是這顯然沒有必要。我們只需要將最關鍵的信息讓所有人驗證、獲取保障就夠了。而Layer 2 恰好就能滿足這樣的需求:我們將大量工作放到鏈下(Off Chain),僅將最重要的內容提交Layer 1 鏈上(On Chain)進行驗證,並且Layer 1 能夠保證Layer 2 的安全。

 

因此,我們提出最核心的兩個觀點:

 

1)不是所有的東西都需要全球共識;

2) 公鏈就該做它應該做的事情,其他的事情完全可以鏈下完成。

 

那什麼樣的方案能夠被稱為Layer 2 ?

 

1)首先,應用的主要工作都是在鏈下;

2)其次,僅用Layer 1 作為安全的錨點,保證鏈下環境的安全;

3)最後,和Layer 1 盡量保有同樣的風險模型(很遺憾,跨鍊和側鏈方案並不符合這一條,因為它們將資產在一條鏈上鎖定在另一條鏈上釋放,資產進入了另一個安全性完全不同的環境)。

 

顯然,這裡Layer 1 和Layer 2 的安全等級是不一樣的:

 

Layer 1的安全性是由去中心化(Decentralized)保證,這意味一組無中心的節點取代了可信第三方的角色。在這裡:1.被接受的交易就會按照規定執行;2.交易次序是確定的;3.雙花是禁止的。

 

但是Layer 2 的安全等級遠小於此,它的安全性需要通過Layer 1 來保證,因此只需要達到「去信任」(Trustless):不保證交易在Layer 2 上一定能夠執行,但是能夠保證若交易不被執行能夠有一種方式讓資產安全地從Layer 2 撤回。

 

在下面的內容裡,我們就為大家一一解釋不同的Layer 2 方案:狀態通道、Plasma 和鏈下計算。

 

  • 狀態通道(State Channel)

 

我們常會面臨的一個場景是,我們會和某一個人或者某幾個人反復交互。比如家門口的咖啡廳,每天都去喝一杯咖啡並且用比特幣支付,但是每次交易手續費就高的可怕,於是可以用支付通道技術,雙方客戶端之間建立一條通道,之後交易都在通道內部進行,最後到比特幣區塊鏈上做結算,如此只有在通道關閉和打開的時候需要手續費,這是第一個狀態通道技術: Lightning Network 最初設計的場景。

 

本質上,狀態通道是一個智能合約機制:區塊鏈上的智能合約就像一個機器人,雙方在通道中運行應用,最後將結果提交到機器人手裡它會按照規則進行結算。

 

在狀態通道中運行應用,會有如下的步驟:

 

1)參與狀態通道的各方在區塊鏈上部署智能合約,這個合約包含一個多重簽名合約(僅在有各個參與方簽名的情況下才能解鎖),並存入一定的資金,一部分作為初始狀態,一部分作為資產抵押防止作惡,通道開啟。之後所有的行為都會在鏈下執行直到通道關閉;

 

2)應用會在各方客戶端本地運行,每運行一步,雙方在本地構建交易並簽名,通過點對點網絡或者簡單的八卦協議的方式將交易發送給其他參與方並得到各方簽名形成新的狀態。新的狀態更新包含:各方的最新狀態(一般是狀態的Hash),各方的簽名以及該狀態的版本序號。同時各方保存運行過程中的每一次狀態和簽名;

 

3)應用結束,一方提交最終狀態到區塊鏈上的智能合約,並有一段時間的爭議期。各方認為沒有問題,爭議期之後狀態確認,狀態通道關閉並根據最終狀態在區塊鏈上進行資產的結算。

 

原本在區塊鏈中需要確認的「每一步」,變為只需要確認「結果」。需要注意的是,狀態通道中並沒有一個第三方運行節點,接受交易、打包出塊來提供服務。應用在本地執行,狀態更新通過點對點網絡傳播,不需要共識機制,非常高效。

 

於是狀態通道會有非常多的優勢,首先就是即時確定性(Instant finality),只要各方簽名通過狀態更新,狀態就被「確認」,而不需要如區塊鏈上等待區塊確認;其次,狀態更新在鏈下,點對點通信能夠保證隱私,僅最終狀態會提交到區塊鏈上;最後是低手續費,狀態通道是事務性的,只在通道打開和關閉的時候需要區塊鏈上結算清算的手續費,而其他時間,不管雙方在通道內如何更新都是免費的。

 

那麼狀態通道是否安全呢?狀態通道的安全性是由區塊鏈上的智能合約來保證的。很可能出現的兩類攻擊模型:

 

1) 狀態通道中有一個非常樂觀的前提,那就是用戶保持在線,確保狀態的更新。若用戶掉線,參與通道的另一方能夠通過提交舊的、對自己有利的狀態到區塊鏈上結算進行攻擊。

 

爭議期的設計就是為了防止這個情況發生:在爭議期內,用戶可以提交最新的狀態。由於每一次狀態更新都有各方簽名並帶有版本序號,因此只要提交最新版本序號的狀態到區塊鏈上就能夠證明提交舊狀態的作惡,並將懲罰作惡者。

 

如果用戶在爭議期無法上線呢?不同項目給出了不同方案,如Lightning Network 中的Watch Tower 和PISA 中的Custodians,這些角色有經濟激勵來揭發提交錯誤狀態的攻擊者;Celer Network 的狀態守護者網絡幫助用戶在下線的時候提交新的狀態。

 

2) 若出現一方不合作的情況,比如他輸了遊戲,不對自己認輸的狀態簽名。這時另一方能夠將狀態的證明提交到區塊鏈上,區塊鏈將整個過程重新運行,得到結果。如果的確出現作惡的情況,作惡的一方會受到懲罰並承擔應用在區塊鏈上運行的成本。

 

此外在狀態通道中還有很多的概念,如支付通道、廣義狀態通道等。支付通道是最簡單的狀態通道,它的狀態就是數字————在這個時刻,各方手裡有多少Token。而狀態通道中的狀態更加豐富,可以是如Celer Network的五子棋遊戲中雙方下棋的落子情況,也可以是海戰遊戲中各方戰艦的受損情況……

 

而廣義狀態通道是另一個概念。一般情況下,一個狀態通道只能處理一類應用,因為在區塊鏈上的智能合約只能處理某一類應用的執行和驗證。

 

在廣義狀態通道中製定了一系列的「標準」(如圖其實是合約的功能functions),在該標準下的應用能夠在由同一個狀態通道合約執行,由此廣義狀態通道能夠允許用戶在不關閉通道的情況下運行多種應用。

 

舉例來說,你可以在廣義狀態通道中先運行五子棋遊戲,之後進行支付,然後打一輪撲克牌。其中運行的應用的狀態更新都基於同一個標準,在區塊鏈上的合約都能夠處理。

 

圖中V1、V2、V3 分別是不同的通道,但是在鏈上只需一個合約

 

狀態通道技術給了我們一個非常美好的願景,它犧牲流動性(在合約中抵押資產)來換取無手續費和即時確定性,但是它僅僅適用於計算量很小、並且各方需要來回交互的應用,並且由於狀態通道每一步都需要用戶一致同意,就需要在通道開啟的時候明確各位參與者,並且中途難以加入/退出,這讓狀態通道僅僅能夠成為鏈下交易的擴容。

 

在採訪IC 3成員、倫敦皇家學院副教授Patrick McCorry 的時候,我問他:

 

你覺得狀態通道的第一個殺手級應用會出現在哪裡?

 

「I would say Payment.

 

I don't really see state channels as a scaling solution per se, but as a technique to run existing smart contracts/apps for free.

 

They won't work for a whole host of applications, but they'll tr​​uly excel for where they do work.」

 

我覺得是支付。我並不認為狀態通道本質上是一個擴容方案,它僅僅是能夠免費運行現有合約、應用的技術而已。它並不能為所有應用起作用,但是對於它能做的方面它會非常出色。

 

  • Plasma

 

提到Plasma首先要提到側鏈的概念。側鏈(Sidechain)是非常有效的擴容方案,但是側鏈的問題在於,我們將資產映射到側鏈之後,在側鏈上運行交易我們需要信任側鏈的驗證者(Validator也就是出塊節點) ————一旦側鏈上節點作惡,我們將沒有辦法保護資產的安全性。因此嚴格來說,側鏈並不是一種Layer 2方案,因為它的安全性並不是由Layer 1保障的。

 

那麼能否將側鏈「Layer 2 化」呢?

 

回到我們之前定義的Layer 2 的安全等級:去信任(Trustless)————我們不能保證交易在Layer 2 上一定能夠執行,但是能夠保證若交易不被執行能夠有一種方式讓資產安全地從Layer 2 撤回。

 

側鏈+ 資產能夠安全撤回的機制= Plasma

 

2017 年8 月發布的Plasma 白皮書,由Vitalik 和Lightning Network 的Joseph Poon 發表。

 

Plasma 是一系列在根鏈(Root Chain,在Plasma 最初設計中它是一個樹狀結構,因此將Layer 1 稱為根鏈比較形象)上運行的智能合約,並且區別於狀態通道,Plasma Chain 中能夠運行智能合約————如果說狀態通道是對交易吞吐量的擴容,那麼它是對計算能力的擴容。

 

在鏈下會有驗證者運行一條Plasma 鏈,用戶可以將自己的資產鎖定在根鏈的合約中映射到Plasma 鏈上得到更好的用戶體驗。根鏈上的合約要求Plasma 鏈將每一個區塊的Merkle Root 提交到根鏈上作為「欺詐證明」(Fraud Proof),只有提交證明的Plasma 區塊才是被確認的。

 

所有Plasma 上的用戶能夠用自己保存的Merkle Proof 來驗證這個Merkle Root 保證子鏈運行的安全性,必要的時候可以通過向合約證明自己的資產來快速退出。Plasma 鏈能夠發行自己的代幣,以此激勵這條鏈的驗證者保證它的運行,一旦出現仲裁併被證明作惡,Plasma 鏈驗證者在根鏈合約中的保證金會被扣除。

 

根鏈上的合約就像機器人:它要求Plasma 提交每個區塊的證明(Merkle Root 的形式),並且在用戶提交自己的資產證明的時候能夠運行起來幫助用戶將資產從Plasma 中撤回根鏈。

 

最初的Plasma 設計是樹狀的、鏈中鏈的結構,在根鏈上建立合約運行開設Plasma 鏈,在Plasma 鏈之上還能通過智能合約的形式建立新的Plasma 鏈,此時在根鏈上開設的Plasma 鏈稱為父鏈(Parent Blockchain),其上的Plasma 鏈稱為子鏈(Child Blockchain),能夠有更好的性能但是安全性會更弱。

 

Plasma 這樣的設計非常像現實中的法院:如果說根鏈(也就是公鏈)是最高法院,那麼Parent Blockchain 就像是省級法院,Child Blockchain 是地方法院一樣,來保障基於這條區塊鏈開設的Plasma 區塊鏈的安全性。欺詐證明從子鏈向下遞交最後到根鏈上。

 

Plasma 的樹狀結構

 

用戶需要從Plasma 撤回資產,提交相關證明到上一層(根鏈/父鏈)的合約中進行請求,之後會有一段時間的爭議期,主要爭議兩個內容:1、是否該筆資產已經被花費或者撤回;2、是否該證明是來自最新的狀態,而不是舊的狀態。爭議期之後,資產會根據UTXO/account (具體關係到Plasma 實現的時候資產的表達形式)的新舊,優先從舊的開始撤回。

 

這是最初版本的Plasma 設計,鏈中鏈的樹狀結構是非常抽象的,並且實現非常複雜,於是很快Vitalik 提出了Minimal Viable Plasma,也就是Plasma MVP,MVP 的設計初衷是用簡單的機制設計來提供Plasma 設計中的基本安全特性。

 

因此在Plasma MVP 的設計中並不是「鏈中鏈」的形式而是一位驗證者運營一條鏈的形式,每次產生區塊都是在數據庫中加入一組數據,並且將Merkle Root 提交到根鏈(提交之後Plasma MVP 區塊才是確認)。在Plasma MVP 中資產用UTXO 的形式表達,並且它不能運行智能合約,僅僅作為資產交易,並且TPS 在數千左右(預計3000-5000)。

 

在資產安全性方面,Plasma MVP 設計瞭如下的資產撤回方案。在MVP 中每一個UTXO 根據區塊號、區塊內交易號和交易內輸出號都有一個優先級,越是舊的UTXO(說明長時間沒有人對這個UTXO 進行操作)會優先退出。此時若有人能夠在資產撤回的爭議期證明這個UTXO 在之後的交易中被改變,該次撤回會被證偽。

 

另一個設計是Plasma Cash,在Plasma Cash 中每一個token 有自己對應的一個id,就好像Non-fungiabe token 一樣,交易保存在稀疏默克爾樹中,每一個葉子就是對應一個token,每一個區塊都是一「棵」樹,若本區塊中某個token沒有轉移,那麼用空值表示。

 

由此,用戶只需要追踪屬於自己token ,證明交易變得非常迅速。並且,作惡者需要一個個竊取token,作惡成本高,更加安全。

 

可以看到,雖然一開始Plasma 設計是為了以太坊計算能力的擴容,但是目前實現的方案僅僅涉及到資產的轉移:僅僅是很簡單的UTXO(如Plasma MVP) 或者NFT(如Plasma Cash),卻並不能運行智能合約,不能如Vitalik 最早想做的那樣:為以太坊做計算能力的擴容。

 

這裡確實是遇到了瓶頸性問題,主要在於:為什麼資產從Plasma 上退出那麼難?

 

如果在Plasma上構建智能合約,如ERC 20的資產。實際上資產並不是在用戶的賬戶裡,token的狀態是存儲在合約中的,通過指針的形式指向賬戶,用戶才能在錢包裡看到自己ERC 20的資產。每次ERC 20 token的轉賬實際上是調用相關合約改變合約裡token存儲的狀態。

 

那在Plasma 中,一個合約中包含所有用戶的資產,這些資產是否能一起退出?誰有權利讓所有人資產一起退出?

 

每個人都是能夠修改合約的整體狀態,那麼如何保證撤回時的爭議期其他人修改狀態,然後提交新的狀態證明駁回這次撤回?

 

並且,合約運行完全在Plasma 上,主鏈如何確認結果是正確的?(在以太坊上,這裡涉及到EVM in EVM 的問題,在以太坊虛擬機上驗證Plasma 上的EVM 狀態非常困難),目前可能還沒有很好的方案。

 

  • Plasma 和State channel 的區別

 

狀態通道(State Channel) 和Plasma 的最大區別在於,狀態通道中沒有第三方驗證者的角色,它的狀態更新是基於各方達成一致共識的前提下的,而Plasma 中則有驗證者的角色。

 

在狀態通道中一旦各方同意簽名狀態就能立即確認,在區塊鏈的基礎設施中僅狀態通道能夠做到即時確定性。Plasma 中用戶還是需要等待區塊確認(驗證者需要提交Merkle Root 到根鏈)才能確保自己交易的安全性。

 

  • 鏈下計算

 

交易能夠在Plasma 和狀態通道中快速運作,但是還有一類問題困擾以太坊,那就是大量的計算。在以太坊中設置了800 萬Gas Limit,並以以太幣作為度量,就是對「計算」這個稀缺資源的限制,運行合約進行計算價格十分高昂並且有區塊大小的限制。Plasma 中也存在一樣的問題。

 

那能否將計算任務放到鏈下處理並且保證安全性?

 

Truebit和TEE(Trust Execution Environment,可信執行環境)就是為解決鏈下計算問題出現的。要注意的是,鏈下計算並不提高吞吐量,僅僅是將復雜任務放到鏈下處理,再將結果返回到鏈上。

 

Truebit也是鏈上的智能合約,它的運行邏輯本質上是一種計算外包,用經濟激勵的形式來保證計算的安全。用戶向服務提供者描述計算任務,並約定給予獎勵,服務提供者將運算結果交給用戶來提交到主鏈的合約作為結果。網絡中會有很多挑戰者,他們會檢查服務提供者的結果,若發現問題,則做進一步對比,將不一致的代碼行放到區塊鏈上的智能合約上進行驗證,驗證成功能夠有經濟激勵。這就是Truebit提出的「驗證遊戲」。

 

TEE 可信執行環境一般是硬件設備,可以處理交易的驗證,如ARM 生產的、處理指紋的TrustZone,Intel 的SGX。銀行卡的芯片就是在TEE 中運行。TEE 的硬件就是一種黑盒子,計算(一般是安全性要求比較高的計算)會在黑盒子裡運行,然後返回結果,沒人能夠知道如何運行但是能夠知道結果是正確的,它能夠非常好的保護隱私。

 

但是它的安全性也非常明顯,計算會引入不可預知的風險,並且安全性依賴於製造的廠商:如果一個黑盒子被攻破,那麼所有同批次生產的都能夠被攻破。

 

03

總結

 

在整個市場進入寒冬的2018 年,我們反而看到了無數Layer 2 團隊開始出現,特別是狀態通道,已經出現了數十個團隊,針對不同場景、不同需求給出自己的解決方案。

 

圖片來自CoinFund

 

而Plasma 也出現不同的解決方案,在Ethresearch 上我們能夠看到一張Plasma 的「世界版圖」:

 

圖片來自Ethresearch

鏈下計算,除了Truebit 以外,Oasis Labs、TEEX、Stark、Transmute 等一眾團隊展開研究。

的確,如果一個由Layer 1 保證去中心化和安全的智能合約來設定規則,一個32 字節的Merkle Root 哈希值或是最終狀態的提交就能保證資產的安全,為什麼所有應用要直接放在操作昂貴、資源稀缺的公鏈上?

Layer 1 保障安全性和去中心化,Layer 2 來滿足性能的需求,Layer 1 為Layer 2 傳遞信任,這是未來加密經濟的基礎設施。

從2017 年的混亂,到2018 下半年的冷清,分層設計的項目不斷出現,Ethereum 也在周報中將Layer 1 和Layer 2 分開呈現,這幾乎已經是被業界廣泛認可的技術方向,終於,我們在混沌中找到了方向。

*如果你對更多的Layer 2方案感興趣, Github上有一個Awesome Layer 2的庫,裡面有非常多的資料,鏈接:https://github.com/Awesome-Layer-2/Awesome-Layer- 2

本文參考資料:

公眾號:Nervos Network

《Josh Stark:Making sense of Layer 2 》

《Plasma:Scalable Autonomous Smart Contracts 》

《Counterfactual:Generalized State Channels 》

《CelerNetwork - Whitepaper 》

《The state of state channel:2018 edition 》

《Plasma World Map - the hitchhiker's guide to the plasma 》