前言
BVM 是构建在Bottos区块链上的一个通用型虚拟机,用于处理和执行Bottos系统内的智能合约。作为 Bottos的核心组件,BVM 具备高确定性、高并发性、高扩展性等优点,可以实现任意执行 逻辑和保证在分布式网络中任意节点执行结果一致,为去中心化应用提供有力支撑。
同时结合Bottos 研究院独立开发的BotCompiler编译器技术,可将Java、C#等计算机语言编译为统一的 BVM 指令集,从而实现跨平台,并使得智能合约的开发者无需学习新的开发语言, 就可参与开发 Bottos生态应用,降低了区块链学习成本和开发门槛。
此外,BVM 使用互操作等技术,与上层代码高度解耦和可定制化。使用简便, 仅需创建一个对象,可用于多种不同区块链和非区块链场景。
Bottos研究院在BVM研究中投入了很多精力和成本,接下来研究院这边会出针对BVM 出一系列的文章,目的也是将研究院最新的进展和心得与开发者社区的朋友们交流互动。
BVM是什么?
VM 全称为 Virtual Machine,在区块链语境下更可以理解为是智能合约的运行环境。在区块链系统中,合约代码会被编译成字节码的形式,这些字节码不能直接在操作系统上运行,需要一个执行器来执行这些合约,在软件体系中,可以把这些执行器视为一个抽象的「机器」,BVM 就是这样一个执行器。
以太坊完成了区块链系统中首个系统的智能合约支持,也成为了早期智能合约开发者或是开发公司的主流开发环境,但是 EVM 有其局限性,虚拟机效率相对成熟的虚拟机系统来说极其低下,难以支持更加复杂的应用和环境。
而成熟的虚拟机系统需要一系列庞大的项目构成作为支撑,在目前的环境下,使用一个全新的编程语言(Solidity)并不是一个明智的做法,过高的学习门槛使得社区承受了大量的兼容和学习成本,而Bottos则基于现有成熟的虚拟机标准来开发区块虚拟机,从而降低开发者门槛,扩大共赢生态圈,提高安全性。
Bot-coding架构:
Bot-coding是Bottos独立编写的编译器,它提供了介于高级编程语言和机器语言之间的IR中间语言。Bcode本身也可以作为多种语言的后端,提供与语言本身无关的优化和对多种CPU的代码生成功能。比较一下传统的编译器和Bot-coding,传统的静态编译器,如gcc, 一般是由三个组件完成,分别为前端、优化器和后端:
而Bot-coding虽然也分为三部分,但针对不同语言的前端,对应生成不同平台的机器码。
源码被编译成Bcode格式的文件,然后使用Bot-coding Linker 链接,并进行优化,得到的Bcoding 最终被翻译成特定平台的机器码,另外Bot-coding支持JIT,会在代码生成过程中插入一些轻量级的操作指令来运行的信息,调整native code 以适应特定的架构。
Bot-coding JIT(just-in-time) :JIT是将原本编译器要生成机器码的部分直接写入当前内存,通过函数指针的转换,找到相应机器码并执行,常用于处理内存管理,符号重定向,处理外部符号等问题上。
WebAssembly:BVM选用wasm作为智能合约的实现格式。
对于BVM,一直打算做一个轻量化的虚拟机,以满足我们未来可移动,可物联的愿景。最初选用的是Wren, 后来在测试阶段,用空合约跑转账的时候,发现转账次数很慢,完全达不到要求,于是替换了wasm, 转账次数是使用wren的数倍之多。
WebAssembly是一种新的字节码格式。它的缩写就是”.wasm”, .wasm 为文件名后缀,是一种新的底层安全的二进制语法。WebAssembly 到机器语言虽说也需要一个”翻译”过程,但是属于机器语言到机器语言的翻译,所以速度非常接近机器语言,所以速度很快。
WASM允许C/C++等语言编写运行在WEB中的程序,WASM其实是一种字节码格式,是底层二进制语法,加载时间段以及高速执行,是为WEB多语言编程设计的目标文件格式。
所以BVM选用wasm作为技术解决方案,有以下几个优势:
增加目前BVM生态军的力量,由于支持多种语言,很容易从传统语言迁移过来,传统Web领域的基础支持也可以嫁接。
网页应用向区块链Dapp应用的移植成为可能
WebAssembly 可以允许任何语言编译到它制定的AST tree, 相当于使用其他高级语言写的代码可以直接在区块链智能合约上运行。
如果说 EVM 是一个区块链虚拟机的话,那么BVM 则会是一个可以专业服务于区块链商业体系的虚拟机。
参考文献:
https://medium.com/coinmonks/eos-development-learn…
EOS Development For Beginners: WebAssembly
WebAssembly – Wikipedia
Google, Microsoft, Mozilla And Others Team Up To Launch WebAssembly, A New Binary Format For The Web
Introduction · C/C++面向WebAssembly编程
A cartoon intro to WebAssembly – Mozilla Hacks – the Web developer blog
Javascript诞生记 – 阮一峰的网络日志
Popularity – Brendan Eich
Web Assembly on EOS – 50,000 Transfers Per Second
js(=>) 箭头函数 详细解说 案例大全
EOS Development For Beginners: WebAssembly
Javascript的10个设计缺陷 – 阮一峰的网络日志
罗志宇:如何评论浏览器最新的 WebAssembly 字节码技术?
悄悄掀起 WebAssembly 的神秘面纱
asm.js 和 Emscripten 入门教程
Javascript – How Prototypal Inheritance really works
来源:铂链