调用wasm_为何 PlatON 引入了 WASM 虚拟机?

f6692f6b14bce135de1a5767bc02792b.gif a3827ee64e156a245134cacec7c8ee3a.png

WASM (WebAssembly) 不是一种语言,而是一种新的字节码格式,是一种全新的底层二进制语法,经编译器编译后的指令代码。其体积小、可移植、加载快并兼容WEB的全新格式,是一种以安全有效的方式运行可移植程序的新技术。

早期 WASM 主要的应用领域在 web 应用,但随着其不断地发展,越来越多的项目将其作为智能合约的最终格式,使用对应的 VM(虚拟机) 加载运行,如 wavm、wagon,字节码的具体解析与运行则在核心虚拟机模块中进行。

虚拟机 (VM, Virtual Machine)指的是通过软件模拟的、具备完整硬件系统功能并运行在隔离环境下的完整计算机系统,比如操作系统虚拟化的 Vmware 虚拟机,软件运行环境的JVM虚拟机等。而区块链中的虚拟机是建立在区块链上的代码运行环境,其主要作用是处理区块链的智能合约。

01

WASM 的引入背景

PlatON 为何要在引用 EVM (以太坊虚拟机) 虚拟机的同时引入 WASM 虚拟机?

随着区块链应用对虚拟机和智能合约的需求增多,区块链虚拟机技术也在逐渐完善。目前,基于 WASM 的虚拟机在速度和性能方面都有了显著提升,支持C、C++ 等多种编程语言,开发门槛更低。

为了让区块链应用开发更便捷,PlatON 推出了双虚拟机引擎,同时支持 WASM 虚拟机和 EVM 虚拟机。原本在 Ethereum 等支持 EVM (以太坊虚拟机) 的主链上运行的区块链应用,如果由于性能等原因需要使用 PlatON,可以轻松实现无缝迁移

EVM 在本质上是脚本程序,需要由编译程序翻译成指令后执行,而不是由本地机器的 CPU 读取指令执行,这样的执行方式在效率上是非常低的。同时 EVM 在架构和使用上也存在一些问题,例如

  • 强耦合,难扩展:链本身与EVM内部之间存在相互依赖的关系;

  • 缺少标准库:solidity中基本没有标准的库,必须通过自己编码才能实现相应功能,如:字符串比较;

与 EVM 相比,WASM 作为一种中间代码,拥有更高更快的智能合约运行速度,可以使用任何熟悉的编程语言进行开发(C/C++/JAVA),同时存在诸多特点

  • 性能高效:采用二进制编码,在程序执行过程中性能优越;

  • 多语言支持:可使用C/C++/RUST/Go等多种语言编写合约后编译出字节码;

  • 丰富的标准库:不同语言有附带丰富的标准库可供使用;

同时,考虑到越来越多的项目使用 WASM,包括引入 EVM 虚拟机的 Ethereum 也在开始转向 WASM。WASM 越发流行,其社区生态体系也越来越完善。

为让已经存在的一些WASM应用或者一些熟悉 WASM 的开发者更好地切换到 PlatON 生态中来,PlatON 经综合考虑后决定,在已存在 EVM 虚拟机的同时引入 WASM 虚拟机,实现双虚拟机支持

02

PlatON引入WASM的优势

PlatON 在决定引入虚拟机之初就考虑到了 EVM 的一些弊端,在初步引入 EVM 虚拟机之后马上就开始了对于 WASM 虚拟机的相关方案设计及开发,在拓展性、稳定性、运行效率等方面不断地创新和改进。主要功能点包含:

  • 提供一整套完备的合约开发套件 PlatON-CDT [1];

  • 更小的合约字节码,使用 CDT 套件编译出来的 WASM 二进制码,大小相比其他项目减少 1/2;

  • 提供可用于进行快速开发的智能合约框架 PlatON-Truffle [2];

  • 扩展对 string, address, hash, u128 等数据类型的支持;

  • 增加了 Gas 机制。每执行一条合约指令,都会扣除相应的 Gas,确保合约指令在执行有限次运算后,一定可以终止执行,有效防止代码无限循环攻击;

  • 增加了合约嵌套调用功能,可以立即获取到调用另外一个合约方法的结果,使得合约之间的调用像函数调用一样方便;

  • 支持自动扩展线性内存,缓存 wasm module,优化合约的加载性能,从而极大提升了虚拟机运行性能;

基于对WASM语言的应用及优化改造,PlatON的智能合约模块具备更高的兼容性与性能,同时拥有更强的安全性与灵活性。在成功集成 WASM,成功实现双虚拟机支持之后,PlatON 在同等环境下进行了EVM和WASM性能对比测试。

测试结果表明,基于 WASM 虚拟机的执行效率远远高于 EVM 虚拟机。EVM 使用了 256 位的机器码在很大程度上影响了执行的性能,同时增大了内存的占用率。

PlatON 在引用 WASM 虚拟机实现双虚机支持后,主要具备如下优势

  • 主流的 WASM 智能合约可以方便快捷地切入到 PlatON 网络;

  • 降低合约开发者的门槛,学习成本低;

  • 使用其他基于 WASM 的网络的开发者可以无缝切换,上手快;

  • 智能合约的执行效率更高效;

  • 丰富的开发库,提升智能合约开发效率;

03

WASM 的运行机理

WASM 虚拟机是一个完全独立的沙盒,合约代码对外完全隔离并在虚拟机内部运行,运行在虚拟机内部的代码不能接触到网络、文件系统或其它进程。同时,为了防止虚拟机执行过多的计算指令,陷入死循环等情况,引入了燃料 (Gas) 机制 + 超时机制双重控制。

双虚拟机工作原理:

4390bd5c50fe575f62b0a66470e2ab47.png

如图所示:使用 Solidity/C/C++ 等语言编写的智能合约,经过编译器编译成为字节码,同时不同类型的合约包含了不同的字节码特征,PlatON 双虚拟机引擎通过对特征的识别,可以判断该段字节码需要使用哪种虚拟机进行执行,选择对应虚拟机后加载字节码,解析字节码,然后根据指令去执行对应的函数功能。

智能合约使用流程:

1c54502cc3df473f69963784c60775d1.png

如图所示,可以使用 C++ 编写基于 WASM 的智能合约,也可以使用 Solidity 编写属于 EVM 的智能合约,然后通过工具套件编译生成字节码等信息,再通过 SDK 开发工具集通过交易的方式发送到 PlatON 网络节点中。这样一个与合约相关的交易流程就完成了。

PlatON 提供了完备的 WASM 合约开发套件 PlatON-CDT,使用该套件,可以快速地编写出 WASM 虚拟机的智能合约,该套件提供了多种数据类型的封装,简洁的 API 接口,同时配套详细的接口文档。同时,还可以使用智能合约测试框架 PlatON-Truffle 进行开发、编译、部署、合约接口测试等功能,方便开发者开发与测试合约。

PlatON 提供了合约 SDK [3] 自动生成工具,能自动生成后端系统调用合约接口的代码,可以屏蔽调用合约时的参数编解码细节等,帮助开发者快速集成合约业务到系统中,从而可以投入更多的精力到智能合约业务逻辑的开发中。

04

总结

本文主要探讨了 PlatON 支持 WASM 虚拟机的背景及初衷,同时介绍了关于引入 WASM 后 PlatON 的独有优势,还对 WASM 虚拟机的基本原理及运行机制做了简单说明。希望能对参与 PlatON 的社区人员、相关的区块链从业者提供一些可借鉴的经验。WASM 从最初的不被看好到现在被广泛使用,我们可以肯定未来它将作为分布式应用开发的基础层被运用到越来越多的项目之中。

文中涉及的链接:

[1]https://github.com/PlatONnetwork/PlatON-CDT

[2]https://github.com/PlatONnetwork/platon-truffle

[3]https://github.com/PlatONnetwork/client-sdk-java

加入PlatON云图爱好者社区,了解更多PlatON信息哦~??

096b4000478df3dc5f71920106513187.png

关注公众号,获取更多信息~

公众号 : PlatON云图立方

公众号ID:PlatON_Cube

b60d059d65d970fc59efaccb96bf6c3d.png

添加小姐姐微信加入社群哦~

昵称: PlatON爱好者 小白

微信号:platonfans

喜欢就点个“在看”哦

68d4eade7648a2258802df2b59ad5d32.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值