10月26日,由萬向區塊鏈實驗室主辦的第七屆區塊鏈全球峰會在上海舉行,Nervos network 架構師謝晗劍在題為《區塊鏈抽象和演進》的分享中稱,治理和抽像是區塊鏈面臨的新挑戰。以太坊改變了一切,它是把區塊鏈技術一般化,它去尋找利用區塊鏈技術的應用,發現它們的共性,然後為各種應用、場景和需求,創造一個平台,使得在以太坊上可以創造各種應用,包括支付、遊戲等。以太坊是抽象層次更高的系統,而未來的區塊鏈,追求不是性能更好,而是抽象層次更高,更加一般化的設計。他認為區塊鏈在抽象層面的問題有三個,比如特定的賬戶體系,特殊的密碼學算法,特殊的運行時。區塊鏈應該追求抽象層次越高,性能是副產品。
以下為演講全文:
大家好!我是Nervos Network 的架構師謝晗劍,很高興能和大家分享我今天想講的題目——《區塊鏈的抽象與演進》。
區塊鏈所面臨的最大挑戰是什麼?
不知道大家有沒有看過這樣一句話,意思是:今天新的區塊鏈所面臨的最大挑戰不是「速度」和「吞吐量」,而是「治理」。
所謂的第二代區塊鏈,新的區塊鏈發展到今天,已經有五六年的時間了,如果大家回顧之前一些想法的話,能夠看到當時的思路可能不是那麼正確。
幾年前大家想要做新的區塊鏈的時候,想的是「如果我解決了區塊鏈的性能問題,是不是就創造出了新一代的系統,就可以打敗以太坊,然後可以怎麼怎麼樣」等等。
但這幾年區塊鏈行業的發展已經把這個思路給證偽了,因為我們能夠看到有新的區塊鏈出來,它們的性能也確實非常好,但大家還是認為我們依然處於以太坊的時代,並沒有進入下一個時代,並沒有感覺到當年從「比特幣」進入到「以太坊」的時代,這種感覺並沒有,雖然今天新的區塊鏈已經有很好的性能,能每秒處理幾千筆交易。
有人說我們面臨的最大挑戰是「治理」。
其實我也是同意的,「治理」確實是現在區塊鏈行業面臨的很大問題,而且這個問題是「Open question」,是沒有答案的,不同區塊鏈社區、不同區塊鏈團隊都在探討怎麼對這樣一個開放性的P2P自治項目做治理。治理確實是很難的問題。
但是我想說,這不是唯一的問題,所以and「Abstraction」,「抽象」也很重要。
「治理」討論的問題是——我們作為社區能夠決定區塊鏈平台是不是應該做某件事情的話,那麼區塊鏈的「抽象」層次是決定什麼東西可以被搬到檯面上被治理、被討論,就什麼樣的問題討論該做還是不該做。
所以,我認為「抽象」也是新的區塊鏈所面臨的非常重要的挑戰。
什麼是「抽象」?
這個詞本身就很抽象。
抽象本身是比較技術的詞,有兩個解釋,我們只要關心第一個:所謂抽像是一個過程,我們把特殊性從一個系統裡去掉,然後從系統裡創造出一般性、普遍性。
這是一般化的過程,通過去掉特殊的設計,把共性找出來,讓系統可以變得更加一般化,可以適用於更多的場景。
這個解釋可能還是很抽象,大家要記住關鍵詞是要去掉「特殊性」,把「特殊性」從系統裡去掉,在系統裡找到更多共性「一般性」的東西放在設計裡創造「一般性」。
用一個不是那麼區塊鏈的例子解釋一下。
大家可能玩過遊戲機,至少我小時候會在遊戲廳裡玩大型所謂的街機。如果你了解這樣機器的話,你就知道每一台機器其實對應一個遊戲,這對於街機來說系統設計是從軟件到硬件一體的設計,所有設計都是圍繞一個目的服務的,就是這一款遊戲。
當我們需要創造另一個新遊戲的時候,我需要另外設計一台新的機器,所以遊戲廳裡擺了十台二十台機器,每台機器是不同的遊戲。
遊戲行業發展到今天最流行的東西已經不是街機了,更多的是像XBox 這種通用的遊戲平台。
XBox 是一般化的設計,你可以為XBox 設計各種各樣的遊戲,而後你只可以購買不同的遊戲就可以在這一個系統上運行去玩。
所以,從街機到XBOX 就是一般化的過程,從另外一個角度來說XBox 是抽象層次更高的設計,可以適用更多的場景,裡面為每一個特定遊戲所打造的特殊東西很少很少,幾乎沒有。
正是因為它沒有那些特殊的細節,在這個平台上的開發者才能填補細節,才能讓平台能夠適應各種各樣的需求。
當我們考察區塊鏈行業的發展,考察「Bitcoin」和「Ethereum」的進程也是這樣的過程。
「Bitcoin」想做什麼?
從白皮書、標題裡可以看到一開始的目的是想實現點對點的支付系統,這是有非常明確單一目的的系統,所以它的系統設計也是圍繞這個目的來做的。
在以太坊出現之前的時代,如果大家還有印象的話,我們想要全世界人都看到「Bitcoin」底層的技術非常有價值,不管是區塊鏈還是分佈式賬本。
當我們想用這個技術做另外事情的時候你能做什麼?你能做的只是Focus「Bitcoin」代碼,而不是利用「Bitcoin」的代碼做什麼事情。
但是以太坊的出現改變了這一切,以太坊說我們不需要這麼麻煩,我們可以把Bitcoin、區塊鏈變成更加一般化的系統,我們要找到那些利用區塊鏈技術的應用需求的共性,創造出一個平台出來,把只為支付服務這種特殊設計去掉,但是要把為各種各樣的共性需求找出來,為共性需求設計一個平台。
所以以太坊有虛擬機、運行環境,在以太坊上可以構造各種各樣不同的應用,比如支付、借貸、遊戲等等。
從「Bitcoin」到「Ethereum」是一般化的過程。
換句話說,以太坊其實是相對「Bitcoin」抽象層次更高的,就像XBox 相比於街機一樣。
如果沿著這個思路去考察的話,我們很容易可以想到要怎麼樣做的更好,如果真的要做出和現在這一代不一樣的區塊鏈的話,下一代是什麼樣子?
可能不是性能更好,應該是抽象更高。
怎麼把系統變得抽象層次更高呢?
回憶剛才的定義,要找到裡面的特殊設計和特殊細節,如果它不是共性的東西就把它砍掉,想辦法把它變成更加一般化的設計。
在今天的區塊鏈系統裡,有哪些特殊設計呢?我找到了幾個方面和大家分享一下:
(1)特定賬戶體系
區塊鍊是人和資產交互的系統,這裡面既然有人,有用戶,你就要為每個用戶建立一個賬戶、一個身份來代表它。怎麼驗證賬戶是屬於某個人的?賬戶內部的數據模型是怎麼樣的?這些東西在今天的區塊鏈系統裡都是硬編碼,由區塊鏈設計者幫開發者、幫用戶選定。作為用戶、開發者,你並沒有權利替換它。
以賬戶裡的驗證來舉例,不管是Bitcoin 還是Ethereum,都是系統指定的,一旦你想往系統中發一筆請求、構造交易,你必須要用特定的密碼學算法來簽名,這是強制性的設計。作為區塊鏈用戶,你沒有辦法更改它,它是寫死在系統裡的。
但是,這樣一個強制的設計其實會產生很多問題,其中最明顯的是造成區塊鏈用戶門檻非常高。由於歷史原因做出的特定選擇,和今天在很多互聯網場景裡用到的密碼學算法,是不一樣的。比如說,現在每個手機裡都有安全芯片,用安全芯片來保管私鑰是最方便、最安全的,但安全芯片可能用的是R1 或者RSA 的算法,而不是區塊鏈選擇的加密算法,不兼容就會導致你必須使用助記詞技術重新建立賬戶體系,而不能利用現有的賬戶體系。
現在,其他賬戶體系還有哪些?郵箱、人臉識別、生物特徵識別等等,其實有很多,但是這些跟區塊鏈的賬戶體係不兼容,這是特定設計帶來的障礙。
(2)特殊的密碼學算法
比如說,今天我在某一個區塊鏈上想要開發一款應用,我不想用這個平台指定的幾個有限選擇,怎麼辦?你不能怎麼辦,你啥也做不了。
在以太坊裡,有一種Precompiles是寫在EVM 虛擬機裡的特定密碼學算法,如果你不想用這個算法的話,你也許可以用Solidity 重新實現一個,但效率非常低,因為EVM 本身效率也非常低。
這會帶來什麼問題呢?密碼學算法其實是一種標準,不同國家的密碼學算法標準不一樣,美國也美密,中國有國密,但區塊鏈的選擇不是任何一種標準。這意味著,當區塊鏈的應用想要走到真實場景裡的話,很難兼容現有的標準,這其實是區塊鏈技術推廣的障礙。
(3)運行時環境
現在,幾乎所有的區塊鏈平台都支持智能合約,智能合約需要運行在恰當的環境裡,這個環境可能包括虛擬機、狀態模型。運行時環境本身也可以分為計算時、運行時、驗證運行時等等,各自都有很多不同的選擇。比如說,虛擬機可以用EVM,也可以用RISC-V 虛擬機等。但今天看到的每個區塊鏈設計,都是由區塊鏈設計者幫開發者選定了特定的組合,開發者無法自由選擇不同的選項,這會給開發者帶來門檻。開發者為了進入區塊鏈的體系,可能需要學習一套完全不同於今天工作裡用到的東西,在我們看來這個限制也很大。
不光是對開發者有學習成本,對區塊鏈性能方面、安全方面都有影響。總而言之,區塊鏈系統者給你做了選擇,你只要用區塊鏈系統就不能再做其他的選擇。
以上三個方面是現在能夠看到的區塊鏈在抽象層次上比較大的問題,我們也希望解決這些問題。解決的方式,說起來也很簡單。既然找到了問題,就要對賬戶做抽象,對密碼學做抽象,對運行時做抽象,給用戶和開發者更多的選擇。
我們是怎麼做的呢?在賬戶抽像一層,Nervos 推出了新的數據賬號模型——Cell model。有了賬號抽象之後,能夠實現什麼樣的效果呢?在抽象賬戶上的應用,可以被不同地方的用戶用到。
比如說,你是普通的互聯網用戶,你只有郵箱,你可以直接使用區塊鏈上的應用,你不需要下載新的錢包入口,你也不需要設置你的私鑰、助記詞,你可以直接使用郵箱做賬戶就好了。
我們同樣也可以利用手機的安全芯片,安全、方便地幫你建立一個賬戶。如果你的手機芯片和人臉識別是關聯的,你可以直接用人臉識別控制賬戶,整個過程中你不需要學習區塊鏈任何特殊的東西,只要用你現有的東西就可以了。
Nervos 上已經有不少應用在這樣做了,像Unipass這樣的應用就是一個基於e-mail的去中心化區塊鏈賬戶系統,還有像DAS這樣的應用,也是利用抽象賬戶的特性,使得互聯網用戶、以太坊用戶、EOS用戶都可以直接操作應用,而不是只有Nervos用戶可以操作應用,這是互操作性。
如何做密碼學抽象?
密碼學抽象的核心是需要有非常高效的虛擬機。我們自己實現的高效虛擬機是CKB-VM,它採用的是開放指令級RISC-V,得益於RISC-V指令級的特性,CKB-VM可以讓開發者用C和Rust來實現密碼學算法,好處不僅僅是高效,並且很多成熟的密碼學算法實現可以直接被搬到區塊鏈上來運行,也就是說它們可以被搬到Nervos上運行。
密碼學算法的實現其實非常困難,如果我們先去實現密碼學算法,那麼這樣會很容易出錯。如何判斷密碼學算法的實現是不是安全的?唯一的最好的檢驗標準就是它的成熟度和使用時間,使用的人越多,使用的時間越長就越安全。
能夠直接移植C和Rust做的密碼學好處是不需要重新實現一套,如果用Solidity重新實現一套,那麼安全性就值得考慮,因為它是新做的事情,裡面可能會有bug,需要時間矯正。
通過高性能的EVM,通過支持C和Rust的EVM,可以高效復用現在大部分的密碼學算法,因為現在大部分現有的密碼學算法就是用C和Rust實現。
運行時的抽象怎麼做?
對於開發者來說,開發者不會被迫去使用某一種語言做開發,而是可以使用日常就已經很熟悉的語言來做開發,無論是JAVAscript、Ruby、Rust、C等,都可以被用來做開發。而且在寫智能合約時,智能合約內部的內存佈局、數據佈局也並不是規定好的,而是可以有很靈活的選擇,這是我們想要實現的目標。
Nervos其實是在這樣的方向上改進區塊鏈的,我們想要創造的可能不是速度更快的區塊鏈,而是抽象層次更高的區塊鏈。但是當抽象層次能夠做到更高之後,我們能夠做的事情會更多,性能也好、吞吐量也好,會是抽象層次變高帶來的副作用。
當抽象層次更高之後,我們就會把更多事情移到鏈外,或者如今天上午維塔利克所說的移到Layer 2 去做。 Layer 1與Layer 2的分離,或者說計算與驗證的分離是抽像變化層次的副作用,所以我們應該追求的是抽象層次的變化,而不是直接追求性能的變化。
就好像我們從XBOX變成了PC,XBOX雖然是一般化的通用平台,但其實它還是給了人們很多的限制,我們可以給它做不同的遊戲,但是不能改它的硬件。 PC把這個限制也去掉了,在硬件層也做了更加一般化的處理,PC允許人們換顯卡、CPU、內存、主板、硬盤。所以PC是更加一般化的系統,它是一個標準。從這個角度來講,PC是比XBOX抽象層次更高的系統,能夠做更高的事情,能夠滿足用戶更多的需求,能夠給開發者帶來更多的方便。