區(qū)塊鏈的出現(xiàn)使得智能合約得到了更好的實(shí)現(xiàn)和發(fā)展,而區(qū)塊鏈和智能合約之間,還存在著一個(gè)重要的角色:虛擬機(jī)(Virtual Machine)。
虛擬機(jī)的概念在上個(gè)世紀(jì)六十年代就被提出來(lái),而到九十年代才開(kāi)始流行。當(dāng)時(shí)的網(wǎng)絡(luò)跨越了眾多不同的操作系統(tǒng)、瀏覽器,如果開(kāi)發(fā)者想要制作一個(gè)應(yīng)用,就需要去適配所有不同的操作系統(tǒng)。大家知道現(xiàn)在 App 開(kāi)發(fā)就分為安卓和蘋果系統(tǒng),而當(dāng)時(shí)局面更加復(fù)雜。恰好 Java 程序語(yǔ)言開(kāi)始流行,Java 構(gòu)建的虛擬機(jī)能夠讓程序只需要寫一次,依托 Java 虛擬機(jī)就能夠在多個(gè)平臺(tái)上運(yùn)行,所以當(dāng)時(shí)提出的口號(hào)就是:一處編譯、到處運(yùn)行。
我們知道比特幣是沒(méi)有虛擬機(jī)的,因?yàn)楸忍貛啪褪前岩欢螖?shù)字(也就是「比特幣」)從地址 A 轉(zhuǎn)移到地址 B,而以太坊則提出,區(qū)塊鏈上執(zhí)行的為什么不能是一套代碼,能夠?qū)崿F(xiàn)更多復(fù)雜多樣的東西?這就是我們所說(shuō)的智能合約平臺(tái),所有節(jié)點(diǎn)運(yùn)行一樣的合約代碼得到完全一樣的結(jié)果。
在區(qū)塊鏈上,虛擬機(jī)就是智能合約的運(yùn)行環(huán)境,是一個(gè)可以完全對(duì)外隔離的完整計(jì)算機(jī)體系。區(qū)塊鏈通過(guò)虛擬機(jī)來(lái)調(diào)用和執(zhí)行智能合約,并要求所有節(jié)點(diǎn)都達(dá)成一致。而節(jié)點(diǎn)用的是不同的系統(tǒng),有些機(jī)器是 64 位的,有些是 32 位的,傳統(tǒng)的 Java 虛擬機(jī)容忍計(jì)算結(jié)果有少量的差異,但是在區(qū)塊鏈上所有結(jié)果必須一樣,因此,一個(gè)新的、適用于區(qū)塊鏈的虛擬機(jī)是必不可少的。
理想中的區(qū)塊鏈虛擬機(jī)
每個(gè)區(qū)塊鏈項(xiàng)目的虛擬機(jī)設(shè)計(jì),都會(huì)有自身的藝術(shù)追求,在追求眾多的特性同時(shí)做不同層次上的取舍。在做了大量的研究之后,我們認(rèn)為理想中的區(qū)塊鏈虛擬機(jī)應(yīng)該是這樣的:
· 運(yùn)行時(shí)有足夠的確定性,在調(diào)用同樣的智能合約輸入時(shí),應(yīng)該返回相同的輸出結(jié)果,輸出結(jié)果不依賴于時(shí)間、運(yùn)行環(huán)境等外部的條件;
· 運(yùn)行時(shí)有足夠的安全性,虛擬機(jī)的執(zhí)行不會(huì)對(duì)平臺(tái)本身帶來(lái)負(fù)面影響;
· 對(duì)更新足夠的靈活,讓區(qū)塊鏈不用通過(guò)硬分叉,就可以實(shí)現(xiàn)加密算法的升級(jí)或新增(回想一下以太坊硬分叉升級(jí)的痛苦);
· 信息足夠的透明,可以讓虛擬機(jī)上運(yùn)行的智能合約充分發(fā)揮虛擬機(jī)的潛力;
· 費(fèi)用機(jī)制足夠的合理,能夠確保虛擬機(jī)運(yùn)行時(shí)資源消耗的計(jì)算方式更加合理準(zhǔn)確;
· 可以支持不同的語(yǔ)言編譯,讓開(kāi)發(fā)者能夠自由地開(kāi)發(fā),將最新的科技運(yùn)用其中。
在設(shè)計(jì) Nervos CKB 虛擬機(jī)之前,我們發(fā)現(xiàn)很多區(qū)塊鏈項(xiàng)目都不是用真實(shí)的 CPU 指令集來(lái)構(gòu)造自己的虛擬機(jī)的,他們更多的是選擇了 WASM 來(lái)構(gòu)造自己的虛擬機(jī)。
而我們更傾向于采用真實(shí)的 CPU 指令集來(lái)構(gòu)造自己的虛擬機(jī),因?yàn)樵谌魏尉蓮?fù)雜的虛擬機(jī)的最底層,都需要將操作轉(zhuǎn)變?yōu)樵嫉?a target="_blank">匯編指令來(lái)執(zhí)行對(duì) CPU 的操作。另外,采用真實(shí) CPU 指令集就不會(huì)在設(shè)計(jì)層面引入一些語(yǔ)義約束,束縛虛擬機(jī)的靈活性。
做一個(gè)不恰當(dāng)?shù)谋扔鳎僮?CPU 需要有一套語(yǔ)言體系,使用真實(shí)的 CPU 指令集就如同能直接用這套語(yǔ)言體系和 CPU「說(shuō)話」,那就非常方便。否則,就好像先說(shuō)中文,再轉(zhuǎn)換為英文,不論多完美的翻譯水平,都會(huì)有一定的偏差和束縛。
通過(guò)真實(shí)的 CPU 指令集,虛擬機(jī)可以根據(jù)需要增加任意類型的數(shù)據(jù)結(jié)構(gòu)或算法,可以最大限度的讓開(kāi)發(fā)者寫出任何滿足要求的合約。于是我們決定大膽的嘗試使用真實(shí)的 CPU 指令集來(lái)構(gòu)造自己的虛擬機(jī) CKB-VM。
在 CPU 指令集的選擇中,我們選擇了精簡(jiǎn)的開(kāi)源指令集 RISC-V。RISC-V 可以滿足從低功耗小型微處理器,到高性能數(shù)據(jù)中心(DC)處理器的實(shí)現(xiàn)要求,并且有著透明性、精簡(jiǎn)性、模塊化、支持的廣泛性和成熟性的特點(diǎn)。這些特性都和 CKB-VM 的設(shè)計(jì)需求完美契合。那么 RISC-V 又是什么呢?
RISC-V
RISC-V 是一個(gè)清晰、簡(jiǎn)約、開(kāi)源的 CPU 指令集架構(gòu),誕生于美國(guó)加州大學(xué)伯克利分校。
2010 年,由于其他商業(yè)閉源指令集的局限性,該校的一個(gè)研究團(tuán)隊(duì)在啟動(dòng)一個(gè)新項(xiàng)目時(shí),從零開(kāi)始設(shè)計(jì)了一套全新的開(kāi)源指令集。這套全新的指令集有著大量的寄存器和透明的指令執(zhí)行速度,能夠幫助編譯器和匯編語(yǔ)言程序員將實(shí)際的重要問(wèn)題轉(zhuǎn)換為適當(dāng)、高效的代碼,并且只包含了不到 50 條指令。這套指令集就是 RISC-V。
架構(gòu)師們?cè)谠O(shè)計(jì) RISC-V 時(shí),就是希望 RISC-V 在所有的計(jì)算設(shè)備上都能夠有效工作。自 2010 年被發(fā)明以來(lái),RISC-V 簡(jiǎn)潔的設(shè)計(jì)贏得了業(yè)界和學(xué)界的廣泛支持,并且獲得了社區(qū)的喜愛(ài)。
RISC-V 基金會(huì)
RISC-V 指令集的發(fā)展主要由 RISC-V 基金會(huì)以及社區(qū)推動(dòng)。RISC-V 基金會(huì)創(chuàng)立于 2015 年,是一家非營(yíng)利組織,也是首個(gè)開(kāi)放、協(xié)作的軟硬件創(chuàng)新者社區(qū)。
RISC-V 基金會(huì)目前已經(jīng)有超過(guò) 235 家成員,包括谷歌、高通、蘋果、IBM、特斯拉、華為等企業(yè)。成員可以參與制定并使用 RISC-V 指令集規(guī)范,并且參與相關(guān)軟、硬件生態(tài)系統(tǒng)的發(fā)展。
由于精簡(jiǎn)、開(kāi)源的設(shè)計(jì),RISC-V 在一些學(xué)術(shù)機(jī)構(gòu)中大受歡迎,如加州大學(xué)伯克利分校、麻省理工學(xué)院、普林斯頓大學(xué)、中科院計(jì)算所等。除此之外,一些政府機(jī)構(gòu),如印度政府、上海市經(jīng)濟(jì)信息委等,也大力支持基于 RISC-V 的項(xiàng)目開(kāi)發(fā)。
現(xiàn)有的指令集
RISC-V 是一個(gè)非常年輕的指令集,那么在此之前,主要的指令集都有哪些呢?
在 PC 時(shí)代,x86 是不可動(dòng)搖的霸主,x86 是 CISC(Complex Instruction Set Computer,復(fù)雜指令集),和 RISC(Reduced Instruction Set Computer,精簡(jiǎn)指令集)不同,CISC 指令集會(huì)隨著發(fā)展不斷增多。這樣會(huì)使得成本不斷上升,性能和功耗也會(huì)受到影響。而且,CISC 指令集長(zhǎng)度、執(zhí)行時(shí)間都不固定,很難找出一條高效率的通用設(shè)計(jì)道路來(lái)完成指令的執(zhí)行。
智能手機(jī)普及之后,ARM 成了移動(dòng)端的寵兒。ARM 是精簡(jiǎn)指令集(RISC)有著低功耗和低成本的特性,但是,因?yàn)橐3窒蚝蠹嫒菪裕珹RM 需要保留許多過(guò)時(shí)的定義,導(dǎo)致指令集冗余嚴(yán)重,這使得 ARM 架構(gòu)文檔的復(fù)雜度越來(lái)越高。
在 x86 和 ARM 壟斷的當(dāng)下,RISC-V 為市場(chǎng)帶來(lái)了新的生機(jī):
· 精簡(jiǎn)
經(jīng)過(guò)幾十年的發(fā)展,x86 與 ARM 的架構(gòu)文檔已經(jīng)長(zhǎng)達(dá)數(shù)千頁(yè),幾乎需要花掉一個(gè)工程師近一個(gè)月的閱讀時(shí)間,而閱讀 RISC-V 文檔只需要花費(fèi) 1-2 天的時(shí)間。
這是因?yàn)?RISC-V 只將那些最常使用的指令集挑選出來(lái),然后為其進(jìn)行專門優(yōu)化,至于不常用的指令,則可以用幾個(gè)基礎(chǔ)指令組合的方式完成,這樣就可以大大提高效率。
舉個(gè)例子,如果我們用的是 x86,那么就必須買下一整個(gè)超市,才能享受自身需的物品;而 RISC-V 是一家可以單買的超市,顧客們只需要挑選自己所需的物品,并為此付費(fèi)即可。
· 開(kāi)源
ARM 和 x86 都是閉源項(xiàng)目,且授權(quán)條款極其苛刻:英特爾不允許除 AMD 和 VIA 之外的任何一家公司使用 x86 指令集;想要獲得 ARM 指令集的授權(quán)可能需要花費(fèi)上千萬(wàn)美元的授權(quán)費(fèi),并且會(huì)受到而且授權(quán)到期后,需要重新談判授權(quán)事宜。
RISC-V 是一個(gè)真正意義上的開(kāi)源項(xiàng)目,被稱為硬件領(lǐng)域的 Linux。事實(shí)上,發(fā)明 RISC-V 的 David Patterson 教授、Krste Asanovic 教授、Andrew Waterman 和 Yunsup Lee 的初衷就是希望 「Instruction Sets Want to be Free」,全世界任何公司、大學(xué)、研究機(jī)構(gòu)與個(gè)人都可以開(kāi)發(fā)兼容 RISC-V 指令集的處理器,都可以融入到基于 RISC-V 構(gòu)建的軟硬件生態(tài)系統(tǒng)。
RISC-V 使用的是 BSD License 開(kāi)源協(xié)議,BSD 開(kāi)源協(xié)議允許使用者修改和重新發(fā)布開(kāi)源代碼,也允許基于開(kāi)源代碼開(kāi)發(fā)商業(yè)軟件發(fā)布和銷售。
當(dāng)區(qū)塊鏈遇見(jiàn) RISC-V
RISC-V 在很多科技領(lǐng)域都得到了運(yùn)用,目前,也開(kāi)始在區(qū)塊鏈領(lǐng)域逐漸的得以發(fā)展。作為僅在 CPU 上驗(yàn)證過(guò)的指令集架構(gòu),將 RISC-V 應(yīng)用在區(qū)塊鏈領(lǐng)域的確是一個(gè)大膽的嘗試,因?yàn)樗趨^(qū)塊鏈項(xiàng)目上打造的是虛擬機(jī),而非處理器硬件。
我們不確定這樣的嘗試能否成功,但是我們有理由相信,基于開(kāi)源的 RISC-V 打造的虛擬機(jī),可以很好的縮短硬件和軟件行業(yè)的距離,并且?guī)?lái)更豐富的開(kāi)發(fā)生態(tài)。
關(guān)于 Nervos
Nervos Network 由 Nervos 基金會(huì)推動(dòng),通過(guò)分層設(shè)計(jì),兼顧性能、安全以及去中心化的特性,滿足多樣化的商業(yè)場(chǎng)景需求,為未來(lái)加密經(jīng)濟(jì)提供基礎(chǔ)設(shè)施。
關(guān)于 CKB
Nervos Common Knowledge Base(CKB)是一個(gè)無(wú)需許可鏈,它是 Nervos Network 的基礎(chǔ)層,并在設(shè)計(jì)上提出了一些理念:
· CKB 共識(shí)協(xié)議 NC-MAX 使用兩階段提交節(jié)約帶寬,并根據(jù)網(wǎng)絡(luò)情況調(diào)整自身參數(shù),提升了 Nakamoto Consensus 的可擴(kuò)展性
· CKB 虛擬機(jī)采用底層 CPU 指令集架構(gòu) RISC-V 開(kāi)發(fā),提供更高的開(kāi)發(fā)彈性與運(yùn)行的穩(wěn)定性
· CKB Cell Model 是比特幣 UTXO 模型的通用化,能夠驗(yàn)證和存儲(chǔ)任何類型的數(shù)據(jù)
· CKB 經(jīng)濟(jì)模型用貨幣政策限制狀態(tài)存儲(chǔ)的增長(zhǎng),并實(shí)現(xiàn)智能合約平臺(tái)的價(jià)值存儲(chǔ)功能
評(píng)論