Ethereum Virtual Machine的縮寫,中文直譯全稱為以太坊虛擬機。對於沒有接觸過軟件開發的用戶來說,EVM看似晦澀難懂。但是如果我們先類比什麼是Java虛擬機,或許會更好理解。

一、簡單的類比:EVM之於以太坊,正如Java虛擬機之於Java語言

在做開發前,程序員需要把Java代碼編譯成字節碼,但計算機無法識別字節碼,Java虛擬機的作用就是把字節碼編譯成計算機系統可以識別的機器碼指令,然後在計算機上運行。那麼同樣的,EVM的存在是為了能讓程序員用Solidity編寫的合約代碼,運行在以太坊的環境中。

以太坊虛擬機? eWASM能否真如其設想,撬動整個以太坊2.0

可見,以太坊就相當於計算機環境,而EVM負責把合約代碼編譯成以太坊能識別的機器碼運行。在網絡較為繁榮,也就是開發者搭建應用需求比較旺盛的時候,每天甚至每小時都會有成千上萬條新的代碼寫入以太坊網絡。但是,這些合約代碼,如果無法被編譯成系統可以識別的語言信號,就無法轉化成具體的指令和程序。所以,我們可以把EVM看成是以太坊生態中最重要的資源轉換器。沒有了他,以太坊上的代碼就無法生效,即便是開發者孜孜不倦地編寫程序語言,也等同於停更。須知,任何一款程序的代碼停止更新,就意味著他走向終結。另外,如果沒有EVM,任何人都無法在以太坊協議上執行程序軟件,因為這樣一來他們寫入系統的代碼,全是Bug。

為進一步強化讀者對EVM的概念,大家不妨先明晰兩個概念:虛擬機和圖靈完備性。

二、讀懂兩個最關鍵概念:虛擬機和圖靈完備性

首先,虛擬機(Virtual Machine)是指通過軟件模擬的具有完整硬件系統功能的、運行在一個完全隔離環境中的完整計算機系統。

也就是說在實體計算機中能夠完成的工作,在虛擬機中都能夠實現。虛擬機通過生成現有操作系統的全新虛擬鏡像,具有和Windows系統完全一樣的功能,但它又是獨立運行的,不會對真正的系統產生影。

以太坊虛擬機? eWASM能否真如其設想,撬動整個以太坊2.0

因此,可以這麼理解,以太坊的虛擬機(EVM)就是以太坊智能合約的運行環境,系統中的節點可藉助EVM來運行自己的DAPP。另外,由於以太坊虛擬機的運行環境完全與主鏈隔離,這自然而然地形成了一種測試環境。這種測試環境,給了許多沒有區塊鏈技術經驗的開發者大膽試錯的機會,因為他們的錯誤代碼完全不會影響到以太坊智能合約。

其次,圖靈完備是個技術術語,得名自英國數學家艾倫·圖靈(Alan Turing),發明了第一台圖靈機器,它是當今計算機的先驅。後來,計算機業界用圖靈完備代指可以處理任意複雜程度的計算。從理論上看,以太坊可以部署任何類型和功能的計算機程序,只是這些程序是分佈式的,而非通常我們所看到的中心化的,而這一切,需要歸功於EVM的底層設計。從這一角度來看,比特幣並不是圖靈完備的,因為他只是個分佈式賬本,無法執行任何應用程序。

最後,綜合這兩大概念,可知EVM是一個可以執行任何復雜度計算的、完全虛擬化的計算機系統,從這一點來看它又像以太坊的大腦。

三、EVM執行過程中的關鍵性模塊

EVM的運轉,緊緊地圍繞著以太坊的生態。所以,很多讓我們感到晦澀但又熟悉的以太坊術語,其實均與EVM有著莫大的關係。

首先是操作碼。 EVM就是通過操作碼,來解釋和轉譯Solidity編寫的指令。目前EVM中有140多個不同的操作碼,他們類似EVM直接發出的指令。例如,CREAT操作碼對應著創建智能合約,STOP操作碼意指暫停正在運行的合約;

以太坊虛擬機? eWASM能否真如其設想,撬動整個以太坊2.0

其次是Gas費。 Gas費是在EVM環境中執行代碼的資源,以“gwei”(以太單位)為單位。具體來看,執行任何一筆交易,都需要消耗算力資源和存儲空間,就像我們在手機中任意下載一個應用,都需要佔用電量和內存。這部分隱性的消耗,在鏈上就直觀地轉化成顯性的Gas費成本。 EVM和Gas費之間的關係,像是汽車和汽油,EVM每執行一項指令,都要消耗對應額度的Gas費;

最後是執行轉賬功能,這也是EVM和全體以太坊用戶都能產生關聯的地方。 EVM在轉賬時的具體步驟如下:

1)核對是否有誤差,包括轉賬數值和簽名的有效性等;

2)計算轉賬所需要的Gas費,並執行收取Gas費指令;

3)將數字資產轉賬到指定的地址。

需要注意的是,EVM若檢測出轉賬者未支付足夠的手續費,那麼轉賬會被回滾,且不退轉賬費,直接支付給礦工。另外,如果是收款人地址錯誤導致的交易失敗,EVM會原封不動的把轉賬本金和手續費退回給付款人。

四、淺析EVM公鏈的概念和重要動向

以太坊在公鏈賽道,穩坐龍頭地位,無論是生態應用數量和總鎖倉量都佔行業絕大多數。因此,市面上主流的公鏈,都選擇兼容EVM,他們也因此得名EVM公鏈。

EVM兼容,指的是在其公鏈上搭建的智能合約,可以快速便捷而又低成本地在以太坊上來回遷移、無縫搬運。目前,很多公鏈在開發中,特意實現了EVM兼容的功能,以達到最大化承接以太坊外溢項目的功能,類似於移動互聯網玩法中的引流。所以,許多公鏈項目方都將實現EVM兼容,作為其最大的賣點和看點。

以太坊虛擬機? eWASM能否真如其設想,撬動整個以太坊2.0

當然,從目前的行情來看,EVM兼容鏈的最終優勝者,依然寥寥。

五、什麼是eWASM?它和EVM的關係是什麼?

熟悉以太坊生態的朋友都知道,以太坊2.0是以太坊的終極形態,它在實現了POW轉POS機制後,能夠高性能地處理一切計算任務,甚至媲美Web2的互聯網產品。但是,按照目前EVM的底層設計和性能表現來看,EVM實在無法與以太坊2.0的理想狀態適配。於是,eWASM(ETH版的WebAssemly)成為EVM的接棒者、替代品。

交待一下,WebAssemly即Web上的彙編,作為近年來興起的Web執行環境,是一種為基於棧的虛擬機設計的的二進制指令格式。相對JavaScript,擁有更好的性能、較低的存儲成本、更安全的執行環境、更多的語言支持等優勢。

按照設想,因為相比於EVM,eWASM具有更好的性能以及更好的擴展性,可以支持Solidity、C++、Rust、AssemblyScript等編程語言,開發合約會更容易。 eWASM也與當前的Web標準兼容,因而更容易在普通瀏覽器中運行,用戶無需擴展程序即可訪問DApp。

此外,以太坊並不是唯一一個使用WASM作為其底層執行引擎的,EOS、Dfinity、Polkadot、Tron、Cardano、Spacemesh等都已經或正在採用WASM。

值得注意的是,以太坊2.0分為三個階段:PoS、分片,以及排在最後的eWASM。目前大家最關心的轉POS,也就是合併,還在準備過程當中。所以尚需時日的eWASM,其代碼更新的頻次並不多,但他的概念足夠吸引人。 eWASM能否真如其設想,撬動整個以太坊2.0,還將持續關注。

今天的分享就到這裡,後期會給大家帶來其他賽道的龍頭項目分析。感興趣的可以點個關注。我也會不定期整理一些前沿諮詢和項目點評,歡迎各位志同道合的幣圈人一起來探索。