以上可證,VRF 在數學上定義了完善的隨機數發生器,可以應用於區塊鏈系統中節點的選擇、檢查點的生成等諸多問題,是隨機選取記賬礦工的優異方案。
但是,在具備上述概率正確性、唯一證明性、偽隨機性三大性質之外,區塊鏈系統中的隨機數還應該具備不可預測性。一旦記賬礦工在還沒有完成記賬時就暴露,則有可能遭遇來自作惡者的攻擊而導致記賬失敗。
因此,還需要一種可驗證的不可預測函式(Verifiable Unpredictable Functions, VUF),同樣是一個三元組:
VUF = {Generate,Evaluate,Verify}VUF 的定義和 VRF 完全一樣,並且滿足 VRF 中的概率正確性、唯一證明性兩個性質,除此之外,它還需要滿足不可預測性,即:
3 分片選取概率模型
VRF 提供了一種快捷、有效的方式,實現從一個分散式網路中選取一部分節點。
假設全網共有V個節點,要建立一個具有m個節點的分片。MultiVAC 在主鏈上產生隨機數R,節點i根據自身私鑰對R進行加密,得到Ri,這裡,Ri是一個 256bit 的隨機數。其被選中為片內節點的條件是:
這是一個與N無關的表示,即在一個節點充分多的網路環境中,分片的構造只和預設的片內節點個數m有關,與全域性網路節點個數無關。
從這一數學基礎出發,完全可以將 Bitcoin 或 Ethereum看作是龐大的現代網際網路中的一個分片,而這個分片的可信度僅和 Bitcoin 或者 Ethereum 的參與節點個數相關,而和整個網際網路有多大並無太大關係。故,我們有以下兩個論斷:
4 交易與共識
基於 VRF 和可信度概率模型,我們可以將全網構建成為多個分片,每一筆交易可以委派給某一個特定分片來執行。但如何設計合適的交易處理機制,以實現多個分片之間的協同互動,是一件非常有挑戰性的事情。交易分片方案需要綜合考慮賬本如何管理、在分片內部達成的共識是否足夠安全、以及跨多個分片之間的交易如何執行等問題。
現有技術方案,如 Elastico,Zilliqa使用了統一的賬本資料,雖然實現了分片處理交易,但資料之間的同步成本依然存在,本質上沒有解決資料分 片問題。
OmniLedge設計了名為 Atomix 的拜占庭分片原子提交協議(Byzantine Shard Atomic Commit (Atomix) protocol),實現對每一個交易的原子處理,但這一協議邏輯比較複雜,工程實現難度較大。
MultiVAC 設計分片 UTXO 機制來解決這一問題。網路將交易根據賬戶分配到不同分片,同一個賬戶的所有支出交易在同一個分片中執行。在 UTXO 交易模型之下,每一個UTXO 交易的輸入都是一筆或多筆已確認交易,而輸出不需要與交易接收方進行資料互動,如圖 2 所示。所以當一個賬戶始終在同一個片內被處理時,保證了 UTXO 交易只對分片內資料進行寫操作,對分片外賬本資料均為只讀操作,避免了跨片的複雜資料邏輯。此方法邏輯簡單、清晰,執行效率高,易於工程實現。
圖 2:MultiVAC 中的 UTXO 模型。交易依據支付者的地址被分到不同的分片執行。UTXO 的輸入是其它分片上已經被確認的交易,所以跨片的資料互動都是隻讀的操作。
賬本分片的潛在問題是作惡者如果需要篡改某筆交易或想要實現雙重支付,則不需要攻擊全網,只需要對特定的分片實施攻擊,或聯合該分片的礦工實現作惡。解決的方案有兩種途徑,一種是動態調整使用者所歸屬的分片,另一種是動態調整所屬分片的礦工。兩種方法都可以使作惡者的難度提升至攻擊全網的難度,MultiVAC 選擇第二種方案。同時,MultiVAC 在分片內共識選用 PBFT、非同步 BFT 或 BA⋆等不會(或極低概率)產生分叉的演算法,且一旦作惡產生錯誤的區塊必定會留下密碼學痕跡。而 Bitcoin 中的 PoW 演算法並不適用於片內共識,因為分片的算力弱於全網算力,攻擊者在分片內更容易佔據多數算力,在分片內產生分叉。令分片的可信度要求為q,則分片大小m應滿足:
對於公鏈上的交易來說,MultiVAC 單個分片內的共識強度將足以達到極高可靠性要求,這一可靠性需要至少數百量級的單片節點數。但對於表達通用業務邏輯的 DApp 和智慧合約而言,如果每一行程式碼都需要在數百上千節點上重複執行,顯然過於浪費。那麼,是否有辦法在不可信任的去中心化網路中,透過更少或者可選有限的節點數,完成合約層面的可靠計算,並保證過程與結果的可信度呢?MultiVAC將在 VRF 選取分片的基礎上,透過 BISC 指令集、MVM 虛擬機器、PoIE 共識為 DApp 構建在智慧合約層面上的彈性可信計算分片模型。
5 指令集與虛擬機器
虛擬機器為分散式節點執行智慧合約提供了良好的沙盒環境。但對要具有通用計算能力和無限擴充套件能力的公鏈來說,指令集的設計也至關重要。目前主流的指令集和虛擬機器設計方案比較簡易,無法支撐起復雜業務邏輯與應用。
MultiVAC 將建立適用於區塊鏈系統的專屬指令集 BISC(Blockchain Instruction Set Computer),並基於這一指令集系統設計具備通用計算能力的虛擬機器 MVM(MultiVAC Virtual Machine)。
5.1 指令集和虛擬機器的設計要求
長遠來看,區塊鏈虛擬機器可以直接是一臺專業的硬體計算機,具有更高的計算效能,未來還具有落地成為硬體 CPU的能力。區塊鏈指令集應該是一種高效、成熟的指令集,透過支援複雜通用計算來支撐複雜上層應用。
MultiVAC 基於長遠願景設計指令集和虛擬機器:
1, 支援通用計算能力。簡單的虛擬機器和位元組碼,如Ethereum 的虛擬機器 EVM[12],難以支撐複雜應用邏輯。面向未來的智慧合約和 DApp 要求虛擬機器除了圖靈完備之外,還要求指令集能支援更復雜的計算邏輯。
2, 支援高階語言,具有良好的編譯生態。MultiVAC是開源技術生態,支援大量高階語言並提供完善的編譯生態,可支援既有程式的平滑遷移,對開發者全面友好。
3, 具有高效可行的硬體架構。現有區塊鏈系統在將虛擬機器的位元組碼進行解釋或編譯執行時,會嚴重損失底層硬體效能。MVM 將基於成熟的開源 CPU 指令集進行二次設計和升級,具有進一步發展成為硬體計算機的能力,使得計算機能夠天然成為 MultiVAC 礦機節點,同時還具備桌面計算機或移動裝置所需要的通用計算能力,實現礦機和計算機的無縫切換。
5.2 BISC 指令集
MultiVAC將在現代最出色的開源精簡指令集RISC-V指令集基礎上,升級開發區塊鏈專用指令集 BISC(Blockchain Instruction Set Computer)。BISC 是一套靈活、定製化的指令集架構。它基於成熟的開源 RISC-V 社羣,有大量成熟的指令架構體系,也有良好的開源編譯生態。同時,MultiVAC 對它進行區塊鏈定製化,包括加入 256 位指令的處理,以及為公鏈執行加入雜湊與簽名指令。BISC 的開發也將遵循開源共享原則。
BISC 指令集支援一套精簡而完善的指令序列。如表 1所示。最後一列列舉了 BISC 指令集包含的指令內容。BISC包含了多個指令包,其中 RV 表示這是由 RISC-V 定義的標準指令擴充套件包,BRV 開頭的是 BISC 新定義的擴充套件包。RV或 BRV 後跟的數字表示資料位寬,最後的字母表示擴充套件包的功能。其中 I 指令包是 RISC-V 的基礎包,MAFD 4 種指令包是 RISC-V 定義的標準擴充套件包,IMAFD 5 種指令構成的集合統稱為標準通用指令集(G 指令)。G 指令,尤其 RV32G和RV64G是RISC-V社羣目前重點支援和實現的基礎指令集。而 L 和 B 兩種指令是 RISC-V 定義的額外擴充套件包,H 指令包和 X 指令是 BISC 指令集中全新定義的。
BISC 指令集架構支援基於 LLVM 的 C 語言編譯架構,GDB 除錯工具,glibc 標準庫等。LLVM(Low Level Virtual Machine,底層語言虛擬機器)本質是編譯器框架,目的是對任意程式語言,利用該基礎框架,構建一個包括編譯時、連結時、執行時等的語言執行器。以 RISC-V 為後端的 LLVM編譯框架將會支援 Java、Go 等高階語言。其架構如圖 3 所示。
5.3 MVM 虛擬機器
MVM(MultiVAC Virtual Machine)是為支援彈性計算模型而設計的區塊鏈專用虛擬機器,能夠為圖靈完備的高階語言所編寫的智慧合約提供高效率、可驗證的執行環境,具備靜態編譯指令最佳化、執行時態指令檢查、指令執行過程校驗、儲存空間分配排程等能力。
在分散式系統中,為了避免惡意程式碼對網路平臺的迴圈攻擊,以及缺陷程式碼對計算資源的持續佔用,執行智慧合約的沙盒環境應該具備解決圖靈停機問題的能力。MVM 採用類似 Ethereum 中 gas 計費的機制來解決此問題,對合約需要執行的 BISC 指令進行統計並計算費用,當成功完成計算任務或者費用已消耗完畢時,合約程式停止。
基於針對 BISC 指令集的 gas 計費機制,計算任務中的每一步都會被精確量化,這將會引導智慧合約向高價效比方向演化,即在實現計算目標不變的前提下,儘可能的減少計算步驟、精簡指令序列,為此 MVM 設計了針對性的最佳化與建議引擎,能夠透過測試環境預執行來提示開發者計算任務的指令集規模和單條指令單價成本,以及透過編譯環境為開發者提供程式碼最佳化建議。
除了可以在有限的時間內可以結束執行,在彈性計算模型中執行的智慧合約還需要經過誠實性工作驗證,MVM 透過嵌入 PoIE 共識來完成此任務,因此,計算、計費、驗證將融入到每段指令的執行過程中同時進行,其中需要說明的是,計費和驗證過程雖然消耗計算資源,但是服務能力中必要的保障機制,與執行任務所設定的 gas 額度無關。當指令序列在足夠充裕的 gas 費用保證下順利完成,並且驗證透過之後,節點將透過共識將計算結果打包釋出並獲得 gas 獎勵。
為了更便捷的進行指令操作,MVM 提供了面向 BISC更友好的記憶體模型,該模型能夠將計算機物理資源進行隔離,並且為合約執行提供靈活的執行時支援,內建了棧空間和堆空間。其中棧空間提供足夠的呼叫深度,支援多種資料結構型別,並可提供批次出入棧操作,而堆空間提供自由分配的能力,支援隨機定址,同時提供監測機制對已釋放資源進行回收,整體為通用計算提供基本儲存保障。
MVM 可以執行在所有網路節點中,提供計算服務的節點會將其透過網路接收到的計算任務納入以指令集單價為索引的優先佇列中,集中排程和執行計算任務,並交付計算結果。
6 PoIE 共識
現有分片技術如 Ethereum 分片方案、Zilliqa、Elastico等,對每個分片內部的節點數量有較大的要求,至少也應該是數百至數千的水平。考慮一個區塊鏈上的分散式應用 DApp,它的程式碼就是公鏈上的一個或多個合約,如果 DApp 的每一行程式碼都需要在數百上千個節點上重複執行,這個成本顯然是過於高昂了。
那麼,在區塊鏈這種不可信任的節點網路之中,有沒有辦法可以只讓少數幾個節點執行程式碼,就可以進行計算任務的驗證,還能保證計算過程及結果的可靠性?
7 儲存,傳輸與計算
一個健壯而具有擴充套件性的公鏈網路,應該在計算、儲存、傳輸三個維度上都具有良好的擴充套件性、安全性和去中心化。此外,還應有完善的經濟體系激勵更多節點加入網路,以提供計算、儲存、傳輸服務,建立完整而具有成長性的公鏈基礎設施。但要實現上述理想的網路平臺還面臨著很多學術和工程上的困難。
MultiVAC 首次提出了以彈性分片的方案去解決區塊鏈網路中的計算問題,同時透過 PoIE 去驗證計算的真實執行情況。PoIE 提供了節點確實執行的指令集序列Γ,以及經過同態隱藏後的節點專屬序列Λ。基於序列的執行情況,可以很容易地設計經濟激勵體系,如類似於 Ethereum 的 gas 激勵機制,設計計算任務獎勵函式:
MultiVAC 實現了高效能的交易處理能力,並且隨著加入節點數的增加,其交易處理能力也相應得到提升。當公鏈的平均交易處理量> 1,000 tps(平均值,不代表公鏈效能),平均單個交易的資料大小0.4 KB的時候,公鏈每年就會產生超過10TB賬本資料。顯然,普通的個人電腦已經不可能儲存完整的歷史賬本,所以解決的途徑只有兩條:使用超級節點,或者分片儲存。
在儲存層面,IPFS設計了完整的去中心化分散式儲存系統,提供了可定址、版本化、點對點的檔案系統。一些知名的公鏈系統已經使用了 IPFS 作為底層儲存,如 EOS。IPFS 使用了 filecoin作為儲存激勵機制,其他的區塊鏈儲存方案還有 Storj,MaidSafe,Siacoin等。
與 IPFS 基於 Hash 的儲存與檢索方案略有不同,MultiVAC 首次提出了基於 Merkle Root 的儲存結構。這樣的結構的好處是不僅僅可以基於 Merkle Root 值進行檢索或資料獲取,還支援較小的資料片段的檢索和獲取,以及針對片段的網路校驗,包括存在性校驗和真實性校驗。MultiVAC中同時支援基於 Hash與基於Merkle Root 的資料存取與檢索。
此外,MultiVAC 還加入了 VRF 分片儲存機制,建立分散式去中心化儲存系統。類似於 Bitcoin 輕節點,MultiVAC 的節點只儲存區塊的摘要資訊,真正的交易資訊及合約相關輸入輸出都儲存在分散式儲存之中。值得注意的是,在 MultiVAC中,資料的儲存僅作為系統的底層服務被使用,儲存者不能對資料進行任何修改操作。關於資料的所有產生、修改、刪除、確認、共識等行為均由上層邏輯達成,底層儲存服務僅保管確定性的資料並向上層提供存取功能。在 MultiVAC 中,節點提供計算與儲存服務都會獲得相應的激勵。
最後,區塊鏈網路還需要考慮資料傳輸的問題。如果使用分片儲存賬本,那麼必然面臨的問題是賬本的儲存壓力被轉化成了資料通訊的壓力。不過 IPFS 已經證明了分散式的儲存也帶來了分散式網路傳輸,可以緩解中心化節點的頻寬壓力。
若一個節點在出塊時需要處理t個交易:如果全網儲存賬本的話,則面臨O(t)的磁碟 IO 成本,O(t)的網路賬本同步成本;如果是分片儲存賬本,那麼就沒有磁碟 IO 成本,同樣是O(t)的網路賬本同步成本,另外還需要O(t)的交易驗證帶來的網路通訊成本。由於交易驗證可能是一個碎片化的網路通訊,所以工程實現上成本會高於本地磁碟 IO。但本質上,賬本分片不會增加網路傳輸的理論複雜度。
在傳輸的激勵機制層面,學術界和工業界都沒有一個有效的解決方案,目前仍然是一個開放的問題。即使在 IPFS和 filecoin 的方案之中,一個儲存節點可以透過 PoRep 和PoST 兩個共識來獲得儲存的獎勵。但在網路上其他節點需要使用這個資料的時候,由於頻寬成本等原因,儲存節點完全可以拒絕向請求方傳輸資料。此外,資料傳輸是高頻次的,每一次訪問都產生對應的獎勵交易也是不可能實現的,因為交易又會帶來資料傳輸的成本,進而產生了無限遞迴。一個良好的傳輸激勵機制需要綜合考慮頻寬、延遲、資料總傳輸量、請求頻次等問題,這些困難也使得它目前仍然是一個等待解決的問題。不過由於傳輸不會脫離計算或儲存而獨立存在,所以傳輸的激勵體制並不是必須的。
MultiVAC 綜合考慮中的計算、儲存、傳輸問題,並設計了計算與儲存的激勵機制,是首個實現了在計算、儲存、傳輸三個維度可擴充套件的公鏈。
8 總結
MultiVAC 設計了一種透過 VRF 選擇節點進行分片,以概率模型保證可信度的高效能公鏈,該架構為其上執行的智慧合約提供了可以自由定義和取捨安全性、去中心化和可擴充套件性的彈性可信計算分片模型。MultiVAC 網路的處理能力能夠伴隨節點數量和計算能力的擴張而持續增加;在業務支援方面,基於 BISC 指令集、MVM 虛擬機器、PoIE 共識的分散式計算平臺能夠為公鏈上的去中心化應用提供無限擴張的資源供給。
(MultiVAC 名稱來源於科幻作家阿西莫夫《最後的問題》中的超級計算機的名稱。這臺超級計算機,從現在我們熟知的電晶體結構,自我進化到與所有人類靈魂融為一體的超時空結構,最終在整個宇宙熱寂湮滅之時,完成了終極問題“如何逆轉宇宙的熵增”的計算和再現。)
關於更多MultiVAC資訊:
更多區塊鏈專案介紹:http://www.qukuaiwang.com.cn/news/xiangmu
風險提示:區塊鏈投資具有極大的風險,專案披露可能不完整或有欺騙。請在嘗試投資前確定自己承受以上風險的能力。區塊網只做專案介紹,專案真假和價值並未做任何稽覈。