时间:2023-06-17|浏览:177
BVM是什么? VM全称为VirtualMachine,在区块链语境下更可以理解为是智能合约的运行环境。在区块链系统中,合约代码会被编译成字节码的形式,这些字节码不能直接在操作系统上运行,需要一个执行器来执行这些合约,在软件体系中,可以把这些执行器视为一个抽象的「机器」,BVM就是这样一个执行器。
以太坊完成了区块链系统中首个系统的智能合约支持,也成为了早期智能合约开发者或是开发公司的主流开发环境,但是EVM有其局限性,虚拟机效率相对成熟的虚拟机系统来说极其低下,难以支持更加复杂的应用和环境。而成熟的虚拟机系统需要一系列庞大的项目构成作为支撑,在目前的环境下,使用一个全新的编程语言(Solidity)并不是一个明智的做法,过高的学习门槛使得社区承受了大量的兼容和学习成本,而Bottos则基于现有成熟的虚拟机标准来开发区块虚拟机,从而降低开发者门槛,扩大共赢生态圈,提高安全性。
Bot-coding架构: Bot-coding是Bottos独立编写的编译器,它提供了介于高级编程语言和机器语言之间的IR中间语言。Bcode本身也可以作为多种语言的后端,提供与语言本身无关的优化和对多种CPU的代码生成功能。比较一下传统的编译器和Bot-coding,传统的静态编译器,如gcc,一般是由三个组件完成,分别为前端、优化器和后端。而Bot-coding虽然也分为三部分,但针对不同语言的前端,对应生成不同平台的机器码。源码被编译成Bcode格式的文件,然后使用Bot-codingLinker链接,并进行优化,得到的Bcoding最终被翻译成特定平台的机器码,另外Bot-coding支持JIT,会在代码生成过程中插入一些轻量级的操作指令来运行的信息,调整nativecode以适应特定的架构。
Bot-codingJIT: JIT是将原本编译器要生成机器码的部分直接写入当前内存,通过函数指针的转换,找到相应机器码并执行,常用于处理内存管理,符号重定向,处理外部符号等问题上。
WebAssembly: BVM选用wasm作为智能合约的实现格式。对于BVM,一直打算做一个轻量化的虚拟机,以满足我们未来可移动,可物联的愿景。最初选用的是Wren,后来在测试阶段,用空合约跑转账的时候,发现转账次数很慢,完全达不到要求,于是替换了wasm,转账次数是使用wren的数倍之多。
WebAssembly是一种新的字节码格式。它的缩写就是".wasm",.wasm为文件名后缀,是一种新的底层安全的二进制语法。WebAssembly到机器语言虽说也需要一个“翻译”过程,但是属于机器语言到机器语言的翻译,所以速度非常接近机器语言,所以速度很快。
WASM允许C/C++等语言编写运行在WEB中的程序,WASM其实是一种字节码格式,是底层二进制语法,加载时间段以及高速执行,是为WEB多语言编程设计的目标文件格式。所以BVM选用wasm作为技术解决方案,有以下几个优势:
- 增加目前BVM生态军的力量,由于支持多种语言,很容易从传统语言迁移过来,传统Web领域的基础支持也可以嫁接。 - 网页应用向区块链Dapp应用的移植成为可能。 - WebAssembly可以允许任何语言编译到它制定的ASTtree,相当于使用其他高级语言写的代码可以直接在区块链智能合约上运行。
如果说EVM是一个区块链虚拟机的话,那么BVM则会是一个可以专业服务于区块链商业体系的虚拟机。
参考文献: - EOSDevelopmentForBeginners:WebAssembly - WebAssembly-Wikipedia - Google,Microsoft,MozillaAndOthersTeamUpToLaunchWebAssembly,ANewBinaryFormatForTheWeb - Introduction·C/C++面向WebAssembly编程 - AcartoonintrotoWebAssembly–MozillaHacks-theWebdeveloperblog - Javascript诞生记-阮一峰的网络日志 - Popularity-BrendanEich - WebAssemblyonEOS-50,000TransfersPerSecond - js(=>)箭头函数详细解说案例大全 - EOSDevelopmentForBeginners:WebAssembly - Javascript的10个设计缺陷-阮一峰的网络日志 - 罗志宇:如何评论浏览器最新的WebAssembly字节码技术? - 悄悄掀起WebAssembly的神秘面纱 - asm.js和Emscripten入门教程 - Javascript-HowPrototypalInheritancereallyworks - (
热点:区块链