2019年作為比特幣發(fā)展十周年,隨著區(qū)塊鏈知識(shí)和技術(shù)不斷普及,區(qū)塊鏈技術(shù)在不斷尋找著超乎金融領(lǐng)域之外的更多商業(yè)探索,其中區(qū)塊鏈的基礎(chǔ)設(shè)施作為可編程商業(yè)經(jīng)濟(jì)的基石,在不斷探索中前進(jìn)。
區(qū)塊鏈技術(shù)領(lǐng)域基礎(chǔ)設(shè)施——虛擬機(jī),是實(shí)現(xiàn)智能合約系統(tǒng)最為關(guān)鍵和核心的技術(shù)。智能合約不僅是業(yè)務(wù)邏輯的載體,同時(shí)又扎扎實(shí)實(shí)地落在了技術(shù)實(shí)現(xiàn)的層面。由此可見,虛擬機(jī)是區(qū)塊鏈技術(shù)落地的基石,在如今技術(shù)快速發(fā)展乃至未來,區(qū)塊鏈技術(shù)都將離不開虛擬機(jī)的重要支撐。Qtum 量子鏈正是認(rèn)識(shí)到區(qū)塊鏈虛擬機(jī)的重要性和未來的趨勢,早在2016年《Qtum 量子鏈技術(shù)白皮書 v0.7》第三章完整闡述了新一代主流語言編程的Qtum-x86虛擬機(jī),作為支持未來區(qū)塊鏈商業(yè)經(jīng)濟(jì)實(shí)際落地的基礎(chǔ)設(shè)施。
到底什么是虛擬機(jī)?普通的虛擬機(jī)和區(qū)塊鏈虛擬機(jī)的差別是什么?以及為什么智能合約需要區(qū)塊鏈虛擬機(jī)? Qtum-x86 虛擬機(jī)具有哪些獨(dú)特的優(yōu)勢?
什么是虛擬機(jī)
想徹底理解虛擬機(jī),首先應(yīng)該理解“虛擬化”這個(gè)抽象化的詞,也就進(jìn)一步會(huì)理解普通虛擬機(jī)和區(qū)塊鏈虛擬機(jī)之間的區(qū)別。維基百科對(duì)其定義:“在計(jì)算領(lǐng)域,虛擬化是一個(gè)寬泛的術(shù)語,指的是對(duì)計(jì)算機(jī)資源的抽象。虛擬化對(duì)其用戶,不管是應(yīng)用程序還是終端用戶,隱去了計(jì)算資源的物理特性。這包括使一個(gè)單一的物理資源(比如一個(gè)服務(wù)器,一個(gè)操作系統(tǒng),一個(gè)應(yīng)用,或是一個(gè)存儲(chǔ)設(shè)備)表現(xiàn)為多個(gè)虛擬資源運(yùn)行;也包括多個(gè)物理資源(比如存儲(chǔ)設(shè)備或多臺(tái)服務(wù)器)表現(xiàn)為一個(gè)單一的虛擬資源。..”
再精煉一些來說就是:
· 由一個(gè)物理資源創(chuàng)建多個(gè)虛擬化資源
· 由一個(gè)或多個(gè)物理資源創(chuàng)建一個(gè)虛擬化資源
日常中網(wǎng)絡(luò)、存儲(chǔ)、硬件都會(huì)頻繁用于表達(dá)某些特定概念。在這一領(lǐng)域的早期成果有 Christopher Strachey 的論文“大型高速計(jì)算機(jī)的時(shí)分系統(tǒng)”。IBM 對(duì)虛擬化的探索始于其 CP-40 and M44/44X 研究系統(tǒng)。作為回報(bào),這又促成了其商業(yè)產(chǎn)品 CP-67/CMS 。虛擬機(jī)的概念使用戶隔離開,并為每個(gè)用戶單獨(dú)模擬出一套的完整的系統(tǒng)。IBM 模型的一個(gè)主要特征就是通過分割計(jì)算機(jī)資源和完全隔離程序來使程序共享同樣的硬件。 大型計(jì)算機(jī)在當(dāng)時(shí)的資源非常稀缺因此多為共用,因此把虛擬機(jī)計(jì)算時(shí)間切割成許多共享用戶的私人計(jì)算時(shí)間。
服務(wù)端虛擬化
服務(wù)端虛擬化顧名思義為服務(wù)器“虛擬化”,以 VMware,Microsoft,以及 Citrix 等公司為代表。運(yùn)用服務(wù)器虛擬技術(shù),一個(gè)物理的機(jī)器可以被分成多個(gè)虛擬的機(jī)器。在這種虛擬化技術(shù)的背后,其核心是 hypervisor(虛擬機(jī)監(jiān)視器)的概念。Hypervisor 雖是很小的一層,它可以攔截操作系統(tǒng)對(duì)硬件的調(diào)用。
并且憑借著這一層的 hypervisor 可以做到:
1. 提升硬件利用率:節(jié)省硬件,節(jié)約成本
2. 安全:干凈的鏡像可用來重建受損的系統(tǒng),可以提供沙盒和隔離來限制可能的攻擊。
3. 開發(fā):調(diào)試和性能監(jiān)控的用例能夠以可重復(fù)的方式方便的搭建起來
4. 統(tǒng)一:實(shí)現(xiàn)各環(huán)境與操作數(shù)據(jù)的統(tǒng)一性
為什么區(qū)塊鏈需要虛擬機(jī)
理解了“虛擬化”的不同場景的含義后,那區(qū)塊鏈為什么還需要虛擬機(jī),它需要哪些虛擬化特性的部分?
這與區(qū)塊鏈的獨(dú)特性相關(guān),區(qū)塊鏈系統(tǒng)需要共識(shí)機(jī)制,保證每一個(gè)人輸出的計(jì)算結(jié)果是一致的。以比特幣舉例A將BTC發(fā)送至B,為了實(shí)現(xiàn)智能合約,將自動(dòng)交易轉(zhuǎn)化成代碼。區(qū)塊鏈虛擬機(jī)所承擔(dān)的主要任務(wù)是運(yùn)行智能合約。本質(zhì)上,區(qū)塊鏈虛擬機(jī)就是一個(gè)代碼的運(yùn)行環(huán)境。從而保證區(qū)塊鏈網(wǎng)絡(luò)中分布式節(jié)點(diǎn)的一致性。
從安全性考慮,越是功能強(qiáng)大的智能合約,就越是邏輯復(fù)雜,也越容易出現(xiàn)邏輯上的漏洞。在區(qū)塊鏈中,虛擬機(jī)如果是從安全性方面考慮的話一方面是為了防止因?yàn)椴环ǚ肿踊蛘?a href="http://www.solar-ruike.com.cn/v/tag/1730/" target="_blank">程序員的編寫代碼錯(cuò)誤而影響到了整個(gè)主鏈,更重要的是防止運(yùn)行智能合約的設(shè)備遭受攻擊,如果直接運(yùn)行在設(shè)備系統(tǒng)上,可能會(huì)有安全隱患。因?yàn)槊總€(gè)節(jié)點(diǎn)都要運(yùn)行智能合約進(jìn)行驗(yàn)證,但如果不用虛擬機(jī),而是在機(jī)器上直接運(yùn)行,當(dāng)智能合約開發(fā)者疏忽或測試不充分,而造成智能合約的代碼有漏洞的話,就非常容易被黑客利用并攻擊,這與上文中服務(wù)器虛擬機(jī)安全性有著共通性。
2018年4月, BEC 因整數(shù)溢出編寫漏洞,被黑客批量轉(zhuǎn)走了近50% token,然而這個(gè)錯(cuò)誤本應(yīng)是語言層面的基本常識(shí)。以太坊的智能合約多次出現(xiàn)漏洞,業(yè)界普遍認(rèn)為與底層系統(tǒng)有關(guān),在此 Qtum量子鏈出的虛擬機(jī)技術(shù)連載(一)中分析過由于它的設(shè)計(jì)比較非主流,很難有主流的編程語言能夠移植到 EVM 上。這種設(shè)計(jì)可以說對(duì)于近50年來的大多數(shù)編程范例來說都不易兼容,因此不夠友好。
為了將區(qū)塊鏈的開發(fā)推向更加主流的階段,Qtum 量子鏈選用x86指令集。x86指令集發(fā)展已超過40年,時(shí)至今日,x86 架構(gòu)的兼容性也越發(fā)強(qiáng)大,生態(tài)體系越發(fā)完善,成就占有率超過90%的市場。今天的 x86 CPU 中已融入了解碼的功能,其將長度不定的 x86 指令轉(zhuǎn)換為長度固定的類似于 RISC 指令,然后將其交給 RISC 內(nèi)核進(jìn)行處理。解碼包括了硬件解碼和微解碼兩種,簡單的 x86 指令采用硬件解碼速度較快,而復(fù)雜的指令則需要微解碼,將其分成若干條簡單指令后才進(jìn)行執(zhí)行。目前,x86 架構(gòu)的優(yōu)勢在于單條指令功能強(qiáng)大,指令數(shù)少速度較快;而由于指令數(shù)少,高頻率運(yùn)行時(shí)也不需要很大的寬帶占用往 CPU 傳輸指令。
比特幣:比特幣的區(qū)塊鏈技術(shù)主要是為數(shù)字貨幣交易提供簡單的技術(shù)支持。
以太坊:以太坊開發(fā)智能合約以及圖靈完備的EVM為標(biāo)志。
Qtum量子鏈:以 Qtum-x86 為代表的區(qū)塊鏈基礎(chǔ)設(shè)施建設(shè)逐步落地,推動(dòng)區(qū)塊鏈商業(yè)經(jīng)濟(jì)快速發(fā)展。
在 QTUM 技術(shù)實(shí)驗(yàn)室發(fā)布的 為何 Qtum 量子鏈要設(shè)計(jì)X86虛擬機(jī)?Qtum-x86 設(shè)計(jì)時(shí)計(jì)劃實(shí)現(xiàn)多種語言編寫智能合約。因?yàn)镋VM 開發(fā)需要學(xué)習(xí)solidity,增加學(xué)習(xí)成本的同時(shí)穩(wěn)定性不強(qiáng),如果區(qū)塊鏈虛擬機(jī)支持多種編程語言可以變得更加安全。以 Rust 為例,Rust 相對(duì)于其他新型編寫語言中非常高效、輕量級(jí)的編程語言,最重要的是,它的安全性較高,能夠降低因程序員在編程中出現(xiàn)的錯(cuò)誤而導(dǎo)致被攻擊的風(fēng)險(xiǎn)。
目前以太坊的開發(fā)費(fèi)用還是非常高昂,并由于沒有標(biāo)準(zhǔn)庫,也使得占用了大量的內(nèi)存Qtum-x86 為這些標(biāo)準(zhǔn)程序庫函數(shù)提供特殊的內(nèi)部代碼,類似于以太坊的預(yù)編譯合約。這種功能可以不需要為新的預(yù)編譯合約添加特殊支持,即可使用,使得在不影響其他共識(shí)等變量之下,更加的高效、便捷和節(jié)省內(nèi)存。
Qtum 量子鏈開發(fā)團(tuán)隊(duì)設(shè)計(jì)的初衷是能夠支持多種虛擬機(jī),以太坊虛擬機(jī)作為第一個(gè)支持的虛擬機(jī),但目前AAL的功能受到EVM的極大限制,而 Qtum-x86 虛擬機(jī)就將不再受到這些限制。
Qtum-x86 虛擬機(jī)的大內(nèi)存空間,以及它高效的操作代碼集,可以實(shí)現(xiàn)完整的區(qū)塊鏈數(shù)據(jù)進(jìn)行智能合約分析,這在以太坊虛擬機(jī)上是無法實(shí)現(xiàn)的。在未來有可能支持基于ai的智能合約自動(dòng)監(jiān)控區(qū)塊鏈,成為潛在的 oracle,允許智能合約對(duì)自身進(jìn)行動(dòng)態(tài)調(diào)整,以便在當(dāng)前的網(wǎng)絡(luò)條件下盡可能高效地運(yùn)行。這些區(qū)塊鏈數(shù)據(jù)可以包括完整交易數(shù)據(jù)以及節(jié)點(diǎn)的統(tǒng)計(jì)數(shù)據(jù)(共識(shí)相關(guān))。由于這些數(shù)據(jù)都是常量,且只需要占用極少的內(nèi)存空間,所以公開這些數(shù)據(jù)沒有什么弊端。
目前,以太坊虛擬機(jī)強(qiáng)制每個(gè)用戶都使用指向32-bytekey指向32-byte數(shù)據(jù)。開發(fā)人員管理起來可能會(huì)相當(dāng)復(fù)雜,尤其是考慮到存儲(chǔ)空間碎片化和維護(hù)的問題。因此,在Qtum-x86虛擬機(jī)上,會(huì)給智能合約添加一個(gè)通用的key-value存儲(chǔ)。這樣以來,用戶就可以使用任何從1字節(jié)到更長字節(jié)的key,并將其指向相同長度的變量值。目前,Qtum 開發(fā)團(tuán)隊(duì)提出的gas模型首先對(duì)讀/寫該數(shù)據(jù)庫的操作收取固定費(fèi)用,之后再根據(jù)實(shí)際操作的字節(jié)數(shù)進(jìn)行按字計(jì)價(jià)收費(fèi)。當(dāng)然,這個(gè)功能也會(huì)被計(jì)入stateRootHash中,這樣SPV錢包就可以使用這個(gè)數(shù)據(jù)庫與智能合約進(jìn)行交互。
Qtum 開發(fā)團(tuán)隊(duì)另一個(gè)設(shè)計(jì)目標(biāo)是使智能合約的依賴關(guān)系變得明確且不可變。這僅僅是一種opt-in功能,所以仍然可以允許調(diào)用未知合約。對(duì)于那些確切知道它們依賴關(guān)系的智能合約,可以在某些特定情況下并行執(zhí)行,有助于降低的gas成本,同時(shí)還有其他一些好處。這將是基于Qtum-x86虛擬機(jī)的智能合約的一個(gè)主要的擴(kuò)展優(yōu)勢。
一同回看,Qtum-x86開發(fā)工程師Howard現(xiàn)場演示視頻。分別在Qtum-x86虛擬機(jī)上以C、C++、Rust這三種主流開發(fā)語言調(diào)用API,展示了未來開發(fā)者用這些主流開發(fā)語言編寫智能合約的范例。
評(píng)論
查看更多