Zheng S, Wang H, Wu L, et al. VM matters: a comparison of WASM VMS and EVMS in the performance of blockchain smart contracts[J]. arXiv preprint arXiv:2012.01032, 2020.
Introduction
Wasm已经被以太坊采用,即eWASM,以期望取代EVM
以太坊的性能瓶颈
- 共识协议
- 交易签名
- 执行引擎(EVM)
然而EVM对真实世界的合约来说工具不够完善,开发者开始研究Wasm。Wasm被集成到了所有主流浏览器中。Wasm程序执行效率接近于本地执行,比浏览器Js的实现快2倍
Ethereum 2.0 roadmap中已经包含了eWASM,潜在的优势
- 交易处理更快,提升吞吐量
- 支持更多智能合约语言
- 目前Geth和Openethereum在实验支持WASM,但是社区活跃似乎在18年,从2022年起代码仓库不再更新
目前没有明确的证据表明WASM能够提高区块链执行的实际效率
主要工作
本文分析了智能合约执行引擎对区块链执行效率的影响,主要研究两类
EVM engines:Geth和Openethereum
WASM engines:11个,3个是区块链定制的(Eos Geth 和 Openethereum)
分析了字节码内引擎对比和字节码间的引擎对比,即EVM和WASM先自己和自己比,再跨平台比较
- 设计了一系列的benchmark
得出了一系列结论
- 基于EVM的链对Wasm的支持不尽人意
- Wasm的实现不稳定,客户端的编码规则不一致;支持的编程语言少
- 对EVM来说,Geth和表现比Openethereum好
- 智能合约在Wasm上运行效率差异显著,最大3个数量级
- 本地支持的数据类型对Wasm合约执行影响显著,如Wasm的数据类型为32/64bit,当执行256的EVM字节码时,带来额外开销
- 尽管Standalone WASM的效率比EVM高,但是eWASM VM比EVM慢(所有256bit数据和大多数64bit数据),可能是gas测量和EEI上下文切换带来的开销
为了研究,会开源benchmark和所有实验结果(因为匿名提交删掉了,github没搜到,但是有很多其他的开源的benchmark)
Background
Smart Contract
EVM合约字节码的执行是自循环,当程序结束或者出现error或者遇到STOP RETURN语句时终止
gas用于支付 计算 存储 带宽 的成本
EVM/WASM/eWASM 字节码
- EVM
- EVM仅支持256比特的数据,小于该长度的计算都必须转换成256比特的形式EVM才能处理
- EVM不支持浮点数
- Wasm:2017年由浏览器厂商提出,在隔离的沙箱中运行
- 可分为解码、验证和执行三个阶段
- 数据类型:32bit和64bit的浮点数、整数
- eWasm:Wasm的子集
- 通过Wasm执行引擎定义的Ethereum Environment Interface (EEI)和以太坊交互
- 限制了浮点数(为了保证和以太坊的一致性)
- 定义了 EVM 交叉编译器,实现对EVM字节码的后向兼容性
Study Design
研究四个问题
- 目前区块链客户端对Wasm的支持情况
- EVM比较
- Wasm比较
- EVM和Wasm比较
实验方法
采用0.5.4的solc编译solidity生成EVM字节码
利用 SOLL(最新的release是2年前的)编译soldity生成eWasm的字节码
然而eWasm的字节码不能在一般的Wasm上面运行,利用其他引擎支持的语言 Rust 编写等价合约来编译成Wasm字节码
对选择的Wasm的介绍
- Geth WASM - Hera:C++实现,需要EVMC的支持,EVMC是EVM和客户端交互的接口,支持对应的Wasm后端包括wabt Binaryen 和 WAVM
- Openethereum WASM - wasmi:Rust实现,虽然项目凉了,但是Wasm现在依然非常活跃
- EOS VM:虚拟机运行是确定性的,采用软件实现浮点数。采用看门狗 timer来限制执行时间
- 其余还有Life SSVM wagon wbt wasm3 WAMR wasmtime
benchmark
13个不同种类的测试标准
操作码层面的测试:Simple Operation测试了单一运算的效率
以太坊层面的测试:Arithmetic Block Status和Hashing测试
实验结果
- EVM对比:Openethereum和geth对比
- WASM对比
- eWasm和EVM字节码对比
- Wasm带来的额外开销占比
Limitation
benchmark的局限性
- 目前只支持单一的操作、算术运算和哈希,不支持对KV存储的操作,因为Wasm目前不支持长期存储。
- 没有交易 和其他合约交互的测试
目前的思路是设计benchmark来近似测量操作码执行的效率,更精确的方法应该是直接测量记录操作码的运行时间
- Wasm VM仍然在频繁更新,本论文的结果可能不能反映目前的VM的实际性能
Related Work
第一篇对Wasm和EVM执行效率进行对比的论文,目前有一些对Wasm的研究和区块链系统性能测量的研究
- Wasm字节码分析
- 区块链性能测量
参考文献
- 1.Marius Musch, Christian Wressnegger, Martin Johns, and Konrad Rieck. 2019.New Kid on the Web: A Study on the Prevalence of WebAssembly in the Wild. In International Conference on Detection of Intrusions and Malware, and VulnerabilityAssessment. Springer, 23–42. ↩
- 2.Jan Rüth, Torsten Zimmermann, KonradWolsing, and Oliver Hohlfeld. 2018. Digginginto browser-based crypto mining. In Proceedings of the Internet MeasurementConference 2018. 70–76. ↩
- 3.Weikang Bian, Wei Meng, and Mingxue Zhang. 2020. MineThrottle: Defendinga gainst WASM In-Browser Cryptojacking. In Proceedings of The Web Conference3 112–3118. ↩
- 4.Tien Tuan Anh Dinh, Ji Wang, Gang Chen, Rui Liu, Beng Chin Ooi, and Kian-Lee Tan. 2017. Blockbench: A framework for analyzing private blockchains. InProceedings of the 2017 ACM International Conference on Management of Data.1085–1100. ↩
- 5.Sara Rouhani and Ralph Deters. 2017. Performance analysis of ethereum transactionsin private blockchain. In 2017 8th IEEE International Conference on Software Engineering and Service Science (ICSESS). IEEE, 70–74. ↩