EOS系列 - EVM和WASM的基本原理
了解EVM和EOS虚拟机基本原理EVM是以太坊图灵完备的虚拟机(Ethereum Virtual Machine), 简称EVM由程序翻译指令并执行EVM出于所谓运算速度和效率方面考虑,采用了非主流的256bit整数不支持浮点数缺乏标准库支持,例如字符串拼接、切割、查找等等都需要开发者自己实现给合约打补丁或是部分升级合约代码在EVM中是完全不可能的比特币的程序非常简单,由解锁脚...
了解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
基于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
更多推荐
所有评论(0)