在我們了解以太坊區塊鏈時,有個概念經常出現—— EVM (Ethereum Virtual Machine),中文譯為“以太坊虛擬機”。 EVM被稱作以太坊的“心臟” ,可見其對以太坊網絡的重要性。而對於區塊鏈愛好者來說,這也是必須要了解的一個概念。
本文會用簡單易懂的語言,帶領大家對EVM做簡單了解(僅對概念、功能等做了解)。在下文中,我們將一起學習:
什麼是以太坊虛擬機?
為什麼要用虛擬機?
這個虛擬機的功能是什麼?
我們先來看看虛擬機是個什麼東西?
虛擬機(Virtual Machine)指通過軟件模擬的具有完整硬件系統功能的、運行在一個完全隔離環境中的完整計算機系統。
也就是說在實體計算機中能夠完成的工作在虛擬機中都能夠實現。虛擬機通過生成現有操作系統的全新虛擬鏡像,具有和windows系統完全一樣的功能,但它又是獨立運行的,不會對真正的系統產生影響。
以太坊虛擬機,顧名思義就是以太坊的虛擬機。需要注意的是,比特幣區塊鏈裡是沒有虛擬機的。因為比特幣的核心功能是分佈式存儲數據,我們可以在這個網絡裡記錄、驗證、存儲及復制交易數據。以太坊則是去中心化的“世界計算機”,開發者們還可以在這個操作系統上構建去中心應用程序,這就意味著以太坊不僅要能夠分佈式數據存儲,還需要計算、運行代碼、溝通交流等。
以太坊虛擬機(EVM)
我們都知道,以太坊區塊鏈區別於比特幣區塊鏈最關鍵的點在於,它加入了智能合約為保持智能合約運行結果的準確性以及安全性,智能合約的運行環境就顯得至關重要。為此,Vitalik和Gavin Wood設計了以太坊虛擬機。
以太坊上的節點可以下載以太坊客戶端,在他們自己的計算機上通過以太坊虛擬機這個虛擬的操作系統來運行,這樣能更好地解決節點的系統差異,更好地實現智能合約的結果。用一句話總結,以太坊虛擬機就是智能合約的運行環境。
以太坊虛擬機運行在沙盒環境中,智能合約代碼可在以太坊虛擬機內部運行並對外完全隔離。同時以太坊虛擬機又能與主網的其餘部分隔離,運行時不影響主區塊鏈的操作。沙盒也是計算機術語,在計算機安全領域中是一種安全機制,為運行中的程序提供的隔離環境。
以太坊區塊鏈vs EVM vs 智能合約
以太坊區塊鏈可以承載三種類型的交易:
1、把ETH從一個帳戶轉到另一個帳戶。例如,從你的帳戶發送3ETH到你朋友的賬戶裡。在這裡,交易記錄包含以下內容:交易生效時的時間戳、發送者的ETH地址、接收者地址,以及發送金額。
2、 ETH從一個賬戶轉移到“無人區”。這類交易需要創建智能合約,例如,你和朋友打賭,誰先在1個月內瘦5斤,誰就能得到1ETH,在以太坊上創建一個智能合約,寫明規則,誰勝出,誰就能自動獲得1ETH。在這裡,交易記錄只包含發送者的帳戶和時間戳。
3、 ETH從外部賬戶轉移到智能合約。在這裡,賬戶想要執行智能合約,轉賬就會根據智能合約完成,而且相關的執行規則會記錄在數據中,來指導這個合約如何運行。
每次發生上述交易時,網絡節點將通過以太坊虛擬機運行智能合約代碼。但需要注意的是運行智能合約是需要費用的。
智能合約的價格
每次執行智能合約,都需要向以太坊虛擬機支付一定費用來執行。這個費用支付給幫忙存儲、計算、執行和驗證智能合約的節點。
每個智能合約的執行費用Gas來支付,Gas可以轉換成ETH。在執行智能合約時,需要先指定想要花費的Gas,當交易完成或Gas花費完時,執行終止。因此,智能合約不會無限循環地執行到地老天荒。
所以,只要以太坊區塊鏈上有交易發生,以太坊虛擬機就會執行以下流程:
1、確認轉賬額是否正確、驗證簽名的有效性、驗證該交易的nonce是否與該特定交易帳戶的nonce匹配。如果存在不匹配,交易將返回。
2、計算轉賬所需的費用,並收取Gas。
3、運行轉賬操作。
如果以太坊虛擬機檢測到發送方沒有放入足夠的gas或ETH,則將會對交易進行回滾。那麼,交易費將不會退還,並付給礦工。如果由於收件人地址錯誤而導致轉賬失敗,以太坊虛擬機會將轉賬金額以及相關費用退還給發件人。