基礎概念

EVM,是ERC協(xié)議和運作的心臟。

簡單的類比:EVM之" />

国产成人精品无码青草_亚洲国产美女精品久久久久∴_欧美人与鲁交大毛片免费_国产果冻豆传媒麻婆精东

15158846557 在線咨詢 在線咨詢
15158846557 在線咨詢
所在位置: 首頁 > 營銷資訊 > 網站運營 > 了解區(qū)塊鏈虛擬機:EVM、HVM、WASM、MOVE

了解區(qū)塊鏈虛擬機:EVM、HVM、WASM、MOVE

時間:2023-06-27 12:45:01 | 來源:網站運營

時間:2023-06-27 12:45:01 來源:網站運營

了解區(qū)塊鏈虛擬機:EVM、HVM、WASM、MOVE:
在區(qū)塊鏈上,用戶通過運行部署在區(qū)塊鏈上的合約,完成需要共識的操作。而為智能合約提供運行環(huán)境的便是對應的虛擬機。
EVM

基礎概念

EVM,是ERC協(xié)議和運作的心臟。

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

我們寫的java代碼會被編譯成字節(jié)碼,但計算機無法識別字節(jié)碼;java虛擬機把字節(jié)碼編譯成計算機系統(tǒng)可以識別的機器碼指令,然后在計算機上運行。如下圖所示:

EVM的存在是為了能讓我們用Solidity編寫的合約代碼,運行在以太坊的環(huán)境中。這樣類比的話,以太坊就相當于計算機環(huán)境,EVM把合約代碼編譯成以太坊能識別的機器碼運行。如下圖所示:

大致流程:

當智能合約被編譯成二進制文件后,被部署到區(qū)塊鏈上。用戶通過調用智能合約的接口,來觸發(fā)智能合約的執(zhí)行操作。EVM執(zhí)行智能合約的代碼,修改當前區(qū)塊鏈上的數(shù)據(jù)(狀態(tài))。被修改的數(shù)據(jù),會被共識,確保一致性。

它實際上是完全隔離的,這意味著在EVM上運行的代碼無法訪問網絡、文件系統(tǒng)和其他進程。智能合約對其他的智能合約的訪問權也有限,在區(qū)塊鏈網絡上單獨運作。

編寫智能合約有三個主要步驟:

  1. 用高級語言編寫,如Solidity
  2. 用EVM編譯器編譯成字節(jié)碼
  3. 用客戶端上傳到區(qū)塊鏈網絡
技術細節(jié)

EVM的存儲模型

EVM是一個基于堆棧的虛擬機,具有臨時內存字節(jié)數(shù)組和持久鍵值存儲(持久存儲在Storage中)。

Stack:EVM是基于棧(stack)的虛擬機,stack用來保存指令的輸入輸出數(shù)據(jù),最大深度為1024個字,其中每個單元就是一個字。

臨時存儲Memory:內存,一個簡單的內存數(shù)組,用于臨時存儲EVM代碼運行中需要存取的各種數(shù)據(jù),基于字進行尋址和擴展

永久存儲Storage:用來保存所有合約“狀態(tài)”的永久存儲,由以太坊客戶端獨立維護,每個賬戶的存儲區(qū)域被以“字”為單位劃分為若干個“槽”(solt),合約中的狀態(tài)變量會根據(jù)其具體類型分別保存到這些槽中。例如在合約創(chuàng)建時由EVM根據(jù)合約定義的狀態(tài)變量進行初始化,將他們保存進以“字”為單位劃分的“存儲槽(solt storage)”中。

Storage也是作為是世界狀態(tài)的一部分存在的,客戶端會用一個MPT來維護其數(shù)據(jù)。

ROM:用來保存所有EVM程序代碼的只讀存儲,由以太坊客戶端獨立維護。

交易在EVM的執(zhí)行

輸入一筆交易,內部會轉換成一個Message 對象,傳入EVM執(zhí)行。

普通轉賬交易

如果是一筆普通轉賬交易,那么直接修改StateDB中對應的賬戶余額即可。

智能合約的創(chuàng)建或者調用

如果是智能合約的創(chuàng)建或者調用,則通過EVM中的解釋器加載和執(zhí)行字節(jié)碼,執(zhí)行過程中可能會查詢或者修改StateDB。

1.生成Contract對象

交易會被轉換成一個Message對象傳入EVM,而EVM則會根據(jù)Message生成一個Contract對象以便后續(xù)執(zhí)行。

2.送入解釋器執(zhí)行

EVM是基于棧的虛擬機,解釋器中需要操作四大組件

PC:類似于CPU中的PC寄存器,指向當前執(zhí)行的指令

Stack:執(zhí)行堆棧,位寬為256bits,最大深度為1024

Memory:內存空間

Gas:油費池,耗光油費則交易執(zhí)行失敗

EVM的每條指令稱為一個OpCode,占用一個字節(jié),所以指令集最多不超過256

EVM機器語言

EVM機器語言分為特定的指令集組,例如算術運算,邏輯和比較運算,控制流,系統(tǒng)調用,堆棧操作和儲存器操作。除典型的Bytecode操作外,EVM還必須管理帳戶資訊(即地址和余額),當前gas價格和區(qū)塊資訊。

通用堆棧操作

POP // 項目出棧PUSH // 項目入棧MLOAD // 將項目加載到記憶體中MSTORE // 在記憶體中儲存項目JUMP // 改變程式計數(shù)器的位置PC // 程式計數(shù)器MSIZE // 活動的記憶體大小GAS // 交易可用的gas數(shù)量DUP // 復制棧項目SWAP // 交換棧項目通用系統(tǒng)操作

CREATE // 創(chuàng)建新的帳戶CALL // 在帳戶間傳遞消息的指令RETURN // 執(zhí)行停機REVERT // 執(zhí)行停機,恢復狀態(tài)更改SELFDESTRUCT // 執(zhí)行停機,并標記帳戶為刪除的算術運算

MUL //乘法SUB //減法DIV //整數(shù)除法SDIV //有符號整數(shù)除法MOD // Modulo(剩余)操作SMOD //簽名模運算ADDMOD //模數(shù)加法MULMOD //模數(shù)乘法EXP //指數(shù)運算STOP //停止操作環(huán)境操作碼

ADDRESS //當前執(zhí)行帳戶的地址BALANCE //帳戶余額CALLVALUE //執(zhí)行環(huán)境的交易值ORIGIN //執(zhí)行環(huán)境的原始地址CALLER //執(zhí)行調用者的地址CODESIZE //執(zhí)行環(huán)境程式碼大小GASPRICE //gas價格狀態(tài)EXTCODESIZE //帳戶的程式碼大小RETURNDATACOPY //從先前的記憶體調用輸出的數(shù)據(jù)的副本與現(xiàn)有的虛擬機科技作比較

虛擬機技術與EVM的不同之處在于它們的目的是提供管理程式功能,或者處理客戶作業(yè)系統(tǒng)與底層主機作業(yè)系統(tǒng)和硬體之間的系統(tǒng)調用,任務調度和資源管理的軟體抽象。

然而,Java VM(JVM)規(guī)范的某些方面確實包含與EVM的相似之處。從高級概述來看,JVM旨在提供與底層主機作業(yè)系統(tǒng)或硬體無關的運行時環(huán)境,從而實現(xiàn)各種系統(tǒng)的兼容性。在JVM上運行的高級程式語言(如Java或Scala)被編譯到相應的指令集Bytecode 中。這與編譯要在EVM上運行的Solidity源檔案相當。

EVM的幾個功能

EVM和公鏈的關系

目前市面上主流的公鏈,大部分都兼容EVM。

為什么這些鏈要做EVM兼容呢?

核心當然是以太坊在公鏈領域的影響力。目前市場上的各種公鏈此起彼伏,但是ETH依然是公鏈領域的龍頭。這些新興的公鏈需要利用以太坊引流,如果開發(fā)者可以把智能合約直接無縫遷移到自己的鏈上,那就是最好的引流方式。

在這些公鏈產生之前,以太坊的生態(tài)里,EVM已經部署了大量的應用。如果你不兼容這些應用,前進的道路必然是舉步維艱。

下面這個圖是2022年5月31日的全球公鏈的市場份額:

這個網站看到所有兼容EVM的公鏈:

https://www.coincarp.com/zh/chainlist/

HVM

HVM介紹

概述

HVM為趣鏈科技首創(chuàng)支持Java語言的智能合約執(zhí)行引擎,支持符合Java編寫規(guī)范多種數(shù)據(jù)結構,內置數(shù)據(jù)表結構,可以實現(xiàn)業(yè)務數(shù)據(jù)可視化,在保證智能合約執(zhí)行的安全性、確定性、可終止性的前提下,提供了一系列靈活的應用模式和工具方法集,以滿足復雜多樣的業(yè)務場景需求,為廣泛的區(qū)塊鏈開發(fā)人員提供更便捷、靈活、安全的區(qū)塊鏈應用開發(fā)模式。

使用

HVM合約執(zhí)行的操作:從SDK調用一筆HVM的合約,首先需要共識模塊將通過共識的區(qū)塊交易發(fā)送給執(zhí)行模塊,然后執(zhí)行模塊調用HVM暴露出來的合約接口,最后合約執(zhí)行完成后會將結果返回,將執(zhí)行結果寫入賬本中。

在架構層面,HVM自上而下主要分為三個部分:合約操作層、庫函數(shù)層以及虛擬機層。

1.虛擬機層

虛擬機層主要是在合約執(zhí)行過程中,對于合約解析執(zhí)行的內部操作。為了提高整體的執(zhí)行效率,HVM設計定制類加載器,類加載緩存提供合約地址到合約類加載器的映射,一個合約類加載器保存合約的字節(jié)碼和合約類實例,采用最近最少使用淘汰策略(LRU)減少類重復加載帶來的開銷;指令解析從開始的每次對指令進行解析到將指令做成單例,并進行棧幀復用,大量節(jié)省指令執(zhí)行時間,提高整體執(zhí)行效率。

2.庫函數(shù)層

庫函數(shù)包括數(shù)據(jù)結構、賬本操作、日志信息以及加解密等功能。

3.合約操作層

這一層與用戶直接相關聯(lián),主要包括合約部署、調用等全生命周期管理,對于合約的操作通過會對鏈上的合約數(shù)據(jù)狀態(tài)產生影響,所以平臺采取了靈活的合約管理提案申請-閾值投票-提案執(zhí)行的策略,通過合約管理員對合約操作進行控制,保證合約管理操作的公平與安全。

優(yōu)勢

EVM未對出現(xiàn)的異常進行詳細定位,給編譯調試造成極大的難度。而HVM通過內置日志工具類,支持六種日志級別:critical、error、warning、notice、info、debug??梢詾槊糠N常見的錯誤進行合理的提示,方便使用者對合作操作過程中產生的異常進行debug,方便開發(fā)和運維快速定位問題。

HVM采取分層調用的模式,可以有效降低合約升級的成本。其實現(xiàn)方法主要通過InvokeBean的方式在業(yè)務調用層在不更新合約的情況下定義豐富的業(yè)務邏輯, 合約層只實現(xiàn)最核心、最基本的原子操作。以轉賬場景為例,合約層只有增加余額和減少余額的方法,在InvokeBean調用層定義轉賬的邏輯:如余額是否充足、 減少轉讓方余額和增加接收方余額。

一些業(yè)務場景需要在智能合約中進行簽名驗簽邏輯處理,從而進行身份認證,便于進行權限判斷或者后續(xù)業(yè)務的開展。因此HVM設計了基于TEE的加解密工具, 支持在合約中調用存儲于TEE的公私鑰完成簽名、驗簽操作,并支持ECDSA國標系列、SM國密系列等多種加解密算法,具有方便友好安全的特性。

合約編碼者可以通過智能合約和訪問控制策略來限制訪問數(shù)據(jù)的角色和用戶,在合約中針對節(jié)點、角色、用戶定制不同的合約函數(shù)訪問權限。合約編碼者可以在 合約中為一些高權限的函數(shù)設置權限控制,使得該函數(shù)只能被固定地址的調用者調用,從而實現(xiàn)訪問權限控制。

WASM

WASM-VM簡介

概述

WebAssembly(wasm) 是一個基于二進制操作指令的棧式結構的虛擬機,wasm可以被編譯為機器碼,可以更快,更高效的執(zhí)行本地方法和硬件資源,通過和js協(xié)作,前端可以實現(xiàn)更快,更復雜的計算和應用。

不僅可以嵌入瀏覽器增強web應用,也可以應用于其他的場景。

wasm支持高級語言編程,目前比較成熟的編譯器支持C / C++ /Rust。

工作原理

WASM是一種不依賴于具體物理機器的匯編語言,可以抽象的理解成它是概念的機器語言,而不是實際的物理機器語言,因此,WebAssembly指令也可稱為虛擬指令,可以更快的更直接的映射的到機器碼!

優(yōu)勢

WASM虛擬機已經被Google,F(xiàn)acebook,Microsoft等世界頂級互聯(lián)網公司同時支持,同時也可以在所有流行的瀏覽器中運行。WASM虛擬機一開始設計的目的是用于解決Web程序日益嚴峻的性能問題,因其有以下優(yōu)越的特性,被越來越多的非Web項目所采用。

  1. 快速、高效、可移植:通過利用常見的硬件能力,WASM代碼在不同平臺上能夠以接近本地速度運行。
  2. 可讀、可調試:WASM是一門低階語言,但是它有一種人類可讀的文本格式,這允許通過人工來寫代碼、看代碼以及調試代碼。
  3. 保持安全:WASM被限制運行在一個安全的沙箱執(zhí)行環(huán)境中。像其他網絡代碼一樣,它遵循瀏覽器的同源策略和授權策略。
  4. 不破壞網絡:WASM的設計原則是與其他網絡技術和諧共處并保持向后兼容。
與EVM對比

速度

預編譯

靈活性和互操作性

WASM支持更多的語言,并且提供了比EVM更廣泛的工具集。WASM支持傳統(tǒng)語言,如Rust、C和c++。WASM也被本地JavaScript引擎支持,例如 Google 的 V8 引擎(基于Node.js 和 Chromium 的瀏覽器)、微軟的Chakra 引擎(Microsoft Edge)和Mozilla 的 Spidermonkey 引擎(Thunderbird和 Firefox)。

MOVE

概述

MoveVM是具有靜態(tài)類型系統(tǒng)的堆棧機。MoveVM從幾個方面來約束 Move語言規(guī)范,包括混合文件格式、驗證和運行時的約束。文件格式的結構允許定義模塊,類型(資源和非限制類型)和函數(shù)。代碼通過字節(jié)碼指令表示,字節(jié)碼指令可以引用外部函數(shù)和類型。

實現(xiàn)細節(jié)

Move VM執(zhí)行以Move字節(jié)碼表示的交易。它有兩個核心包:核心VM和VM運行時。

MoveVM核心包提供文件格式的定義以及與文件格式相關的所有實用程序:

Move編程語言

Move是一種新的編程語言,旨在為Libra區(qū)塊鏈提供安全可編程的基礎。

Move與平臺無關,支持跨區(qū)塊鏈的共享庫、工具和開發(fā)人員社區(qū)。Move語言的設計強調安全性,旨在避免許多Web3.0用戶受害的情形,包括但不限于重入漏洞(re-entrancy vulnerabilities)、毒令牌(poison tokens)和欺騙性令牌批準(spoofed token approvals)等問題

Move語言目錄由五個部分組成:

版權聲明:本文為CSDN博主「鯤志說」的原創(chuàng)文章,遵循CC 4.0 BY-SA版權協(xié)議,轉載請附上原文出處鏈接及本聲明。

原文鏈接:

https://blog.csdn.net/m0_37482190/article/details/128294434

文章來源:CSDN博主「鯤志說」

文章原標題:《web3:智能合約-虛擬機(EVM、HVM、WASM、MOVE)》

如有侵權請與我們聯(lián)系刪除。

關鍵詞:虛擬

74
73
25
news

版權所有? 億企邦 1997-2025 保留一切法律許可權利。

為了最佳展示效果,本站不支持IE9及以下版本的瀏覽器,建議您使用谷歌Chrome瀏覽器。 點擊下載Chrome瀏覽器
關閉