以太坊虛擬機
以太坊虛擬機(EVM)是運行智能合約的環(huán)境团赏,運行在每一個節(jié)點上膀钠,類似于一個獨立的沙盒姆吭,嚴格控制了訪問權(quán)限冷溃;也就是說油昂,合約代碼在EVM中運行時是不能接觸網(wǎng)絡(luò)震贵、文件或者其他進程的擎宝。EVM模塊主要分為三大模塊:編譯合約模塊籍铁、Ledger模塊和EVM執(zhí)行模塊涡上。
編譯合約模塊主要是對底層Solc編譯器進行一層封裝,提供RPC接口給外部服務(wù)拒名,對用Solidity編寫的智能合約進行編譯吩愧。編譯后將會返回二進制碼和相應(yīng)的合約ABI,ABI可以理解為合約的手冊靡狞,通過ABI可以知道合約的方法名耻警、參數(shù)、返回值等信息。
Ledger模塊主要是對區(qū)塊鏈賬戶系統(tǒng)進行修改和更新甘穿,賬戶一共分為兩種腮恩,分別是普通賬戶和智能合約賬戶,調(diào)用方如果知道智能合約地址則可以調(diào)用改合約温兼,賬戶的每一次修改都會被持久化到區(qū)塊鏈中秸滴。
EVM執(zhí)行模塊作為核心模塊,主要功能是對交易中的智能合約代碼進行解析和執(zhí)行募判,一般分為創(chuàng)建合約和調(diào)用合約兩部分荡含,同時為了提高效率,EVM執(zhí)行模塊除了支持普通的字節(jié)碼執(zhí)行外届垫,還支持JIT模塊的指令執(zhí)行释液,普通的字節(jié)碼執(zhí)行主要是對編譯后的二進制碼直接執(zhí)行其指令,而JIT模式會對執(zhí)行過程中的指令進行優(yōu)化装处,如把連續(xù)的push指令打包成一個切片误债,方便程序高效執(zhí)行。EVM執(zhí)行流程圖:
(1)EVM執(zhí)行收到Transaction信息妄迁,然后判斷Transaction類型是部署合約還是執(zhí)行合約寝蹈。如果是部署合約,執(zhí)行指令集登淘,來存儲合約地址和編譯后的代碼:如果是執(zhí)行合約或是調(diào)用合約箫老,則使用EVM來執(zhí)行輸入指令集。
(2)執(zhí)行上一條指令集之后黔州,判斷EVM是否停機耍鬓,如果停機則判斷是否正常停機,正常停機則更新合約狀態(tài)到區(qū)塊鏈辩撑,否則會滾合約狀態(tài)界斜。如果不停機則回到上一步(1)進行判斷。
(3)執(zhí)行完的合約會返回一個執(zhí)行結(jié)果合冀,EVM會將結(jié)果存儲在Receipt回執(zhí)中各薇,調(diào)用者可以通過Transaction的哈希來查詢結(jié)果。
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者