服務端虛擬化顧名思義為伺服器“虛擬化”,以 VMware,Microsoft,以及 Citrix 等公司為代表。運用伺服器虛擬技術,一個物理的機器可以被分成多個虛擬的機器。在這種虛擬化技術的背後,其核心是 hypervisor(虛擬機器監視器)的概念。Hypervisor 雖是很小的一層,它可以攔截作業系統對硬體的呼叫。
並且憑藉著這一層的 hypervisor 可以做到:
1. 提升硬體利用率:節省硬體,節約成本
2. 安全:乾淨的映象可用來重建受損的系統,可以提供沙盒和隔離來限制可能的攻擊。
3. 開發:除錯和效能監控的用例能夠以可重複的方式方便的搭建起來
4. 統一:實現各環境與運算元據的統一性
為什麼區塊鏈需要虛擬機器
理解了“虛擬化”的不同場景的含義後,那區塊鏈為什麼還需要虛擬機器,它需要哪些虛擬化特性的部分?
這與區塊鏈的獨特性相關,區塊鏈系統需要共識機制,保證每一個人輸出的計算結果是一致的。以比特幣舉例A將BTC傳送至B,為了實現智慧合約,將自動交易轉化成程式碼。區塊鏈虛擬機器所承擔的主要任務是執行智慧合約。本質上,區塊鏈虛擬機器就是一個程式碼的執行環境。從而保證區塊鏈網路中分散式節點的一致性。
從安全性考慮,越是功能強大的智慧合約,就越是邏輯複雜,也越容易出現邏輯上的漏洞。在區塊鏈中,虛擬機器如果是從安全性方面考慮的話一方面是為了防止因為不法分子或者程式設計師的編寫程式碼錯誤而影響到了整個主鏈,更重要的是防止執行智慧合約的裝置遭受攻擊,如果直接執行在裝置系統上,可能會有安全隱患。因為每個節點都要執行智慧合約進行驗證,但如果不用虛擬機器,而是在機器上直接執行,當智慧合約開發者疏忽或測試不充分,而造成智慧合約的程式碼有漏洞的話,就非常容易被駭客利用並攻擊,這與上文中伺服器虛擬機器安全性有著共通性。
2018年4月, BEC 因整數溢位編寫漏洞,被駭客批次轉走了近50% token,然而這個錯誤本應是語言層面的基本常識。以太坊的智慧合約多次出現漏洞,業界普遍認為與底層系統有關,在此 Qtum量子鏈出的虛擬機器技術連載(一)中分析過由於它的設計比較非主流,很難有主流的程式語言能夠移植到 EVM 上。這種設計可以說對於近50年來的大多數程式設計範例來說都不易相容,因此不夠友好。
為了將區塊鏈的開發推向更加主流的階段,Qtum 量子鏈選用x86指令集。x86指令集發展已超過40年,時至今日,x86 架構的相容性也越發強大,生態體系越發完善,成就佔有率超過90%的市場。今天的 x86 CPU 中已融入瞭解碼的功能,其將長度不定的 x86 指令轉換為長度固定的類似於 RISC 指令,然後將其交給 RISC 核心進行處理。解碼包括了硬體解碼和微解碼兩種,簡單的 x86 指令採用硬體解碼速度較快,而複雜的指令則需要微解碼,將其分成若干條簡單指令後才進行執行。目前,x86 架構的優勢在於單條指令功能強大,指令數少速度較快;而由於指令數少,高頻率執行時也不需要很大的寬頻佔用往 CPU 傳輸指令。
比特幣:比特幣的區塊鏈技術主要是為數字貨幣交易提供簡單的技術支援。
以太坊:以太坊開發智慧合約以及圖靈完備的EVM為標誌。
Qtum量子鏈:以 Qtum-x86 為代表的區塊鏈基礎設施建設逐步落地,推動區塊鏈商業經濟快速發展。
在 QTUM 技術實驗室釋出的 為何 Qtum 量子鏈要設計X86虛擬機器?Qtum-x86 設計時計劃實現多種語言編寫智慧合約。因為EVM 開發需要學習solidity,增加學習成本的同時穩定性不強,如果區塊鏈虛擬機器支援多種程式語言可以變得更加安全。以 Rust 為例,Rust 相對於其他新型編寫語言中非常高效、輕量級的程式語言,最重要的是,它的安全性較高,能夠降低因程式設計師在程式設計中出現的錯誤而導致被攻擊的風險。
目前以太坊的開發費用還是非常高昂,並由於沒有標準庫,也使得佔用了大量的記憶體Qtum-x86 為這些標準程式庫函式提供特殊的內部程式碼,類似於以太坊的預編譯合約。這種功能可以不需要為新的預編譯合約新增特殊支援,即可使用,使得在不影響其他共識等變數之下,更加的高效、便捷和節省記憶體。
Qtum 量子鏈開發團隊設計的初衷是能夠支援多種虛擬機器,以太坊虛擬機器作為第一個支援的虛擬機器,但目前AAL的功能受到EVM的極大限制,而 Qtum-x86 虛擬機器就將不再受到這些限制。
Qtum-x86 虛擬機器的大記憶體空間,以及它高效的操作程式碼集,可以實現完整的區塊鏈資料進行智慧合約分析,這在以太坊虛擬機器上是無法實現的。在未來有可能支援基於ai的智慧合約自動監控區塊鏈,成為潛在的 oracle,允許智慧合約對自身進行動態調整,以便在當前的網路條件下儘可能高效地執行。這些區塊鏈資料可以包括完整交易資料以及節點的統計資料(共識相關)。由於這些資料都是常量,且只需要佔用極少的記憶體空間,所以公開這些資料沒有什麼弊端。
目前,以太坊虛擬機器強制每個使用者都使用指向32-bytekey指向32-byte資料。開發人員管理起來可能會相當複雜,尤其是考慮到儲存空間碎片化和維護的問題。因此,在Qtum-x86虛擬機器上,會給智慧合約新增一個通用的key-value儲存。這樣以來,使用者就可以使用任何從1位元組到更長位元組的key,並將其指向相同長度的變數值。目前,Qtum 開發團隊提出的gas模型首先對讀/寫該資料庫的操作收取固定費用,之後再根據實際操作的位元組數進行按字計價收費。當然,這個功能也會被計入stateRootHash中,這樣SPV錢包就可以使用這個資料庫與智慧合約進行互動。
Qtum 開發團隊另一個設計目標是使智慧合約的依賴關係變得明確且不可變。這僅僅是一種opt-in功能,所以仍然可以允許呼叫未知合約。對於那些確切知道它們依賴關係的智慧合約,可以在某些特定情況下並行執行,有助於降低的gas成本,同時還有其他一些好處。這將是基於Qtum-x86虛擬機器的智慧合約的一個主要的擴充套件優勢。
一同回看,Qtum-x86開發工程師Howard現場演示影片。分別在Qtum-x86虛擬機器上以C、C++、Rust這三種主流開發語言呼叫API,展示了未來開發者用這些主流開發語言編寫智慧合約的範例。
更多區塊鏈資訊:www.qukuaiwang.com.cn/news