當前位置:
首頁 > 最新 > 區塊鏈虛擬機技術簡述

區塊鏈虛擬機技術簡述

導讀:區塊鏈虛擬機作為區塊鏈中重要的技術支撐,隨著區塊鏈從1.0到3.0不斷的進行著演進, 本文藉助各個階段區塊鏈虛擬機的主要代表來簡述其在區塊鏈發展的各個階段的特點。

概述

區塊鏈對於大多數人來說目前已經不是一個陌生的概念。隨著區塊鏈知識和技術的普及,越來越多的應用場景里我們看到了區塊鏈技術落地的身影。技術改變著我們的思維模式和產品形態,同時思維模式的突破和新的產品需求也催生著技術的不斷發展。區塊鏈技術發展到今天主要經歷了三個主要的發展階段,每個階段在其關鍵技術上都有更新和突破。虛擬機目前作為區塊鏈技術中的重要技術支撐也隨著區塊鏈一同進行不斷的演進,本文結合區塊鏈三個主要階段分別介紹區塊鏈虛擬機技術的發展歷史。

區塊鏈虛擬機技術的發展

比特幣作為區塊鏈1.0時代主要的應用代表,其直到今天依舊被公認為區塊鏈技術的傑出代表。比特幣作為一種去中心化的數字貨幣,以其為基礎的貨幣交易成為推動其不斷向下發展的核心元素。作為一種P2P數字經濟生態的承載,比特幣設計上就要考慮提供針對不同交易活動的內部支持,在比特幣中這種的設計和實現被稱為腳本。比特幣中的腳本擴種了傳統交易的語義,同時保證了交易的合法性和安全性。從開發的角度上講,比特幣中的腳本提供給用戶一種可以編程的簡單介面。形式上我們可以把比特幣中的腳本看成是出現在區塊鏈2.0時代中的智能合約,相應的比特幣中對腳本的解釋常式我們把它定義為比特幣中的虛擬機,其可以看做是區塊鏈虛擬機技術1.0的代表。下文通過對比特幣中腳本解釋器的分析來說明區塊鏈虛擬機1.0技術的主要特點。

比特幣的腳本定義上為非圖靈完備,這也從本質上影響了解釋器的設計的複雜性。比特幣中的腳本解釋器基於棧這種數據結構對腳本進行解釋執行。這裡我們可以看出比特幣腳本解釋器的主要特點是:

基於棧式結構設計;

解釋執行;

待解釋的常式為圖靈非完備。

比特幣中腳本從功能上分為鎖定腳本和解鎖腳本,兩者結合來判斷和驗證交易的有效性和合法性。如下圖所示為解鎖腳本和鎖定腳本的說明:

(圖片來自《精通比特幣》)

我們不難看出這種腳本的設計不需要特別複雜的操作,執行的流程固定也相對穩定和安全,突出的問題就是靈活性較差,但這就是把雙刃劍,在喪失靈活性的同時,通過最小的代價獲得了一定的運行時安全。為更加形象的說明比特幣腳本的解釋執行過程,現在通過一個示例來說明,具體如下為一個簡單的加法驗證腳本:

對上述代碼的棧式解釋流程如下文敘述:

通過對上述一個簡單腳本的執行分析,並結合棧式解析執行的特點,歸納比特幣中解釋器相關主要特點為:

棧式解釋執行,腳本運行流程簡單;

操作,數據不分離,無額外存儲需求;

數據寬度相對固定,空間使用鬆散;

腳本圖靈非完備,停機可確定預見。

以上也可以看做是區塊鏈虛擬機技術1.0的主要特點,比特幣中的腳本解釋器雖然還不能看做是一個完善的執行智能合約的虛擬機,但是我們在這個階段已經看出虛擬機技術在區塊鏈技術中的生命力。


以太坊作為區塊鏈2.0時代主要的應用代表,其為用戶提供了一套完整的智能合約運行環境,這包括完整智能合約描述語言以及圖靈完備的虛擬機。以太坊智能合約官方語言為Solidity,利用Solidity實現智能合約邏輯後,通過編譯器編譯成元數據(位元組碼)最後發布到以太坊上。以太坊虛擬機(EVM)本質上依然是一個基於棧的解釋器。以太坊虛擬機的設計和實現體現了一個精簡標準的虛擬機模型,相對於比特幣中的腳本解釋器,EVM已經有了質的飛越。以太坊虛擬機雖然依然是一個基於棧的解釋器模型,但是在以下幾個方面體現了它設計和實現上的不同:

固定的機器位寬,目前定義為256位;

操作與消費關聯,一種新的模式;

多種存儲狀態,棧上存儲,臨時存儲和永久存儲;

智能合約為圖靈完備。

以太坊虛擬機採用256位固定的機器位元組寬度,這樣的位元組寬度如果從CPU體系架構來看,無疑是沒有優勢的,畢竟目前對於256操作數的指令執行需要拆分為多條的低位操作指令,那麼這裡採用256位的操作數可能出於以下兩種原因:

256位符合密碼學計算的要求,例如SHA256,這點在precompile_contract中就有體現;

更少的OP操作,這樣一定程度上有效的減少Gas的消費。

以太坊支持圖靈完備的智能合約,合約運行結束的條件一個是程序自己結束,另外一個就是合約運行消耗完給定的Gas數值。Gas的設置表面上是保證了虛擬機最終能運行到一個可以停機的狀態,其實更主要的是它充當了一種衡量工作的計量單位。以太坊不同於比特幣,比特幣中的交易費用是根據交易的千位元組大小來進行計算的,而以太坊相對於比特幣面臨的合約操作更加的複雜化,所以需要一種新的衡量標準,這種衡量標準要求每個操作需要支付具體的費用,這樣可以保證整個網路不會受大量密集工作的影響而陷入一個僵局的狀態。同時Gas和ETH之間的轉化在一定程度上也刻畫出類似黃金和紙幣的模式。

以太坊上數據的存儲相對比特幣更加的靈活,棧、臨時存儲和永久存儲幾乎覆蓋了智能合約的存儲需求,其中只有棧上數據的存儲是免費的,永久存儲是最耗費Gas的。雖然棧上數據的存儲是免費的,但是其也不是可以任意利用,目前棧的深度最大值設置為1024。還有重要的一點是以太坊上的智能合約存儲在一種稱作是智能合約賬戶的一類賬戶中,這類賬戶區別於外部賬戶,外部賬戶可以通過交易調用智能合約的賬戶,而智能合約賬戶彼此之間也可以通過交易來調用。作為虛擬機2.0的代表的以太坊虛擬機(EVM)相對於1.0的主要特點如下:

合約語言完整,圖靈完備;

機器位寬,存儲系統基本模型有所體現;

運行操作計費模式;

引入合約存儲賬戶概念。

雖然以太坊虛擬機為代表的區塊鏈虛擬機2.0技術中無重大的突破,但是智能合約的完善加上圖靈完備的智能合約運行支持讓區塊鏈虛擬機在區塊鏈技術體系中的位置愈加的重要。

隨著區塊鏈應用對虛擬機以及智能合約的要求的增多,區塊鏈虛擬機在技術上也在逐漸的進行完善,在以EOS為代表區塊鏈3.0中,虛擬機主要在以下幾個方面有所發展:

智能合約多語言的支持;

更快的運行速度;

更加豐富的系統程序支持;

虛擬機安全。

在EOS的技術白皮書中並沒有定義一個具體的虛擬機實現,其描述只要滿足沙盒執行條件的虛擬機都可以運行在EOS中,這樣的架構設計說明已經為虛擬機的發展奠定了一個基調,那就是多種模式的並存,最後應用會選擇一個合適的虛擬機實例運行。

發展到區塊鏈3.0的時代,虛擬機的架構總體來說有兩種:一種是解釋器類型,其多基於棧,一種是JIT技術類型。EOS代碼中提供了一個WASM-JIT的實現,該實現上引入了寄存器的概念到其中。通過將wasm文件內容轉化為IR中間語言形式,最後利用LLVM-JIT技術實現代碼的運行。其中選用wasm作為智能合約的實現格式,一是考慮到智能合約與虛擬機生態問題,支持力度,二是考慮到目前針對wasm的技術方案相對成熟。由於工具鏈的完善,wasm天然可以對應多個語言前端,我們不僅僅可以用JS寫智能合約,也可以用c++和c來編寫我們的智能合約。

隨著對多語言的支持,更多的智能合約將部署到區塊鏈虛擬機上,這大大的催生了周邊相關調試環境,集成開發環境等相關方向的發展,但是這也帶來了一部分問題,例如智能合約的審計,虛擬機運行時安全問題也慢慢的浮出水面。同時目前多應用場景也使虛擬機的整體架構發生改變,例如利用虛擬機實現MapReduce計算模型,機器學習以及人工智慧引入到虛擬機計算中去,區塊鏈中的虛擬機的角色在慢慢的發生改變。

總結

虛擬機技術落地於區塊鏈中,是區塊鏈對虛擬機的需要,區塊鏈虛擬機技術的發展從側面也反應了區塊鏈自身的發展,目前區塊鏈虛擬機技術的發展不僅僅為運行在區塊鏈上的應用提供了更多的設想空間,同時也愈加的體現了虛擬機對於區塊鏈的重要性。從區塊鏈虛擬機1.0到3.0的發展,我們看到未來區塊鏈虛擬機運行的不僅僅是智能合約,而更多的是智能。

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 全球大搜羅 的精彩文章:

封神榜,能看出啥啟發
閑聊婆媳矛盾

TAG:全球大搜羅 |