SmartMesh Developer Community

ewasm项目初探

2018-11-09  本文已影响6人  Scott_Song

为了改进EVM1.0,以太坊的新一代虚拟机项目ewasm (github.com/ewasm)将支持WebAssembly(wasm),wasm在性能,扩展性,开发工具,社区都更有优势。除以太坊外,一些其他项目EOS,Polkadot, Cardano已经或者计划开发支持wasm的虚拟机。

WebAssembly

什么是WebAssembly

WebAssembly的优势

EVM2.0对比EVM1.0的优势

ewasm 项目目标和方案

以太坊ewasm项目目标是既要完成对wasm的支持,又要兼容EVM1.0合约。要达到这个目标,ewasm目前的设计方案如下:

VM语义设计

ewasm合约语义设计(Ewasm Contract Interface - ECI)

ECI定义了ewasm合约的结构,通过wasm的module实现,实质上是wasm,可以认为ewasm是wasm的子集 。

Ethereum Environment Interface (EEI) 定义

EEI定义了wasm程序如何与链进行交互,通过EEI将以太坊API暴露给ewasm,使ewasm可以读写链上信息,意义是wasm指令是low level的,high level功能留给客户端实现。

数据类型

API

更多API及详细信息参考https://github.com/ewasm/design/blob/master/eth_interface.md

以太坊内置合约

一些功能接口可以通过内置合约的方式来完成,每个合约都会有固定地址,可以像调用其他合约一样调用内置合约。

Sentinel合约:执行ewasm检查,看合约是否符合ECI的要求;执行 metering,将结果注入到ewasm合约中。

evm2wasm : 将EVM1.0合约翻译成wasm合约。

Metering

Metering功能是计算每个指令消耗的gas,在合约执行之前,提前知道这个合约需要多少消耗gas,也就可以预计运行时间。

提前计算gas消耗还可以避免因gas不足导致操作回滚,避免了做无用功。详细可参考 https://github.com/ewasm/design/blob/master/metering.md

ewasm****子项目

根据ewasm项目设计方案,ewasm创建了多个子项目分别实现模块功能,将这些项目组合到一起,共同实现支持wasm合约并且兼容旧合约的目标。

EVM-C

https://github.com/ethereum/evmc

EVM-C的作用是分离客户端和EVM,客户端在执行合约中只负责与链上信息的交互,把对合约的解析和执行任务交给EVM,他们之间的通信接口就是EVM-C。

客户端有多个版本的实现,Go,C++,Rust等。EVM也有多种方式去解析和执行合约,比如Interprter,JIT,AOT,现在又有了执行不同指令格式的合约的需求。所以通过接口将二者分离可以更方便的配置客户端。


image.png

EVMC由C++实现,可以直接与aleth结合。EVMC通过bind的方式支持非C++版本的客户端。目前只能支持aleth和geth。

Hera

https://github.com/ewasm/hera

Hera是由C++实现的尊从EVMC接口的ewasm虚拟机。Hera内部包含了wasm VM,目前wasm的VM有多个实现版本,Hera计划支持Bineryen,WABT,WAVM(EOS也使用WAVM),目前可以完全支持Bineryen。

不管是哪个版本的客户端,只要是使用EVMC接口就可以与Hera进行交互。总之只要执行指令过程中有与链上的信息交互就通过接口与客户端通信,其他low level 的 wasm指令由内置的VM执行。

对于EVM1.0的合约,Hera将通过另一个项目evm2wasm提供的方法将EVM1.0合约翻译成ewasm合约。


image.png

项目现状

Parity对ewasm合约的支持是最好的,但是它的实现方式是内置在客户端中,并没有使用EVMC和Hera,aleth和geth正在开发中。

目前的测试网络已经上线,但缺少工具支持,没有生成ABI文件的工具,也没有任何hello world教程或文档。

关于上线时间,根据DevCon4上的信息,以太坊会先发布Casper和Sharding,然后发布EVM2.0,至少要一年左右甚至更久。

上一篇下一篇

猜你喜欢

热点阅读