分層的加密經濟網絡下的底層公鏈設計原則

從分層的角度來看,現有的區塊鏈在設計時考慮的是特定的功能(例如支付,或者是運行 DApp),並但願在運行一段時間後,讓上層協議來適應本身。然而區塊鏈並不自然是 Layer 1,Layer 1 是須要設計的。在分層的大框架下,上層協議和分層網絡分別有着怎樣的需求?Layer 1 和 Layer 2 應該分別對應着怎樣的角色,承擔怎樣的職能?Layer 1 應該作什麼?Nervos 架構師 Jan 給出了他的答案。

祕猿科技區塊鏈小課堂第 13 期程序員


Nervos Approach

Nervos Network 的技術目標是設計一個分層的加密經濟網絡。這樣一個出發點帶來的是一個不同凡響的設計思路,咱們本身把它稱爲「Nervos Approach」:算法

若是咱們認爲分層是將來的發展方向,咱們應該從一開始就考慮到上層協議和分層網絡的需求,在分層的大框架下設計區塊鏈協議。編程

換句話說,從分層的角度來看,現有的區塊鏈設計方式都是過期的。現有的區塊鏈在設計時考慮的是特定的功能(例如支付,或者是運行 DApp),並但願在運行一段時間後,讓上層協議來適應本身。然而若是咱們閱讀互聯網的歷史就知道,今天互聯網的協議分層不是這樣打補丁打出來的,相反是在吸取過去經驗以後基於分層的思路從新設計出來的[1](是的,互聯網協議也是分層的,咱們說的 TCP/IP 其實是兩個協議的名字)。Nervos Approach 是向互聯網學習的產物。安全

這是爲何區塊鏈並不自然是 Layer 1,Layer 1 是須要設計的。這也是爲何咱們選擇設計 CKB 這樣一個新的區塊鏈協議的緣由。網絡

Layer 1 vs. Layer 2

要弄清 Layer 1 應該作什麼,首先要弄清楚它和上層協議的區別。Layer 2 起源於咱們發現公有鏈(這裏指 Permissionless Blockchain)的性能不足,很難擴容到知足整個加密經濟體需求的水平,同時咱們又很是迷戀公有鏈提供的可用性和極大的服務範圍,所以慢慢演化出了一系列能夠由區塊鏈來保證安全的 Layer 2 協議,例如支付通道(Payment Channel),Plasma,etc.數據結構

這些協議的共同特色是犧牲共識範圍來換取性能。公有鏈最讓人驚豔的地方是經過開放網絡,提供不間斷的覆蓋全球的服務,這意味着全球共識,也意味着性能低下。解決這個問題的最好方式是將大部分交易轉移到共識範圍更小,可是性能更好的上層協議中,而且保證上層協議的參與者老是能夠在不滿意的時候退回到區塊鏈上來解決問題[2],代價僅僅是一些時間成本。架構

所以做爲 Layer 1 的區塊鏈,關注點顯然不該該是性能,由於 Layer 2 會承擔這個職責。Layer 1 是保障上層協議參與者的最後防線,它的關注點應該是安全和去中心化(安全和去中心化是兩個東西,有時間再展開)。若是咱們觀察 Layer 2 協議與 Layer 1 交互的模式,咱們還會發現,Layer 1 負責的是狀態共識(存儲),Layer 2 負責的是狀態生成(計算)。框架

計算與狀態

程序員的世界中有一個流傳甚廣的公式:程序 = 算法 + 數據結構[3]。這個等式指出了程序設計的兩個核心關注點,計算(算法,即計算的步驟)與數據(計算的對象)。而數據又能夠分爲兩種,程序輸入(外部數據)和狀態(內部數據)。less

計算機科學中的「狀態」一詞能夠理解爲程序在運行時,某個特定時刻可訪問的一切數據。程序中有變量,變量一般表明着內存中的一個能夠存放數據的位置,這個位置的內容就是程序的狀態。一段程序的輸出徹底取決於它的輸入和其開始執行時的狀態。計算(CPU)、輸入/輸出(IO)與狀態(內存)構成了完整的馮諾依曼體系[4],今天最流行的計算架構。性能

圖片描述

以支付通道爲例

在支付通道中,Layer 2 的共識範圍縮小到兩人之間,這是最小範圍的共識。參與通道的兩人進行的操做以下:

向 Layer 1 發送交易創建通道,鎖定特定的狀態,鎖定的狀態只有用 Alice 和 Bob 雙方的簽名才能更新

例如,Alice 鎖定 1 BTC,Bob 鎖定 1 BTC,咱們用(1, 1)表示在 Layer 1 鎖定的狀態
雙方經過鏈外的網絡鏈接(Layer 2),產生並交換新的狀態,各自簽名
Alice → Bob 0.5 BTC,Alice/Bob 在本地保存的新狀態爲(0.5, 1.5)
Bob → Alice 0.1 BTC, Alice/Bob在本地保存的新狀態爲(0.6, 1.4)

最後一次交換後,Alice/Bob 在本地保存的新狀態爲(0.2, 1.8),並且雙方都對該狀態進行了簽名

向 Layer 1 發送最終的狀態,Layer 1 驗證最終提交的狀態有 Alice/Bob 雙方的簽名,更新鎖定的狀態爲(0.2, 1.8)並解鎖

圖片描述

從這個例子咱們很容易看到,在整個過程當中,咱們一般討論的計算分紅了兩個部分進行:新狀態的生成,新狀態的驗證。前者發生在 Layer 2,然後者發生在 Layer 1。若是咱們觀察其餘的 Layer 2 協議,例如 Plasma 或者是 TrueBit,很容易獲得相似的結論。正由於 Layer 1 會驗證 Layer 2 產生的狀態,咱們纔可以作到經過 Layer 1 保證 Layer 2 的安全,由於 Layer 2 的用戶在遇到問題時,老是能夠請求 Layer 1 來作某種形式的驗證(這是爲何 Layer 1 能夠看做是「Crypto Court」,由於它是一個能識別密碼學證實的「法院」)。

所以在分層架構下,Layer 1 的關注點應該是狀態的驗證(和存儲),Layer 2 的關注點應該是狀態的生成。經過將狀態的生成轉移到 Layer 2,將生成和驗證分離,咱們的分層網絡兼顧了性能(Layer 2)、安全和去中心化(Layer 1)。

任何程序都有計算和狀態,區塊鏈上運行的程序(DApp)天然也不例外,在分層架構上構建應用時,須要考慮在哪裏產生狀態,在哪裏驗證狀態,在哪裏保存狀態。因爲狀態的生成和驗證分離,狀態生成的方法能夠和驗證解耦,狀態生成沒必要被 Layer 1 的編程模型綁定,具備更大的自由度。只要能經過 Layer 1 驗證,狀態的生成甚至能夠是中心化的(事實上大部分 Plasma 協議中只有一個 Operator!)。

圖片描述

Layer 1 應該作什麼

咱們在說「計算」的時候,實際上說的是「狀態生成」。在通常的計算模型裏面,不存在信任和安全問題(個人 CPU 不會用假的結果騙我),因此生成就好,不考慮驗證;可是在區塊鏈網絡裏面,咱們不只須要生成,還須要驗證。Layer 1 的關注點應該是狀態的驗證和存儲,而不是狀態生成(但願你沒有被繞暈……)。

由此咱們終於能夠推出 Layer 1 應該作什麼:

須要一個安全的共識協議,範圍越大越好。基於 PoW 的 Nakamoto Consensus 正是這樣一個協議,這是惟一一個在現實環境中通過驗證的全球共識。
須要可編程能力,以支持各類狀態驗證邏輯,這意味着咱們須要一個強大的編程模型(狀態模型+虛擬機)。
須要可以理解各類密碼學證實,由於區塊鏈協議是基於密碼學構建的,Layer 1 與 Layer 2 之間傳遞的證實是密碼學證實。
須要管理好狀態,由於通過驗證的狀態會留在 Layer 1 上。這意味着咱們須要一個關注狀態的經濟模型。

[1]https://en.wikipedia.org/wiki...
[2]https://en.wikipedia.org/wiki...
[3]https://en.wikipedia.org/wiki...
[4]https://en.wikipedia.org/wiki...

關於 Nervos

Nervos Network 由 Nervos 基金會推進,經過分層設計,兼顧性能、安全以及去中心化的特性,知足多樣化的商業場景需求,爲將來加密經濟提供基礎設施。

關於 CKB

Nervos Common Knowledge Base(CKB)是一個無需許可鏈,它是 Nervos Network 的基礎層,並在設計上提出了一些理念:

CKB 共識協議 NC-MAX 使用兩階段提交節約帶寬,並根據網絡狀況調整自身參數,提高了 Nakamoto Consensus 的可擴展性CKB 虛擬機採用底層 CPU 指令集架構 RISC-V 開發,提供更高的開發彈性與運行的穩定性CKB Cell Model 是比特幣 UTXO 模型的通用化,可以驗證和存儲任何類型的數據CKB 經濟模型用貨幣政策限制狀態存儲的增加,並實現智能合約平臺的價值存儲功能

相關文章
相關標籤/搜索