區塊鏈帶來了強大的去中心化應用生態,無數人對它寄以厚望,希望區塊鏈能夠打破金融孤島。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 已經到來。
Why Layer 2 ?
試圖用一層區塊鏈方案解決所有問題的人,往往沒有思考過一個很重要的問題:公鏈雖能夠達成全球共識,公共可驗證,但是否所有的資訊都需要讓所有人驗證、知道?我們之間的日常交易是否需要讓全世界的人稽覈?
如果我不做違法的事情,當然不會介意,但是這顯然沒有必要。我們只需要將最關鍵的資訊讓所有人驗證、獲取保障就夠了。而 Layer 2 恰好就能滿足這樣的需求:我們將大量工作放到鏈下(Off Chain),僅將最重要的內容提交 Layer 1 鏈上(On Chain)進行驗證,並且 Layer 1 能夠保證 Layer 2 的安全。
因此,我們提出最核心的兩個觀點:
· 不是所有的東西都需要全球共識
· 公鏈就該做它應該做的事情,其他的事情完全可以鏈下完成
那什麼樣的方案能夠被稱為 Layer 2 ?
· 首先,應用的主要工作都是在鏈下;
· 其次,僅用 Layer 1 作為安全的錨點,保證鏈下環境的安全;
· 最後,和 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),在該標準下的應用能夠在由同一個狀態通道合約執行,由此廣義狀態通道能夠允許使用者在不關閉通道的情況下執行多種應用。舉例來說,你可以在廣義狀態通道中先執行五子棋遊戲,之後進行支付,然後打一輪撲克牌。其中執行的應用的狀態更新都基於同一個標準,在區塊鏈上的合約都能夠處理。
而 Plasma 也出現不同的解決方案,在 Ethresearch 上我們能夠看到一張 Plasma 的“世界版圖”:
鏈下計算,除了 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) 5
作者:Ryan,Community manager at Nervos Network
關於 Nervos Network:Nervos Network 是一個專門為 Layer 2 打造的 Layer 1 底層公鏈,致力於為未來加密經濟構建基礎設施。
參考:
[1]公眾號:Nervos Network
[2]Josh Stark:Making sense of Layer 2
[3]Plasma:Scalable Autonomous Smart Contracts
[4]Counterfactual:Generalized State Channels
[5]CelerNetwork - Whitepaper
[6]The state of state channel:2018 edition
[7]Plasma World Map - the hitchhiker’s guide to the plasma