EVM(以太坊虛擬機),用Solidity程式語言編寫,可以執行任何算法複雜的代碼。以太坊就是通過EVM從而實現智能合約的調用和執行。發展至今,可以說EVM已經非常成熟並且應用廣泛。
那麼,什麼是以太坊虛擬機?
不要著急,容我們詳細道來
第一:以太坊帳戶
我們要明白在以太坊中的帳戶,一般有兩類,一個是外部帳戶,一個是合約帳戶,兩個帳戶的區別在於擁有不同的控制載體,外部帳戶,該類帳戶被公鑰-私鑰對控制(人類)。合約帳戶,該類帳戶被存儲在帳戶中的代碼控制。但是他們共用一個地址空間。外部帳戶的地址是由公鑰決定的,合約帳戶的地址是在創建改合約時確定的(這個地址由合約創建者的地址和該地址發出過的交易數量計算得到,地址發出過的交易數量也被稱作"nonce"),合約帳戶存儲了代碼,外部帳戶則沒有,換句話說,去除掉這一點來說,兩類帳戶沒有多少區別。
第二:以太坊交易
一筆交易是一條消息,從一個帳戶發送到另一個帳戶(可能是相同的帳戶或者零帳戶,見下文)。交易可以包含二進位數據(payload)和以太幣。如果目標帳戶包含代碼,該代碼會執行,payload就是輸入數據。如果目標帳戶的地址是0,那麼交易將創建一個新合約。而這個合約地址不是零地址,對於這一點,我們一定要切記,記住了這一點,我們對於下面所要進行的工作就有了思路,言歸正傳,這個地址是由合約創建者的地址和該地址發出過的交易數量(被稱為nonce)計算得到。創建合約交易的payload被當作EVM字節碼執行。執行的輸出做為合約代碼被永久存儲。這意味著,為了創建一個合約,你不需要向合約發送真正的合約代碼,而是發送能夠返回真正代碼的代碼。
第三:Gas
這個可以理解為傳統金融業務中的手續費,當以太坊上產生一筆交易的時候,每筆交易都會被收取一定數量的gas,gas的目的是限制執行交易所需的工作量,同時為執行支付費用。當EVM執行交易時,gas將按照特定規則被逐漸消耗。
gasprice(gas價格,以太幣計)是由交易創建者設置的,發送帳戶需要預付的交易費用=gasprice*gasamount。如果執行結束還有gas剩餘,這些gas將被返還給發送帳戶。無論執行到什麼位置,一旦gas被耗盡(比如降為負值),將會觸發一個out-of-gas異常。當前調用幀所做的所有狀態修改都將被回滾。
第四:存儲,主存和棧
每個帳戶有一塊持久化內存區域被稱為存儲。其形式為key-value,key和value的長度均為256比特。在合約裡,不能遍歷帳戶的存儲。相對於另外兩種,存儲的讀操作相對來說開銷較大,修改存儲更甚。一個合約只能對它自己的存儲進行讀寫。第二個內存區被稱為主存。合約執行每次消息調用時,都有一塊新的,被清除過的主存。主存可以以字節粒度尋址,但是讀寫粒度為32位元組(256比特)。操作主存的開銷隨著其增長而變大(平方級別)。
從上述的講述中,我們可以得出一個重要的信息,那就是EVM不是基於寄存器,而是基於棧的虛擬機。因此所有的計算都在一個被稱為棧的區域執行。棧最大有1024個元素,每個元素256比特。對棧的訪問只限於其頂端,方式為——允許拷貝最頂端的16個元素中的一個到棧頂,或者是交換棧頂元素和下面16個元素中的一個。所有其他操作都只能取最頂的兩個元素,並把結果壓在棧頂。當然可以把棧上的元素放到存儲或者主存中。但是無法只訪問棧上指定深度的那個元素,在那之前必須要把指定深度之上的所有元素都從棧中移除才行。
用很通俗的話語來解釋以太坊虛擬機,我們舉個例子,你有一個房子,馬上就要進行裝修,但是裝修不是說把所有的家具擺放在一塊就可以,這樣會顯的很雜亂,也沒有章法可言,美觀更無從談起,為此,我們會提前先進行裝修計劃的打造,打一個草稿,或者更為專業一點的,那就是打開SketchUp軟體模擬一個同樣的三維空間,並在上面繪製規劃圖紙。
也就是,以太坊虛擬機扮演的就是這樣的角色,它生成現有作業系統的虛擬鏡像,具有和真實Windows系統完全一樣的功能。這為現在的區塊鏈落地應用提供了一種虛擬的測試環境,所以成為區塊鏈重要的技術支撐。
在此框架之下,ORION集成了EVM模塊,並使⽤Substrate的contractpallet來⽀持solidity智能合約的開發與運⾏。這不僅有利於自身鏈上智能合約的快速開發與調用,也為以後與以太坊跨鏈轉接提供了兼容性
獵戶座在虛擬機和區塊鏈的其他部分之間提供了一個環境無關接口。這是通過統一的獵戶座API(應用程式編程接口)完成的,該API使區塊鏈軟體的各個組件可以通過一種通用語言彼此「對話」,而無需學習任何新技巧。使用獵戶座,其他軟體組件無需針對特殊情況、異常、或者別的奇怪代碼進行編程(程式設計師將其稱為「簡陋代碼」、「義大利麵條代碼」或者其他NSFW術語)。相反,獵戶座提供了一個穩定、安全、有前瞻性的平臺,用於集成各種虛擬機,而無需接觸任何VM代碼。
在獵戶座中,允許執行智能合約代碼。合約狀態或內存存儲在智能合約地址中。可以將這種存儲視為位於智能合約地址的無限長度的數據結構數組。存儲機制確保存儲位置沒有衝突,並遵循一組規則。使用這些規則,我們可以解碼任何合約的狀態。解碼存儲在映射中的數據需要知道所使用的密鑰。
聲明:本文由入駐金色財經的作者撰寫,觀點僅代表作者本人,絕不代表金色財經贊同其觀點或證實其描述。
提示:投資有風險,入市須謹慎。本資訊不作為投資理財建議。