祕猿科技使命是用 技術創造信任,爲價值網絡提供基礎設施和服務。爲了實現這個使命,咱們三年來堅持初心,步步爲營打造加密經濟網絡。咱們想要讓 互聯網迴歸到本源,用區塊鏈技術,去構造更美好的社會,所以咱們設計了 CKB 底層公鏈。咱們本身造輪子,開創性設計了獨一無二的 CKB 模型,以及用 RISC-V 打造的 CKB-VM 虛擬機。本文就將談談 CKB-VM 虛擬機的誕生。
祕猿科技區塊鏈小課堂第 22 期程序員
區塊鏈的出現使得智能合約獲得了更好的實現和發展,而區塊鏈和智能合約之間,還存在着一個重要的角色: 虛擬機(Virtual Machine) 。算法
虛擬機的概念在上個世紀六十年代就被提出來,而到九十年代纔開始流行。當時的網絡跨越了衆多不一樣的操做系統、瀏覽器,若是開發者想要製做一個應用,就須要去適配全部不一樣的操做系統。你們知道如今 App 開發就分爲安卓和蘋果系統,而當時局面更加複雜。剛好 Java 程序語言開始流行,Java 構建的虛擬機可以讓程序只須要寫一次,依託 Java 虛擬機就可以在多個平臺上運行,因此當時提出的口號就是: 一處編譯、處處運行 。瀏覽器
咱們知道比特幣是沒有虛擬機的,由於比特幣就是把一段數字(也就是「比特幣」)從地址 A 轉移到地址 B,而以太坊則提出,區塊鏈上執行的爲何不能是一套代碼,可以實現更多複雜多樣的東西?這就是咱們所說的智能合約平臺,全部節點運行同樣的合約代碼獲得徹底同樣的結果。安全
在區塊鏈上,虛擬機就是智能合約的運行環境,是一個能夠徹底對外隔離的完整計算機體系。區塊鏈經過虛擬機來調用和執行智能合約,並要求全部節點都達成一致。而節點用的是不一樣的系統,有些機器是 64 位的,有些是 32 位的,傳統的 Java 虛擬機容忍計算結果有少許的差別,可是在區塊鏈上全部結果必須同樣,所以,一個新的、適用於區塊鏈的虛擬機是必不可少的。網絡
每一個區塊鏈項目的虛擬機設計,都會有自身的藝術追求,在追求衆多的特性同時作不一樣層次上的取捨。在作了大量的研究以後,咱們認爲理想中的區塊鏈虛擬機應該是這樣的:數據結構
在設計 Nervos CKB 虛擬機以前,咱們發現不少區塊鏈項目都不是用真實的 CPU 指令集來構造本身的虛擬機的,他們更多的是選擇了 WASM 來構造本身的虛擬機。架構
而咱們更傾向於採用真實的 CPU 指令集來構造本身的虛擬機,由於在任何精巧複雜的虛擬機的最底層,都須要將操做轉變爲原始的彙編指令來執行對 CPU 的操做。另外,採用真實 CPU 指令集就不會在設計層面引入一些語義約束,束縛虛擬機的靈活性。模塊化
作一個不恰當的比喻,操做 CPU 須要有一套語言體系,使用真實的 CPU 指令集就如同能直接用這套語言體系和 CPU「說話」,那就很是方便。不然,就好像先說中文,再轉換爲英文,不論多完美的翻譯水平,都會有必定的誤差和束縛。性能
經過真實的 CPU 指令集,虛擬機能夠根據須要增長任意類型的數據結構或算法,能夠最大限度的讓開發者寫出任何知足要求的合約。因而咱們決定大膽的嘗試使用真實的 CPU 指令集來構造本身的虛擬機 CKB-VM。區塊鏈
在 CPU 指令集的選擇中,咱們選擇了精簡的開源指令集 RISC-V。RISC-V 能夠知足從低功耗小型微處理器,到高性能數據中心(DC)處理器的實現要求,而且有着透明性、精簡性、模塊化、支持的普遍性和成熟性的特色。這些特性都和 CKB-VM 的設計需求完美契合。那麼 RISC-V 又是什麼呢?
RISC-V 是一個清晰、簡約、開源的 CPU 指令集架構,誕生於美國加州大學伯克利分校。
2010 年,因爲其餘商業閉源指令集的侷限性,該校的一個研究團隊在啓動一個新項目時,從零開始設計了一套全新的開源指令集。這套全新的指令集有着大量的寄存器和透明的指令執行速度,可以幫助編譯器和彙編語言程序員將實際的重要問題轉換爲適當、高效的代碼,而且只包含了不到 50 條指令 。這套指令集就是 RISC-V。
架構師們在設計 RISC-V 時,就是但願 RISC-V 在全部的計算設備上都可以有效工做。自 2010 年被髮明以來,RISC-V 簡潔的設計贏得了業界和學界的普遍支持,而且得到了社區的喜好。
RISC-V 指令集的發展主要由 RISC-V 基金會以及社區推進。RISC-V 基金會創立於 2015 年,是一家非營利組織,也是首個開放、協做的軟硬件創新者社區。
RISC-V 基金會目前已經有超過 235 家成員,包括谷歌、高通、蘋果、IBM、特斯拉、華爲等企業。成員能夠參與制定並使用 RISC-V 指令集規範,而且參與相關軟、硬件生態系統的發展。
因爲精簡、開源的設計,RISC-V 在一些學術機構中大受歡迎,如加州大學伯克利分校、麻省理工學院、普林斯頓大學、中科院計算所等。除此以外,一些政府機構,如印度政府、上海市經濟信息委等,也大力支持基於 RISC-V 的項目開發。
RISC-V 是一個很是年輕的指令集,那麼在此以前,主要的指令集都有哪些呢?
在 PC 時代,x86 是不可動搖的霸主,x86 是 CISC(Complex Instruction Set Computer,複雜指令集),和 RISC(Reduced Instruction Set Computer,精簡指令集)不一樣,CISC 指令集會隨着發展不斷增多。這樣會使得成本不斷上升,性能和功耗也會受到影響。並且,CISC 指令集長度、執行時間都不固定,很難找出一條高效率的通用設計道路來完成指令的執行。
智能手機普及以後,ARM 成了移動端的寵兒。ARM 是精簡指令集(RISC)有着低功耗和低成本的特性,可是,由於要保持向後兼容性,ARM 須要保留許多過期的定義,致使指令集冗餘嚴重,這使得 ARM 架構文檔的複雜度愈來愈高。
在 x86 和 ARM 壟斷的當下,RISC-V 爲市場帶來了新的生機:
通過幾十年的發展,x86 與 ARM 的架構文檔已經長達數千頁,幾乎須要花掉一個工程師近一個月的閱讀時間,而閱讀 RISC-V 文檔只須要花費 1-2 天的時間。
這是由於 RISC-V 只將那些最常使用的指令集挑選出來,而後爲其進行專門優化,至於不經常使用的指令,則能夠用幾個基礎指令組合的方式完成,這樣就能夠大大提升效率。
舉個例子,若是咱們用的是 x86,那麼就必須買下一整個超市,才能享受自身需的物品;而 RISC-V 是一家能夠單買的超市,顧客們只須要挑選本身所需的物品,併爲此付費便可。
ARM 和 x86 都是閉源項目,且受權條款極其苛刻:英特爾不容許除 AMD 和 VIA 以外的任何一家公司使用 x86 指令集;想要得到 ARM 指令集的受權可能須要花費上千萬美圓的受權費,而且會受到並且受權到期後,須要從新談判受權事宜。
RISC-V 是一個真正意義上的開源項目,被稱爲硬件領域的 Linux。事實上,發明 RISC-V 的 David Patterson 教授、Krste Asanovic 教授、Andrew Waterman 和 Yunsup Lee 的初衷就是但願 「 Instruction Sets Want to be Free 」,全世界任何公司、大學、研究機構與我的均可以開發兼容 RISC-V 指令集的處理器,均可以融入到基於 RISC-V 構建的軟硬件生態系統。
RISC-V 使用的是 BSD License 開源協議,BSD 開源協議容許使用者修改和從新發布開源代碼,也容許基於開源代碼開發商業軟件發佈和銷售。
當區塊鏈碰見 RISC-V
RISC-V 在不少科技領域都獲得了運用,目前,也開始在區塊鏈領域逐漸的得以發展。做爲僅在 CPU 上驗證過的指令集架構, 將 RISC-V 應用在區塊鏈領域的確是一個大膽的嘗試 ,由於它在區塊鏈項目上打造的是虛擬機,而非處理器硬件。
咱們不肯定這樣的嘗試可否成功,可是咱們有理由相信, 基於開源的 RISC-V 打造的虛擬機,能夠很好的縮短硬件和軟件行業的距離,而且帶來更豐富的開發生態。