这篇文章是 Crosslink 2019 Taiwan 的一个议程纪录:The next generation Ethereum Virtual Machine,由来自Second State 的工程VP Hung-Ying Tai(hydai) 分享 Ewasm VM 目前研究内容及将来的方向,内容很是精彩,包含了 EVM bytecode 、Webassembly、Ewasm1.0 以及 Ewasm2.0 。git
以太坊的智能合约交易在执行时,例如:把Token 转到别的地址,是将EVM bytecode 读进以太坊的虚拟机执行,而 EVM bytecode 有如下几点特点:github
Webassembly(WASM)是为了让不一样程序语言开发的套件都能在浏览器使用的一种二进制程序语言,WASM 有如下几点特点:web
接下来看看以太坊Ewasm 的特性:浏览器
EVM 里有不少像是SSLOAD, SHA3 的高阶指令,这些指令在Ewasm 1.0 里,由于 WASM 能够动态读取函式库(模组),以太坊定义了以太坊环境接口(EEI),让客户端能够用不一样的语言实现相对应的函式库,并且也更容易完成 prototype 跟升级。网络
下图是 Ethereum Environment Interface 定义的函数列表。架构
Ewasm 使用 system contract 移除非法指令以及加入 useGas 的 bytecode,像是浮点数或是非法的 import,有如下两种作法:less
下图是 Ewasm 1.0 的 stack,在部署合约前 Ewasm bytecode 会先通过 Sentinal 的检查,成功部署后客户端若是要执行合约会经过 EVM-C 与 Heru(Wasm Engine)沟通。函数
使用Ewasm 效能真的会比较快吗?Second State 的Hydai 分享了各个EVM 执行 Sha1 以及 BN128mul 的结果,发现EVM 在运行 BN128mul 时会是最快,主要是由于WASM 支持 32 / 64 位的操做,256 位则须要另外模拟(1 个 256 位元的运算能够换成 25 个 64 位元的运算),因此WASM 在跑 BN128mul 时会比较慢。工具
Ewasm 2.0 的智能合约改叫 Execution Environments(EE),与 Ewasm 1.0 不同的有下列几点post
下图能够看到ERC20 Token 在Ewasm 2.0 跟Ewasm 1.0 storage 的比较,Ewasm 1.0 每一个数据都会有相对应的 key,而Ewasm 2.0 只有存 state root,因此只能跟 state root 互动。
目前 Ewasm 2.0 到 phase one and done 的阶段,也有测试的网络能够在 shard block 执行 EE,以太坊也有开源 Ewasm 2.0 的测试工具 Scout。
上图是Eth 2 的 Hello World EE,能够看到main 函数里第一行读取pre state root,接下来验证block data size 是否是为 0,最后再将state root 存回去,Eth 2 的智能合约写起来都会像这样。
Ewasm 1.0 目前已经支持 EVM 1 大部分的功能,Ewasm 也有测试链了,Second State 开发了一个编译器SOLL,能将 Solidity 编译成 Ewasm,对Ewasm 感兴趣的人能够参考一下。
Ewasm 2.0 目前还在研究中,下图是Hydai给你们分享的研究及贡献的方向。
webassembly.org (http://webassembly.org/)
Compiling and deploying an ERC20 contract onto the eWASM testnet— YouTube