學區塊鏈:「令人著迷」的虛擬機?

前段時間,專員寫了一篇文章,說了一下智能合約的相關東西,其實智能合約與虛擬機是密不可分的兩個東西,一般我們介紹的時候都會把這兩者結合起來一起講,但是專員還是想說一下這個單獨說一下虛擬機這個東西,

因為區塊鏈從沒有有虛擬機到有虛擬機可以說是一個里程碑式的進步。

在虛擬機出現以前,大家可以想象一下,其實在區塊鏈上最大的作用其實也就是就是數字貨幣的交易,當然這也是目前來看區塊鏈存在的最大意義了。但是,自從虛擬機出現以後,其實也就是EVM成熟以後,區塊鏈才會有了更大的一篇天地,在虛擬機上我們可以執行更多的業務邏輯,幫更多的有更多的想象空間,也能幫助區塊鏈有更多落地的可能性。

學區塊鏈:“令人著迷”的虛擬機?

何為虛擬機?

百度百科提供一小段:“虛擬機(Virtual Machine)指通過軟件模擬的具有完整硬件系統功能的、運行在一個完全隔離環境中的完整計算機系統。”專員覺得,雖說百度百科對虛擬機的介紹是對傳統虛擬機的介紹,但是歸根到底,區塊鏈的虛擬機其實也是具有這些個性質存在的。

首先不管EVM等其他的虛擬機也好,其實一個先決條件,專員覺得就是虛擬機得是一個沙箱的環境,就像剛剛百度百科上說的那樣,他是一個運行在完全隔離的環境中的計算機系統。

為什麼要沙箱呢?

打個比方,也就是說EVM的內部代碼其實不難接觸到區塊鏈的網絡、文件系統或者說其他進程等等,如果說EVM能夠接觸到這些模塊,很容易出現一個狀況,大家可以想象,無論是誰編寫一個惡意的智能合約的代碼,部署到以太坊網絡中,輕則出現ETH被盜等情況的出現,嚴重的話,專員覺得,完全可以造成整個以太坊網絡的崩潰,造成毀滅性的打擊。

其次,虛擬機的另外一個重要的作用其實就是一個較為完整的計算機系統,但是在區塊鏈中,可能這一點已經被淡化了,在區塊鏈虛擬機中,承擔的作用其實主要就是一個運行智能合約的作用,本質上來說就是一個代碼的運行環境。

以EVM為例子來說,首先用戶不可能直接編寫能夠讓以太坊虛擬機執行的字節碼,用戶首先需要用Solidity這種高級語言進行合約編寫,編寫完成之後,再由虛擬機進行編譯,生成合約的BIN(可執行二進制)文件,之後便可以進行合約的部署以及調用如下圖所示。而EOS的WASM(Web Assembly)也是一種新型的網絡標準,用戶可以通過C、C++等來編寫代碼,通過編譯器編譯成WASM文件,之後通過少量的適配即可以做到合約代碼的執行。

學區塊鏈:“令人著迷”的虛擬機?

而在智能合約中,其實還有一個作用就是合約數據的存儲

智能合約中的數據需要被持久化到區塊鏈中,保證數據不會被丟失。

舉個例子,在以太坊中,有兩種主要的數據類型,一種是區塊數據,另外一種極為狀態數據,而智能合約中的數據就是我們所說的狀態數據,在EVM中有一個StateDB(一種邏輯上的定義),就是用來存儲合約相關的數據。每一次合約的調用,其實就是一個從StateDB中取數據,進行計算,最後再存回StateDB的過程。

另外,在各種虛擬機中,為了防止虛擬機執行過多的計算指令,陷入死循環等等,各類虛擬機都會制定一系列的檢查機制:

比如EVM,在虛擬機中的執行代碼收到一個參數的嚴格限定,這個參數就是我們長說的Gas,無限循壞最終會因為Gas被耗盡而中止,也是間接的保護了虛擬機的安全穩定性。

綜上,專員覺得,區塊鏈+虛擬機其實是一個很令人著急的組合方式,他使區塊鏈有了更多的可能性,也幫助區塊鏈有更好的發展,但是就像專員之前說過,智能合約和虛擬機是一把雙刃劍,他在帶給我們便利的同時,我們也需要更多的關注他的安全性,避免出現過多的安全穩定性的問題,使虛擬機更加成熟,可用性更高。

歡迎感興趣的朋友在評論區與專員互動


分享到:


相關文章: