Nervos 謝晗劍:深入探討區塊鏈的抽象與演進


演講:謝晗劍,Nervos Network 架構師

大家好!我是 Nervos Network 的架構師謝晗劍,很高興能和大家分享我今天想講的題目——《區塊鏈的抽象與演進》。

區塊鏈所面臨的最大挑戰是什麼?

不知道大家有沒有看過這樣一句話,意思是:今天新的區塊鏈所面臨的最大挑戰不是「速度」和「吞吐量」,而是「治理」。

所謂的第二代區塊鏈,新的區塊鏈發展到今天,已經有五六年的時間了,如果大家回顧之前一些想法的話,能夠看到當時的思路可能不是那麼正確。

幾年前大家想要做新的區塊鏈的時候,想的是「如果我解決了區塊鏈的效能問題,是不是就創造出了新一代的系統,就可以打敗以太坊,然後可以怎麼怎麼樣」等等。

但這幾年區塊鏈行業的發展已經把這個思路給證偽了,因為我們能夠看到有新的區塊鏈出來,它們的效能也確實非常好,但大家還是認為我們依然處於以太坊的時代,並沒有進入下一個時代,並沒有感覺到當年從「Bitcoin」進入到 「Ethereum」的時代,這種感覺並沒有,雖然今天新的區塊鏈已經有很好的效能,能每秒處理幾千筆交易。

有人說我們面臨的最大挑戰是「治理」。

其實我也是同意的,「治理」確實是現在區塊鏈行業面臨的很大問題,而且這個問題是「Open question」,是沒有答案的,不同區塊鏈社羣、不同區塊鏈團隊都在探討怎麼對這樣一個開放性的 P2P 自治專案做治理。治理確實是很難的問題。

但是我想說,這不是唯一的問題,所以 and「Abstraction」,「抽象」也很重要。「治理」討論的問題是——我們作為社羣能夠決定區塊鏈平臺是不是應該做某件事情的話,那麼區塊鏈的「抽象」層次是決定什麼東西可以被搬到檯面上被治理、被討論,就什麼樣的問題討論該做還是不該做。

所以,我認為「抽象」也是新的區塊鏈所面臨的非常重要的挑戰。

什麼是「抽象」?

這個詞本身就很抽象。

抽象本身是比較技術的詞,有兩個解釋,我們只要關心第一個:所謂抽象是一個過程,我們把特殊性從一個系統裡去掉,然後從系統裡創造出一般性、普遍性。

這是一般化的過程,通過去掉特殊的設計,把共性找出來,讓系統可以變得更加一般化,可以適用於更多的場景。

這個解釋可能還是很抽象,大家要記住關鍵詞是要去掉「特殊性」,把「特殊性」從系統裡去掉,在系統裡找到更多共性「一般性」的東西放在設計裡創造「一般性」。

用一個不是那麼區塊鏈的例子解釋一下。

大家可能玩過遊戲機,至少我小時候會在遊戲廳裡玩大型所謂的街機。如果你瞭解這樣機器的話,你就知道每一臺機器其實對應一個遊戲,這對於街機來說系統設計是從軟體到硬體一體的設計,所有設計都是圍繞一個目的服務的,就是這一款遊戲。


當我們需要創造另一個新遊戲的時候,我需要另外設計一臺新的機器,所以遊戲廳裡擺了十臺二十臺機器,每臺機器是不同的遊戲。

遊戲行業發展到今天最流行的東西已經不是街機了,更多的是像 XBox 這種通用的遊戲平臺。

XBox 是一般化的設計,你可以為 XBox 設計各種各樣的遊戲,而後你只可以購買不同的遊戲就可以在這一個系統上執行去玩。

所以,從街機到 XBOX 就是一般化的過程,從另外一個角度來說 XBox 是抽象層次更高的設計,可以適用更多的場景,裡面為每一個特定遊戲所打造的特殊東西很少很少,幾乎沒有。

正是因為它沒有那些特殊的細節,在這個平臺上的開發者才能填補細節,才能讓平臺能夠適應各種各樣的需求。

當我們考察區塊鏈行業的發展,考察「Bitcoin」和「Ethereum」的程序也是這樣的過程。

「Bitcoin」想做什麼?

從白皮書、標題裡可以看到一開始的目的是想實現點對點的支付系統,這是有非常明確單一目的的系統,所以它的系統設計也是圍繞這個目的來做的。

在以太坊出現之前的時代,如果大家還有印象的話,我們想要全世界人都看到「Bitcoin」底層的技術非常有價值,不管是區塊鏈還是分散式賬本。

當我們想用這個技術做另外事情的時候你能做什麼?你能做的只是 Focus「Bitcoin」程式碼,而不是利用「Bitcoin」的程式碼做什麼事情。

但是以太坊的出現改變了這一切,以太坊說我們不需要這麼麻煩,我們可以把 Bitcoin、區塊鏈變成更加一般化的系統,我們要找到那些利用區塊鏈技術的應用需求的共性,創造出一個平臺出來,把只為支付服務這種特殊設計去掉,但是要把為各種各樣的共性需求找出來,為共性需求設計一個平臺。

所以以太坊有虛擬機器、執行環境,在以太坊上可以構造各種各樣不同的應用,比如支付、借貸、遊戲等等。

從「Bitcoin」到「Ethereum」是一般化的過程。


換句話說,以太坊其實是相對「Bitcoin」抽象層次更高的,就像 XBox 相比於街機一樣。

如果沿著這個思路去考察的話,我們很容易可以想到要怎麼樣做的更好,如果真的要做出和現在這一代不一樣的區塊鏈的話,下一代是什麼樣子?

可能不是效能更好,應該是抽象更高。

延伸閱讀  ProShares 比特幣 ETF 讓人期待,但也存在一些潛在風險

怎麼把系統變得抽象層次更高呢?

回憶剛才的定義,要找到裡面的特殊設計和特殊細節,如果它不是共性的東西就把它砍掉,想辦法把它變成更加一般化的設計。

在今天的區塊鏈系統裡,有哪些特殊設計呢?我找到了幾個方面和大家分享一下:

特定賬戶體系


區塊鏈是人和資產互動的系統,這裡面既然有人,有使用者,你就要為每個使用者建立一個賬戶、一個身份來代表它。怎麼驗證賬戶是屬於某個人的?賬戶內部的資料模型是怎麼樣的?這些東西在今天的區塊鏈系統裡都是硬編碼,由區塊鏈設計者幫開發者、幫使用者選定。作為使用者、開發者,你並沒有權利替換它。

以賬戶裡的驗證來舉例,不管是 Bitcoin 還是 Ethereum,都是系統指定的,一旦你想往系統中發一筆請求、構造交易,你必須要用特定的密碼學演算法來簽名,這是強制性的設計。作為區塊鏈使用者,你沒有辦法更改它,它是寫死在系統裡的。

但是,這樣一個強制的設計其實會產生很多問題,其中最明顯的是造成區塊鏈使用者門檻非常高。由於歷史原因做出的特定選擇,和今天在很多網際網路場景裡用到的密碼學演算法,是不一樣的。比如說,現在每個手機裡都有安全晶片,用安全晶片來保管私鑰是最方便、最安全的,但安全晶片可能用的是 R1 或者 RSA 的演算法,而不是區塊鏈選擇的加密演算法,不相容就會導致你必須使用助記詞技術重新建立賬戶體系,而不能利用現有的賬戶體系。

現在,其他賬戶體系還有哪些?郵箱、人臉識別、生物特徵識別等等,其實有很多,但是這些跟區塊鏈的賬戶體系不相容,這是特定設計帶來的障礙。

特殊的密碼學演算法


比如說,今天我在某一個區塊鏈上想要開發一款應用,我不想用這個平臺指定的幾個有限選擇,怎麼辦?你不能怎麼辦,你啥也做不了。

在以太坊裡,有一種 Precompiles 是寫在 EVM 虛擬機器裡的特定密碼學演算法,如果你不想用這個演算法的話,你也許可以用 Solidity 重新實現一個,但效率非常低,因為 EVM 本身效率也非常低。

這會帶來什麼問題呢?密碼學演算法其實是一種標準,不同國家的密碼學演算法標準不一樣,美國有美密,中國有國密,但區塊鏈的選擇不是任何一種標準。這意味著,當區塊鏈的應用想要走到真實場景裡的話,很難相容現有的標準,這其實是區塊鏈技術推廣的障礙。

執行時環境


現在,幾乎所有的區塊鏈平臺都支援智慧合約,智慧合約需要執行在恰當的環境裡,這個環境可能包括虛擬機器、狀態模型。執行時環境本身也可以分為計算時、執行時、驗證執行時等等,各自都有很多不同的選擇。比如說,虛擬機器可以用 EVM,也可以用 RISC-V 虛擬機器等。但今天看到的每個區塊鏈設計,都是由區塊鏈設計者幫開發者選定了特定的組合,開發者無法自由選擇不同的選項,這會給開發者帶來門檻。開發者為了進入區塊鏈的體系,可能需要學習一套完全不同於今天工作裡用到的東西,在我們看來這個限制也很大。

不光是對開發者有學習成本,對區塊鏈效能方面、安全方面都有影響。總而言之,區塊鏈系統者給你做了選擇,你只要用區塊鏈系統就不能再做其他的選擇。

以上三個方面是現在能夠看到的區塊鏈在抽象層次上比較大的問題,我們也希望解決這些問題。解決的方式,說起來也很簡單。既然找到了問題,就要對賬戶做抽象,對密碼學做抽象,對執行時做抽象,給使用者和開發者更多的選擇。


我們是怎麼做的呢?在賬戶抽象一層,Nervos 推出了新的資料賬號模型——Cell model。有了賬號抽象之後,能夠實現什麼樣的效果呢?在抽象賬戶上的應用,可以被不同地方的使用者用到。

比如說,你是普通的網際網路使用者,你只有郵箱,你可以直接使用區塊鏈上的應用,你不需要下載新的錢包入口,你也不需要設定你的私鑰、助記詞,你可以直接使用郵箱做賬戶就好了。

我們同樣也可以利用手機的安全晶片,安全、方便地幫你建立一個賬戶。如果你的手機晶片和人臉識別是關聯的,你可以直接用人臉識別控制賬戶,整個過程中你不需要學習區塊鏈任何特殊的東西,只要用你現有的東西就可以了。

Nervos 上已經有不少應用在這樣做了,像 Unipass 這樣的應用就是一個基於 e-mail 的去中心化區塊鏈賬戶系統,還有像 DAS 這樣的應用,也是利用抽象賬戶的特性,使得網際網路使用者、以太坊使用者、EOS 使用者都可以直接操作應用,而不是隻有 Nervos 使用者可以操作應用,這是互操作性。

如何做密碼學抽象?


密碼學抽象的核心是需要有非常高效的虛擬機器。我們自己實現的高效虛擬機器是 CKB-VM,它採用的是開放指令級 RISC-V,得益於 RISC-V 指令級的特性,CKB-VM 可以讓開發者用 C 和 Rust 來實現密碼學演算法,好處不僅僅是高效,並且很多成熟的密碼學演算法實現可以直接被搬到區塊鏈上來執行,也就是說它們可以被搬到 Nervos 上執行。

延伸閱讀  簡述 NuCypher 與 Keep Network 合併始末及 tBTC V2 進展

密碼學演算法的實現其實非常困難,如果我們先去實現密碼學演算法,那麼這樣會很容易出錯。如何判斷密碼學演算法的實現是不是安全的?唯一的最好的檢驗標準就是它的成熟度和使用時間,使用的人越多,使用的時間越長就越安全。

能夠直接移植 C 和 Rust 做的密碼學好處是不需要重新實現一套,如果用 Solidity 重新實現一套,那麼安全性就值得考慮,因為它是新做的事情,裡面可能會有 bug,需要時間矯正。

通過高效能的 EVM,通過支援 C 和 Rust 的 EVM,可以高效複用現在大部分的密碼學演算法,因為現在大部分現有的密碼學演算法就是用 C 和 Rust 實現。

執行時的抽象怎麼做?


對於開發者來說,開發者不會被迫去使用某一種語言做開發,而是可以使用日常就已經很熟悉的語言來做開發,無論是 JAVAscript、Ruby、Rust、C 等,都可以被用來做開發。而且在寫智慧合約時,智慧合約內部的記憶體佈局、資料佈局也並不是規定好的,而是可以有很靈活的選擇,這是我們想要實現的目標。

Nervos 其實是在這樣的方向上改進區塊鏈的,我們想要創造的可能不是速度更快的區塊鏈,而是抽象層次更高的區塊鏈。但是當抽象層次能夠做到更高之後,我們能夠做的事情會更多,效能也好、吞吐量也好,會是抽象層次變高帶來的副作用。


當抽象層次更高之後,我們就會把更多事情移到鏈外,或者如今天上午 Vitalik 所說的移到 Layer 2 去做。Layer 1 與 Layer 2 的分離,或者說計算與驗證的分離是抽象變化層次的副作用,所以我們應該追求的是抽象層次的變化,而不是直接追求效能的變化。


就好像我們從 XBOX 變成了 PC,XBOX 雖然是一般化的通用平臺,但其實它還是給了人們很多的限制,我們可以給它做不同的遊戲,但是不能改它的硬體。PC 把這個限制也去掉了,在硬體層也做了更加一般化的處理,PC 允許人們換顯示卡、CPU、記憶體、主機板、硬碟。所以 PC 是更加一般化的系統,它是一個標準。從這個角度來講,PC 是比 XBOX 抽象層次更高的系統,能夠做更高的事情,能夠滿足使用者更多的需求,能夠給開發者帶來更多的方便。

如果大家對 Nervos 有更多興趣的話,可以訪問 Nervos 的官網,我的演講就到這裡,謝謝大家!

Scroll to Top