分層的加密經濟網絡下的二層擴容方案

在 2016 年祕猿科技成立之初,咱們就認爲共識是分層的,最下面最基礎、最昂貴、最慢的,是全世界範圍的共識。可是咱們一層一層往上看的話,共識範圍會愈來愈小,那麼上面共識範圍更小的地方,是否是要用區塊鏈或者用什麼區塊鏈都是咱們能夠探討的地方。因此,在 2016 年咱們都以爲許可鏈和公有鏈都是很是有前景的,而且開創性的提出了公有許可鏈的概念。在 2018 年,咱們正式做爲 Nervos 公鏈的實現者,開啓了加密經濟生態的構造中。在祕猿小課堂第 13 期中,咱們爲你們解析了 Nervos 加密經濟中,底層公鏈 CKB 的所須要承擔的職能。在這一期中,咱們將會來談談 layer2 應該作什麼?

祕猿科技區塊鏈小課堂第 14 期數據庫


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 等等一衆新星,在時間和資源都極度稀缺的狀況下根據本身發現的需求,針對不一樣的場景給出本身的解決方案,準備迎接將來加密經濟應用的爆發。網絡

公鏈,不能治百病

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

圖片描述

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

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

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

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

圖片描述

如圖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 的安全。

所以,咱們提出最核心的兩個觀點:

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),在該標準下的應用可以在由同一個狀態通道合約執行,由此廣義狀態通道可以容許用戶在不關閉通道的狀況下運行多種應用。

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

圖片描述

圖中 V一、V二、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 truly 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 撤回資產,提交相關證實到上一層(根鏈/父鏈)的合約中進行請求,以後會有一段時間的爭議期,主要爭議兩個內容:一、是否該筆資產已經被花費或者撤回;二、是否該證實是來自最新的狀態,而不是舊的狀態。爭議期以後,資產會根據 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 的硬件就是一種黑盒子,計算(通常是安全性要求比較高的計算)會在黑盒子裏運行,而後返回結果,沒人可以知道如何運行可是可以知道結果是正確的,它可以很是好的保護隱私。

可是它的安全性也很是明顯,計算會引入不可預知的風險,而且安全性依賴於製造的廠商:若是一個黑盒子被攻破,那麼全部同批次生產的都可以被攻破。

總結

在整個市場進入寒冬的 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 分開呈現,這幾乎已是被業界普遍承認的技術方向,終於,咱們在混沌中找到了方向。

相關文章
相關標籤/搜索