了解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 的任何语言进行开发。
  • 智能合约可升级
    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系列
Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐