2019年作為比特幣發展十周年,隨著區塊鏈知識和技術不斷普及,區塊鏈技術在不斷尋找著超乎金融領域之外的更多商業探索,其中區塊鏈的基礎設施作為可編程商業經濟的基石,在不斷探索中前進。
區塊鏈技術領域基礎設施——虛擬機,是實現智能合約系統最為關鍵和核心的技術。智能合約不僅是業務邏輯的載體,同時又扎扎實實地落在了技術實現的層面。由此可見,虛擬機是區塊鏈技術落地的基石,在如今技術快速發展乃至未來,區塊鏈技術都將離不開虛擬機的重要支撐。Qtum 量子鏈正是認識到區塊鏈虛擬機的重要性和未來的趨勢,早在2016年《Qtum 量子鏈技術白皮書 v0.7》第三章完整闡述了新一代主流語言編程的Qtum-x86虛擬機,作為支持未來區塊鏈商業經濟實際落地的基礎設施。
到底什么是虛擬機?普通的虛擬機和區塊鏈虛擬機的差別是什么?以及為什么智能合約需要區塊鏈虛擬機? Qtum-x86 虛擬機具有哪些獨特的優勢?
什么是虛擬機
想徹底理解虛擬機,首先應該理解“虛擬化”這個抽象化的詞,也就進一步會理解普通虛擬機和區塊鏈虛擬機之間的區別。維基百科對其定義:“在計算領域,虛擬化是一個寬泛的術語,指的是對計算機資源的抽象。虛擬化對其用戶,不管是應用程序還是終端用戶,隱去了計算資源的物理特性。這包括使一個單一的物理資源(比如一個服務器,一個操作系統,一個應用,或是一個存儲設備)表現為多個虛擬資源運行;也包括多個物理資源(比如存儲設備或多臺服務器)表現為一個單一的虛擬資源。..”
再精煉一些來說就是:
· 由一個物理資源創建多個虛擬化資源
· 由一個或多個物理資源創建一個虛擬化資源
日常中網絡、存儲、硬件都會頻繁用于表達某些特定概念。在這一領域的早期成果有 Christopher Strachey 的論文“大型高速計算機的時分系統”。IBM 對虛擬化的探索始于其 CP-40 and M44/44X 研究系統。作為回報,這又促成了其商業產品 CP-67/CMS 。虛擬機的概念使用戶隔離開,并為每個用戶單獨模擬出一套的完整的系統。IBM 模型的一個主要特征就是通過分割計算機資源和完全隔離程序來使程序共享同樣的硬件。 大型計算機在當時的資源非常稀缺因此多為共用,因此把虛擬機計算時間切割成許多共享用戶的私人計算時間。
服務端虛擬化
服務端虛擬化顧名思義為服務器“虛擬化”,以 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,展示了未來開發者用這些主流開發語言編寫智能合約的范例。
評論
查看更多