摘要:于是我們想為什么不使用符合虛擬機(jī)當(dāng)前系統(tǒng)架構(gòu)的真實(shí)指令集來(lái)構(gòu)建自己的虛擬機(jī)這樣一來(lái),我們不會(huì)丟失任何添加靜態(tài)驗(yàn)證高級(jí)數(shù)據(jù)結(jié)構(gòu)或是加密算法的可能性,并且無(wú)論我們?cè)谥刑峁┰鯓拥臄?shù)據(jù)結(jié)構(gòu)或算法,都可以最大化的靈活性。
Nervos 底層公鏈 CKB 的虛擬機(jī)(CKB-VM)是基于 RISC-V 打造的區(qū)塊鏈虛擬機(jī)。在前兩期中,我們介紹了 CKB 虛擬機(jī)的設(shè)計(jì)理念,以及基于 RISC-V 指令集打造的選擇邏輯。那么再往前推一步,我們?yōu)槭裁磿?huì)選擇基于真實(shí) CPU 指令集來(lái)構(gòu)建 CKB-VM 呢?在本篇文章中,CKB-VM 設(shè)計(jì)者將和我們繼續(xù)討論 CKB-VM 的設(shè)計(jì)靈感、設(shè)計(jì)以及基于真實(shí) CPU 指令集來(lái)構(gòu)建 CKB-VM 的額外優(yōu)勢(shì)。
秘猿科技區(qū)塊鏈小課堂第 24 期
在設(shè)計(jì) CKB-VM 之前,我們發(fā)現(xiàn)很多區(qū)塊鏈項(xiàng)目并不是用真實(shí)的 CPU 指令集來(lái)構(gòu)造自己的虛擬機(jī)。我們熟知的以太坊下一代虛擬機(jī) EWASM、EOS 以及 Dfinity 等都選擇了 WASM(WebAssembly,一種編碼格式)來(lái)構(gòu)造自己的虛擬機(jī)。我們也完全可以設(shè)計(jì)出一個(gè)具有高級(jí)語(yǔ)言特性的 VM,比如可以用于靜態(tài)驗(yàn)證,或是可以直接支持高級(jí)數(shù)據(jù)結(jié)構(gòu),或是支持各種加密算法的 VM。
但是我們發(fā)現(xiàn),雖然帶有高級(jí)語(yǔ)言特性的虛擬機(jī)能夠提供更多的便利,比如能夠支持語(yǔ)法各異的編程語(yǔ)言,但同時(shí)也會(huì)出現(xiàn)其他一些問題:任何復(fù)雜的、帶有高級(jí)語(yǔ)言功能的 VM,無(wú)論多么靈活,都不可避免的會(huì)在設(shè)計(jì)層面引入一些語(yǔ)義約束,出于性能的原因,不同的語(yǔ)言在底層幾乎需要共享相同的語(yǔ)義(帶有高級(jí)語(yǔ)言特性的虛擬機(jī)需要綁定密碼學(xué)原語(yǔ),若未來(lái)現(xiàn)有的原語(yǔ)被攻破,或者需要更換一套密碼學(xué)原語(yǔ)時(shí),需要通過分叉來(lái)實(shí)現(xiàn))。這樣一來(lái), VM 自身的靈活性就會(huì)受到限制,這和 CKB 作為加密經(jīng)濟(jì)底層基礎(chǔ)設(shè)施的愿景并不相符。
與此同時(shí),一個(gè)帶有高級(jí)語(yǔ)言功能的 VM 通常會(huì)包含某些高級(jí)的數(shù)據(jù)結(jié)構(gòu)與算法,這樣任何在 VM 中嵌入的高級(jí)數(shù)據(jù)結(jié)構(gòu)與算法都可能只適合于某一類應(yīng)用的開發(fā),卻不適用于其它應(yīng)用程序的開發(fā)。并且,我們無(wú)法預(yù)設(shè)所有可能的使用方式,這些嵌入 VM 本身的數(shù)據(jù)結(jié)構(gòu)或算法除了兼容性之外沒有任何作用,隨著時(shí)間的推移,甚至?xí)蔀樨?fù)擔(dān)。
另外我們還發(fā)現(xiàn),所有的區(qū)塊鏈項(xiàng)目都要在馮·諾伊曼 CPU 架構(gòu)(x86,x86_64,ARM 等架構(gòu))下才能運(yùn)行,并且所有高級(jí)的 VM 特性都必須映射到現(xiàn)代體系架構(gòu)的 CPU 匯編指令。
舉個(gè)例子,雖然 V8 引擎(由 Google 開發(fā)的開源 JavaScript 引擎,用于 Google Chrome 及 Chromium 中)看上去可以有無(wú)限量的內(nèi)存,但是其內(nèi)部實(shí)現(xiàn)依然需要依靠一個(gè)十分復(fù)雜的垃圾回收算法,才能在有限的內(nèi)存空間中模擬出無(wú)限的內(nèi)存空間。
類似的,Haskell (一種標(biāo)準(zhǔn)化的,通用的純函數(shù)編程語(yǔ)言)或是 Idris(一個(gè)通用的依賴類型純函數(shù)式編程語(yǔ)言) 可能具有先進(jìn)的靜態(tài)類型檢查模式(在某種程度上)來(lái)證明軟件運(yùn)行的正確性,但在完成類型檢查之后,還是需要通過一個(gè)翻譯層把靜態(tài)驗(yàn)證后的代碼轉(zhuǎn)換成未驗(yàn)證的原生 x86_64 匯編指令。
這里的關(guān)鍵在于無(wú)論我們?nèi)绾卧O(shè)計(jì) VM,都沒有辦法太過偏離當(dāng)前的體系結(jié)構(gòu)。換句話說,在任何 VM 的最底層,都需要將操作轉(zhuǎn)變成原始的匯編指令來(lái)執(zhí)行。
于是我們想: 為什么不使用符合 CKB 虛擬機(jī)當(dāng)前系統(tǒng)架構(gòu)的真實(shí) CPU 指令集來(lái)構(gòu)建自己的虛擬機(jī)?
這樣一來(lái),我們不會(huì)丟失任何添加靜態(tài)驗(yàn)證、高級(jí)數(shù)據(jù)結(jié)構(gòu)、或是加密算法的可能性,并且無(wú)論我們?cè)?VM 中提供怎樣的數(shù)據(jù)結(jié)構(gòu)或算法,都可以 最大化 VM 的靈活性 。此外,通過真實(shí)的 CPU 指令集,我們可以最大限度的讓開發(fā)者寫出任何滿足要求的合約。
額外的優(yōu)勢(shì)除了 靈活性 之外,基于真實(shí) CPU 指令集的 VM 還有其它額外的優(yōu)勢(shì):
穩(wěn)定性
為硬件設(shè)計(jì)的 CPU 指令集一旦最終確定并在芯片中使用,就難以修改,所以與通常是軟件實(shí)現(xiàn)的 VM 指令集相比,硬件指令集顯得非常穩(wěn)定。這個(gè)屬性與 Layer 1 區(qū)塊鏈 VM 的訴求非常契合,因?yàn)榉€(wěn)定的指令集意味著較少的硬分叉,且不會(huì)犧牲靈活性。
運(yùn)行期透明性
物理 CPU 在運(yùn)行時(shí)僅需要依靠寄存器和一段內(nèi)存,在使用堆棧的操作過程中,通常內(nèi)存中的空間是指定的。這樣一來(lái),我們可以在程序執(zhí)行期間根據(jù) VM 中的堆棧指針來(lái)獲取堆??臻g的使用情況,從而最大限度地提高運(yùn)行時(shí)狀態(tài)的可見性。
CKB-VM 可以調(diào)整堆棧指針、更改內(nèi)存中的區(qū)域分配,甚至根據(jù)需要擴(kuò)大或縮小堆棧區(qū)域大小,從而提高 VM 的靈活性。當(dāng)前 CPU 指令集還可以提供過去周期的計(jì)數(shù),從而允許查詢 VM 的運(yùn)行開銷狀態(tài)。
運(yùn)行期開銷
具有真實(shí) CPU 指令集的 VM 可以輕松管理運(yùn)行期的開銷,每個(gè)指令執(zhí)行時(shí)所需的 cycle 數(shù)(不考慮流水線)是固定的。 我們可以根據(jù)真實(shí) CPU 指令集的這個(gè)特性來(lái)設(shè)計(jì) CKB-VM 運(yùn)行時(shí)的開銷計(jì)算機(jī)制,這樣一來(lái),當(dāng)我們應(yīng)用新算法時(shí),也可以準(zhǔn)確地計(jì)算出所需的開銷。
但是,與通過操作碼或本機(jī) VM 指令集實(shí)現(xiàn)加密算法的 VM 相比,使用真實(shí) CPU 指令集存在一個(gè)關(guān)鍵的缺點(diǎn): 性能 。
不過,根據(jù)研究和測(cè)試結(jié)果,我們可以通過適當(dāng)?shù)膬?yōu)化和即時(shí)(Just-In-Time,JIT)編譯器實(shí)現(xiàn)來(lái)優(yōu)化基于真實(shí) CPU 指令集在 VM 上運(yùn)行的加密算法,從而滿足 CKB 應(yīng)用程序的需求。在處理即時(shí)性時(shí),我們是基于底層指令集進(jìn)行處理,而不是基于像 JavaScript 這樣的高級(jí)語(yǔ)言上處理,這樣會(huì)使得 VM 具備更低的工作負(fù)載和更好的性能。
Why Not WASM?也許有人會(huì)問:在區(qū)塊鏈社區(qū)對(duì) WebAssembly 有著強(qiáng)烈興趣和廣泛關(guān)注的情況下, CKB 為什么不直接使用 WebAssembly 呢?
WebAssembly 是一個(gè)偉大的項(xiàng)目,并且我們非常希望它最后能夠成功。一個(gè)擁有廣泛支持的沙盒環(huán)境,對(duì)于整個(gè)區(qū)塊鏈行業(yè),甚至整個(gè)軟件業(yè)來(lái)說都是件夢(mèng)寐以求的事。從長(zhǎng)遠(yuǎn)來(lái)看,WebAssembly 也有潛力實(shí)現(xiàn) CKB 所需的大部分特性,但是它并不能提供我們?cè)凇禖KB-VM 誕生記(一) 1》中提到的 RISC-V 能為 CKB-VM 帶來(lái)的所有好處,比如,目前 WebAssembly 還全都是 JIT 實(shí)現(xiàn),缺少一個(gè)合理的運(yùn)行期開銷計(jì)算模型。
另外,RISC-V 從 2010 年開始設(shè)計(jì),在 2011 年發(fā)布第一版規(guī)范,2012 年出現(xiàn)基于 RISC-V 構(gòu)建的硬件;而 WebAssembly 出現(xiàn)于 2015 年,2017 年發(fā)布 MVP,相對(duì)來(lái)說,RISC-V 會(huì)比 WebAssembly 更加的成熟,所以至少在目前階段,我們覺得使用 WebAssembly 并不是 CKB-VM 最好的選擇。
當(dāng)然,我們并不是完全放棄使用 WebAssembly,考慮到 WebAssembly 與 RISC-V 同樣是底層 VM 的實(shí)現(xiàn)方式,而且很多設(shè)計(jì)和指令集十分相似, 我們完全有可能提供一個(gè)從 WebAssembly 到 RISC-V 的二進(jìn)制轉(zhuǎn)換器,從而確保 CKB 也可以利用目前區(qū)塊鏈上基于 WebAssembly 的創(chuàng)新。 另外,CKB 上也能夠支持僅可以編譯為 WebAssembly 的語(yǔ)言(比如 Forest:https://github.com/forest-lan... )。
社區(qū)驅(qū)動(dòng)的 CKB-VM通過 CKB-VM 的設(shè)計(jì),我們的目標(biāo)是建立一個(gè)圍繞 CKB 的社區(qū),該社區(qū)可以自由地發(fā)展和適應(yīng)新技術(shù)的進(jìn)步,并且可以最大限度地減少人工干預(yù)(例如硬分叉)。 我們相信 CKB-VM 可以實(shí)現(xiàn)這一愿景。
注: CKB-VM 與 CKB 一樣為開源項(xiàng)目,目前 CKB-VM 仍在開發(fā)過程中,盡管 CKB-VM 的大部分設(shè)計(jì)已經(jīng)敲定,但某些設(shè)計(jì)也可能會(huì)在將來(lái),因?yàn)槟愕呢暙I(xiàn)而有新的變動(dòng)和推進(jìn)。這篇文章是為了讓我們的社區(qū)更加了解 CKB-VM,這樣人人都可以在里面更好的玩耍并做出貢獻(xiàn)啦!
CKB-VM:https://github.com/nervosnetw...
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/24719.html
摘要:在區(qū)塊鏈上,虛擬機(jī)就是智能合約的運(yùn)行環(huán)境,是一個(gè)可以完全對(duì)外隔離的完整計(jì)算機(jī)體系。區(qū)塊鏈通過虛擬機(jī)來(lái)調(diào)用和執(zhí)行智能合約,并要求所有節(jié)點(diǎn)都達(dá)成一致。 秘猿科技使命是用技術(shù)創(chuàng)造信任,為價(jià)值網(wǎng)絡(luò)提供基礎(chǔ)設(shè)施和服務(wù)。為了實(shí)現(xiàn)這個(gè)使命,我們?nèi)陙?lái)堅(jiān)持初心,步步為營(yíng)打造加密經(jīng)濟(jì)網(wǎng)絡(luò)。我們想要讓互聯(lián)網(wǎng)回歸到本源,用區(qū)塊鏈技術(shù),去構(gòu)造更美好的社會(huì),因此我們?cè)O(shè)計(jì)了 CKB 底層公鏈。我們自己造輪子,開創(chuàng)...
摘要:在區(qū)塊鏈上,虛擬機(jī)就是智能合約的運(yùn)行環(huán)境,是一個(gè)可以完全對(duì)外隔離的完整計(jì)算機(jī)體系。區(qū)塊鏈通過虛擬機(jī)來(lái)調(diào)用和執(zhí)行智能合約,并要求所有節(jié)點(diǎn)都達(dá)成一致。當(dāng)區(qū)塊鏈遇見在很多科技領(lǐng)域都得到了運(yùn)用,目前,也開始在區(qū)塊鏈領(lǐng)域逐漸的得以發(fā)展。 showImg(https://segmentfault.com/img/bVbsfi2?w=2779&h=1179); 區(qū)塊鏈的出現(xiàn)使得智能合約得到了更好的實(shí)...
摘要:目前,比特幣使用的是來(lái)進(jìn)行交易簽名,并且在共識(shí)協(xié)議中使用了哈希算法。盡管的實(shí)現(xiàn)提供的是最流行的加密算法,但我們鼓勵(lì)社區(qū)提供更優(yōu)化的加密算法實(shí)現(xiàn)以減少運(yùn)行時(shí)開銷。 Nervos 底層公鏈 CKB 的虛擬機(jī)(CKB-VM)是基于 RISC-V 指令集打造的區(qū)塊鏈虛擬機(jī)。在上一堂分享中,我們簡(jiǎn)單介紹了區(qū)塊鏈虛擬機(jī),以及我們理想中的區(qū)塊鏈虛擬機(jī)的樣子。在本篇文章中,CKB-VM 設(shè)計(jì)者將詳細(xì)的...
摘要:會(huì)議中,來(lái)自全國(guó)各地的近千名區(qū)塊鏈愛好者齊聚一堂,共同探討最新的區(qū)塊鏈技術(shù)發(fā)展。呂國(guó)寧在開放日活動(dòng)中,做了下一代區(qū)塊鏈底層基礎(chǔ)設(shè)施的主題分享。區(qū)塊鏈的核心價(jià)值是什么我們認(rèn)為,區(qū)塊鏈的核心價(jià)值是提供信任。 showImg(https://segmentfault.com/img/bVbsM64?w=1080&h=720); 5 月 16 日,由杭州市金融辦指導(dǎo),巴比特主辦的 2019 杭...
摘要:的開發(fā)團(tuán)隊(duì)分別來(lái)自等公司,標(biāo)準(zhǔn)由組織制定,目前在以太坊下一代虛擬機(jī)以及項(xiàng)目中被使用。推特原文內(nèi)容摘要首先提出疑問對(duì)虛擬機(jī)用比更好表示嚴(yán)重懷疑。與此同時(shí),選擇區(qū)塊鏈虛擬機(jī)時(shí)并不是只需要考慮高性能實(shí)現(xiàn)的難度。 showImg(https://segmentfault.com/img/bVblNDb?w=1882&h=802); Nervos 將在舊金山做一場(chǎng)主題為「Say Hello to...
閱讀 2964·2021-11-17 09:33
閱讀 3751·2021-11-16 11:42
閱讀 3563·2021-10-26 09:50
閱讀 1483·2021-09-22 15:49
閱讀 3105·2021-08-10 09:44
閱讀 3781·2019-08-29 18:36
閱讀 4054·2019-08-29 16:43
閱讀 2328·2019-08-29 14:10