摘要:目前,比特幣使用的是來進行交易簽名,并且在共識協(xié)議中使用了哈希算法。盡管的實現(xiàn)提供的是最流行的加密算法,但我們鼓勵社區(qū)提供更優(yōu)化的加密算法實現(xiàn)以減少運行時開銷。
Nervos 底層公鏈 CKB 的虛擬機(CKB-VM)是基于 RISC-V 指令集打造的區(qū)塊鏈虛擬機。在上一堂分享中,我們簡單介紹了區(qū)塊鏈虛擬機,以及我們理想中的區(qū)塊鏈虛擬機的樣子。在本篇文章中,CKB-VM 設(shè)計者將詳細的介紹 CKB 虛擬機的設(shè)計理念,以及選擇 RISC-V 指令集背后的思考邏輯。
秘猿科技區(qū)塊鏈小課堂第 23 期
CKB 是 Nervos Network 的基礎(chǔ)層,其目標(biāo)是 為上層應(yīng)用提供足夠的安全性和去中心化 。在調(diào)研 CKB-VM 選型的過程中,我們反復(fù)思考:CKB-VM 應(yīng)該要有哪些特性?顯然,對于一個在區(qū)塊鏈上使用的虛擬機,有兩個關(guān)鍵特性在任何情況下都必須滿足:
確定性 :對于固定程序和輸入,虛擬機必須始終返回固定的輸出結(jié)果,結(jié)果不會由于時間、運行環(huán)境等其他外部條件而改變;
安全性 :執(zhí)行虛擬機時不會影響到平臺本身的運行。
但是這些條件僅僅是強制性條件,我們希望設(shè)計出一個虛擬機,能夠更好地服務(wù)于 CKB 的目標(biāo)。經(jīng)過深思熟慮,我們認為這樣的虛擬機應(yīng)該 滿足如下特性:
靈活性
我們的目標(biāo)是設(shè)計出一個足夠靈活,能夠長期運轉(zhuǎn)的虛擬機,從而使得 CKB 能夠與密碼學(xué)的發(fā)展攜手并進。密碼學(xué)的歷史是一段「執(zhí)劍」和「破壁」的永恒之戰(zhàn):數(shù)千年的密碼學(xué)發(fā)展史,加密與解密是一場沒有終點的智力角逐,過往如此,未來亦然。一些適用于今天的加密算法,比如 secp256k1,將來可能會被淘汰;未來還會有更多有價值的新算法和技術(shù)(如 Schnorr 或后量子簽名等)不斷涌現(xiàn)。在區(qū)塊鏈的虛擬機上運行的程序,應(yīng)該能夠更自由便捷地使用新的算法,同時那些已經(jīng)被過時的算法應(yīng)該能夠自然地被淘汰。
為了方便理解,我們用比特幣來舉例。目前,比特幣使用的是 SIGHASH 1 來進行交易簽名,并且在共識協(xié)議中使用了 SHA-256 哈希算法。那么我們能夠確保幾年后比特幣用的這種 SIGHASH 方式仍然是最好的選擇嗎?或者說,伴隨著日益增長的算力,SHA-256 仍然適合作為穩(wěn)定的哈希算法嗎?而目前我們研究的所有區(qū)塊鏈協(xié)議,若需要升級加密算法,則則不可避免地需要硬分叉。 在設(shè)計 CKB 時,我們希望探索如何通過 VM 的設(shè)計來降低硬分叉的可能性。
我們在思考,虛擬機是否可以允許升級加密算法?或者說,是否能夠向 VM 添加新的交易驗證邏輯?比如,在仍然使用 secp256k1 的情況下,如果有經(jīng)濟激勵的驅(qū)動,或者出現(xiàn)更新算法的需求,我們是否可以在不分叉的前提下實現(xiàn)更高效的簽名驗證算法?又或,如果有人找到了在 CKB 上實現(xiàn)更好算法的途徑,或者需要引入一個新的加密算法,那么我們是否能夠確保他/她自由的實現(xiàn)?
我們希望 CKB-VM 能夠給大家提供更多的實現(xiàn)空間,最大限度地提供靈活性,并且可以讓用戶無需等待硬分叉即可使用新的加密算法。
運行透明性
在對當(dāng)前這一代區(qū)塊鏈 VM 進行研究后,我們注意到了一個問題,還是以比特幣為例:比特幣的 VM 層提供的僅僅是一個堆棧,并且執(zhí)行時堆棧無法知曉可以存儲在堆棧上的數(shù)據(jù)大小,或堆棧深度,其它所有以堆棧模式實現(xiàn)的 VM 都有同樣的問題,雖然共識層可以提供堆棧深度的定義或間接提供堆棧深度(基于指令長度或 gas 限制)。這會讓 VM 上的程序開發(fā)者必須要去猜測程序運行時的狀態(tài),這種類型的 VM 讓程序無法充分發(fā)揮 VM 的全部潛能。
基于這個問題,我們認為應(yīng)該優(yōu)先定義 VM 操作期間所有資源的限制,包括 gas 限制和堆棧空間大小,并讓在 VM 上運行的程序能夠查詢資源的使用情況, 這將使得在 VM 上運行的程序可以根據(jù)資源可用性來采用不同的算法 。通過這種設(shè)計,程序可以充分發(fā)揮 VM 的潛能。并且在以下場景中,我們能夠看到 VM 更多的靈活性:
可以根據(jù)用戶在 CKB 上可用的存儲空間(Cell Capacity)為存儲數(shù)據(jù)的智能合約選擇不同的策略。當(dāng) Cell Capacity 充足時,程序可以直接存儲數(shù)據(jù)以減少使用的 CPU cycle(CPU 要執(zhí)行一條機器指令經(jīng)過的步驟)數(shù)量;當(dāng) Cell Capacity 受限時,程序可以壓縮數(shù)據(jù)以適應(yīng)較小的 Capacity,使用更多的 CPU cycle。
可以根據(jù)用戶存儲的數(shù)據(jù)(Cell Data)的總量和剩余內(nèi)存的大小為智能合約選擇不同的處理機制。當(dāng)存在少量 Cell Data 或大量剩余內(nèi)存時,所有的 Cell Data 都可以被讀取到內(nèi)存中進行處理。當(dāng)存在大量 Cell Data 或剩余內(nèi)存很少時,每個操作可以僅讀取部分內(nèi)存,類似于交換內(nèi)存的操作。
對于一些常見的合約,比如哈希算法,可以根據(jù)用戶提供的 CPU cycle 數(shù)選擇不同的處理方法。例如,SHA3-256 的安全性已經(jīng)足以滿足大多數(shù)場景的需求,但是,合約可以通過使用更多的 CPU cycles 來利用 SHA3-512算法以滿足更高的安全要求。
運行期開銷
以太坊虛擬機(EVM)中的 Gas 機制是一個非常天才的設(shè)計,它優(yōu)雅地解決了區(qū)塊鏈應(yīng)用場景下的停機問題(因為以太坊是圖靈完備的,所以允許循環(huán)語句,但是無限循環(huán)語句容易導(dǎo)致停機問題,Gas 機制限定了一個區(qū)塊的最大計算量,從而避免了這個問題),并允許程序在完全去中心化的虛擬機上進行計算。但是我們發(fā)現(xiàn),在 EVM 中針對不同的 Opcode(操作符)設(shè)計一個合理的 Gas 計算方式是一件非常難的事情,EVM 幾乎在每次版本更新時都要調(diào)整 Gas 計算機制(EVM 的抽象層級相對較高,一條 EVM 指令可能對應(yīng)若干條底層硬件指令,在執(zhí)行程序時,處理的數(shù)據(jù)量和計算復(fù)雜度都只能通過估算來定價,所以 EVM 需要不斷的調(diào)整 Gas 計算機制)。
因此我們設(shè)想:能不能通過 VM 的設(shè)計來確保程序運行時資源消耗的計算方式更加合理準確?
我們希望能夠找到一個提供上述所有功能的 VM 設(shè)計,但是發(fā)現(xiàn)并沒有現(xiàn)成的解決方案可以實現(xiàn)我們對 CKB 的愿景。于是,我們決定重新設(shè)計一個能滿足上述所有特性的 VM,以更好的實現(xiàn) CKB 的愿景。
解決方案:RISC-VRISC-V 是由加州大學(xué)伯克利分校的教授于 2010 年設(shè)計的開源 RISC 指令集架構(gòu)(ISA)。RISC-V 的目標(biāo)是提供一個通用的 CPU 指令集架構(gòu),以支持下一代系統(tǒng)架構(gòu)開發(fā),并在未來數(shù)十年中不會產(chǎn)生遺留架構(gòu)問題所帶來的負擔(dān)。
RISC-V 可以滿足從低功耗小型微處理器,到高性能數(shù)據(jù)中心(DC)處理器的實現(xiàn)要求 。與其他 CPU 指令集相比,RISC-V 指令集具有以下優(yōu)點:
透明性
RISC-V 的核心設(shè)計和實現(xiàn)均遵照 BSD 許可協(xié)議(自由軟件中使用最廣泛的許可協(xié)議之一)。任何公司和機構(gòu)都可以使用 RISC-V 指令集,并可以不受限制地創(chuàng)造新的軟 / 硬件。
精簡性
RISC-V 的 32 位整數(shù)核心指令集只有 41 條指令,即使支持 64 位整數(shù),也只有 50 條指令左右。在提供同樣功能的前提下,RISC-V 指令集比起有上千條指令的 x86 指令集,實現(xiàn)起來更容易也更能避免 Bug (x86 指令集手冊有 2000 余頁,并會不斷的增加,而 RISC-V 指令集手冊僅 100 余頁)。
模塊化
RISC-V 采用簡化的內(nèi)核,使用模塊化機制以提供更多擴展指令集設(shè)置。例如,CKB 可能會選擇實現(xiàn) RISC-V 內(nèi)核中定義的 V extension 來支持向量計算或為 256 位整數(shù)計算添加擴展指令集,從而為高性能加密算法提供可能性。
支持的廣泛性
GCC 和 LLVM 等編譯器都支持 RISC-V 指令集,Go 針對 RISC-V 的后端也在開發(fā)中。CKB-VM 的實現(xiàn)使用的是廣泛的 ELF 格式,也就是說, 任何可以編譯成 RISC-V 指令集的語言均可以直接用來為 CKB 開發(fā)智能合約。
成熟性
RISC-V 核心指令集已經(jīng)得到了最終的確認和固定,未來所有 RISC-V 的實現(xiàn)都需要向后兼容。所以當(dāng)更新 VM 指令時,CKB 不會因此出現(xiàn)硬分叉。另外,RISC-V 指令集已經(jīng)有了硬件實現(xiàn),并在真實的應(yīng)用場景中驗證過,且不會存在一些存在于其他支持較少的指令集中的潛在風(fēng)險。
雖然其他指令集可能也具備上述特性中的一部分特性,但根據(jù)我們的評估,RISC-V 指令集是 唯一一個具備所有上述特性的指令集 。因此,我們選擇使用 RISC-V 指令集來實現(xiàn) CKB-VM,另外,智能合約將使用 ELF 格式以確保更廣泛的語言支持。
此外,我們將為 CKB-VM 添加動態(tài)鏈接以確保 Cell Sharing。盡管 CKB 的實現(xiàn)提供的是最流行的加密算法,但我們鼓勵社區(qū)提供更優(yōu)化的加密算法實現(xiàn)以減少運行時開銷(CPU cycles)。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/24720.html
摘要:在區(qū)塊鏈上,虛擬機就是智能合約的運行環(huán)境,是一個可以完全對外隔離的完整計算機體系。區(qū)塊鏈通過虛擬機來調(diào)用和執(zhí)行智能合約,并要求所有節(jié)點都達成一致。 秘猿科技使命是用技術(shù)創(chuàng)造信任,為價值網(wǎng)絡(luò)提供基礎(chǔ)設(shè)施和服務(wù)。為了實現(xiàn)這個使命,我們?nèi)陙韴猿殖跣模讲綖闋I打造加密經(jīng)濟網(wǎng)絡(luò)。我們想要讓互聯(lián)網(wǎng)回歸到本源,用區(qū)塊鏈技術(shù),去構(gòu)造更美好的社會,因此我們設(shè)計了 CKB 底層公鏈。我們自己造輪子,開創(chuàng)...
摘要:在區(qū)塊鏈上,虛擬機就是智能合約的運行環(huán)境,是一個可以完全對外隔離的完整計算機體系。區(qū)塊鏈通過虛擬機來調(diào)用和執(zhí)行智能合約,并要求所有節(jié)點都達成一致。當(dāng)區(qū)塊鏈遇見在很多科技領(lǐng)域都得到了運用,目前,也開始在區(qū)塊鏈領(lǐng)域逐漸的得以發(fā)展。 showImg(https://segmentfault.com/img/bVbsfi2?w=2779&h=1179); 區(qū)塊鏈的出現(xiàn)使得智能合約得到了更好的實...
摘要:于是我們想為什么不使用符合虛擬機當(dāng)前系統(tǒng)架構(gòu)的真實指令集來構(gòu)建自己的虛擬機這樣一來,我們不會丟失任何添加靜態(tài)驗證高級數(shù)據(jù)結(jié)構(gòu)或是加密算法的可能性,并且無論我們在中提供怎樣的數(shù)據(jù)結(jié)構(gòu)或算法,都可以最大化的靈活性。 Nervos 底層公鏈 CKB 的虛擬機(CKB-VM)是基于 RISC-V 打造的區(qū)塊鏈虛擬機。在前兩期中,我們介紹了 CKB 虛擬機的設(shè)計理念,以及基于 RISC-V 指令...
摘要:模塊鏈的共識配置,該配置會寫入創(chuàng)世塊。主要指責(zé)是記錄和更新本地累計工作量最高的鏈,并維護鏈上數(shù)據(jù)的索引。消息使用序列化。協(xié)議是節(jié)點之間用來處理廣播和轉(zhuǎn)發(fā)新的交易。 by Nervos CKB Team 在 2017 年底,我們感到心里的一些想法,包括分層的網(wǎng)絡(luò)以及一個作為共同知識庫(Common Knowledge Base)的區(qū)塊鏈,都已經(jīng)成熟。因此 2018 年元旦一過我們就迫不及...
摘要:年,包括分層的網(wǎng)絡(luò)以及一個作為共同知識庫的區(qū)塊鏈,都已經(jīng)成熟。是一個在設(shè)計上非常不同的公有鏈協(xié)議,也是網(wǎng)絡(luò)中的基礎(chǔ)層,是整個加密經(jīng)濟網(wǎng)絡(luò)的信任引擎。主要指責(zé)是記錄和更新本地累計工作量最高的鏈,并維護鏈上數(shù)據(jù)的索引。 說到猿起,這些心里的想法能追溯到 2016 年,甚至更早。2017 年,包括分層的網(wǎng)絡(luò)以及一個作為共同知識庫(Common Knowledge Base)的區(qū)塊鏈,都已經(jīng)成...
閱讀 4063·2021-11-16 11:50
閱讀 1008·2021-11-11 16:55
閱讀 3744·2021-10-26 09:51
閱讀 933·2021-09-22 15:03
閱讀 3567·2019-08-30 15:54
閱讀 3363·2019-08-30 15:54
閱讀 2549·2019-08-30 14:04
閱讀 979·2019-08-30 13:53