天天看點

EOS系列 - EVM和WASM的基本原理

了解EVM和WASM(EOS虛拟機)基本原理

EVM是以太坊圖靈完備的虛拟機(Ethereum Virtual Machine), 簡稱EVM

  • 由程式翻譯指令并執行
  • EVM出于所謂運算速度和效率方面考慮,采用了非主流的256bit整數
  • 不支援浮點數
  • 缺乏标準庫支援,例如字元串拼接、切割、查找等等都需要開發者自己實作
  • 給合約打更新檔或是部分更新合約代碼在EVM中是完全不可能的
比特币的程式非常簡單,由解鎖腳本和鎖定腳本構成。以太坊有智能合約,有圖靈完備的虛拟機EVM,但是指令也相對簡單,且自成一套。這兩種程式本質上都是腳本程式,即由程式翻譯指令并執行,而不是由本地機器CPU讀取指令并執行,效率不高。但選擇解釋性語言有它的合理性,就是他的高度相容性,它對智能合約的執行裝置(礦機)沒有限制。

WASM是EOS的智能合約标準Web Assembly,簡稱WASM

  • 可以由解釋器執行,也可以編譯成機器碼後執行
  • 一種中間代碼(位元組碼),所有其他語言編寫的程式(C \ C++ \ Rust \ Golang \ java 等)都可以程式設計成wasm位元組碼的程式
  • Wasm 是分布式系統開發的基礎,智能合約将能夠用可以被編譯成 wasm 的任何語言進行開發。
  • 智能合約可更新
    EOS系列 - EVM和WASM的基本原理
它是谷歌、蘋果、微軟三大競争公司同時支援的一種中間代碼(位元組碼), 是浏覽器都支援的一種代碼。

WASM

基于EOS.IO的區塊鍊使用Web Assembly(WASM)執行開發者提供的應用代碼。WASM是一個已嶄露頭角的web标準,受到Google, Microsoft, Apple及其他大公司的廣泛支援。目前為止,最成熟的用于建構應用及WASM代碼編譯的工具鍊是clang/LLVM及其C/C++編譯器。希望C++ 将成為開發高性能及安全智能合約的最佳語言

LLVM的命名最早來源于底層語言虛拟機(Low Level Virtual Machine)的縮寫。它是一個用于建立編譯器的基礎架構,以C++編寫。建立此工程的目的是對于任意的程式設計語言,利用該基礎架構,建構一個包括編譯時、連結時、執行時等的語言執行器。目前官方的LLVM隻支援處理C/C++,Objective-C三種語言,當然也有一些非官方的擴充,使其支援ActionScript、Ada、D語言、Fortran、GLSL、Haskell、Java bytecode、Objective-C、Python、Ruby、Rust、Scala以及C#。

以太坊支援WASM嗎?

  • Parity 以太坊用戶端在 Wasmi 解釋器中運作 Wasm 位元組碼,以保證 Wasm 代碼能夠通路區塊鍊并與區塊鍊進行互動
  • 可以在 Kovan 測試網(PoA算法,Parity專用,Rust 語言)上測試 Wasm;在該測試網上,EVM 智能合約以及 Wasm 智能合約可以共存甚至互動

EWASM

eWASM将允許以太坊開發人員能夠使用多種程式設計語言來編寫代碼——而不僅僅目前所使用的以太坊專用的語言Solidity——據說eWASM還會帶來大量的性能增強。

Ewasm (Web Assembly for Ethereum) 并不是一個智能合約語言,而是一個編譯器目标,它将允許以太坊程式員用其他語言程式設計(如Rust,C ++,也許某一天是智能合約特定語言,如 Simplicity),并編譯成以太坊風格的 WebAssembly。Ewasm 是 WebAssembly 的一個更安全的子集,它是 Web 平台相對較新的低級編譯目标。友善的是,wasm(以及 ewasm)子產品可以在任何 JavaScript 項目中使用。對于大多數區塊鍊代碼,通常超過 75% 的代碼根本不在智能合約中 — 它在 JavaScript 中必須與智能合約進行通信。Ewasm 和 JavaScript 共享綁定和子產品支援的共同基礎。

附錄: 虛拟機 benchmark 程式

  • EVM Code
  • Lua Code
  • EOS Code
  • V8 Code
往期精彩回顧:
區塊鍊知識系列
密碼學系列
共識系列
公鍊調研系列
以太坊系列
EOS系列
智能合約系列
Token系列

繼續閱讀