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