3. BVM在区块链应用层面都做了什么?
在过去的几年里,那个著名的不可能三角——去中心化 vs 可扩展性 vs 安全性——已经在区块链协议中促成了许多进步。
在我们开发BVM的时候,我们就明确了自己的目标:为打造一款区块链“开发者友好型”虚拟机做不断的努力。
所以对于BVM来讲,不但要实现 安全,稳定,可拓展的虚拟机,还要实现高效能,于是研究员把BVM的四个维度:安全,稳定,可拓展,高效能作为BVM进化的标尺不断在完善自己,目前也取得了不小的进展,接下就这四个维一一进行论述。
BVM针对安全性做的设计
智能合约的虚拟机可以看做一台公用的计算机,而所有的开发者都在这台公用机计算机上进行智能合约的执行,所以必须对使用者进行限制。
如果虚拟机的使用者可以毫无限制的运行自己的代码,那会给公链带来很大的安全性问题。例如:EOS 之前就出现过基于延迟交易引发的阻塞攻击问题,这个问题本质上就是没有有效细致的界定资源使用的问题。相应的以太坊也多次出现类似的问题,以太坊早期的数次硬分叉都是为了解决这类问题。
安全性问题主要包含两方面:
代码行为的安全性
代码消耗的有界性。
首先,BVM通过内置的安全机制来保证代码类型的完整性和安全性,并且通过可选择的分配器来保证虚拟机使用者的沙箱性。
除此之外,BVM中加入了BTO质押而形成的时间空间双限制的机制,以确保运行字节码不会存在“恶意行为”。
所以,BVM 在任何时候都不会触发无限制的递归或循环,严格限制某些 合约字节码有意或者无意导致的崩溃或无限挂起机器的情况。
这些内置的安全性支持将会大大提高虚拟机的安全性,同时也会为公链提供一个可控的安全性保证。
BVM针对稳定性做的设计
前面提到,在BVM中加入了一个BTO质押而形成的虚拟机时间空间双限制的机制,以确保运行字节码不会存在“恶意行为”的安全性限定。
而这个BVM双限定的机制其实是由一个我们内部叫做“B-watching”的机制实现的,这种机制类似于代码中的“watchdog”,会在指令级别的细节上对于智能合约在虚拟机资源使用上进行限制。
“B-watching”本身是一个定时器电路,内部会不断的进行计时(或计数)操作。与我们平时接触的计时器在作用上也不相同,记时超时(Timer Out)则引起一个中断,例如触发一个系统时钟中断。而不同于软件计时器或者硬件计时器(Timer),B-wathing不但拥有事件发生时“中断”的形式和事件发生时以系统消息展现的形式,还包含了当事件发生时执行一段特定动作的特性。
这使得“B-watching”在系统发生死循环或者阻塞的时候,可以及时修正虚拟机。
BVM的另一个特性是内部支持判定合约的执行时间。看现在的EVM环境,会发现有大量的合约执行超时问题,所以对于一个完备的智能合约来说,如果不执行一遍合约就不知道它在VM中执行所需要的时间,这显然是不合理的。
对于Bottos来说,BVM就是一个黑盒,在BVM以外进行合约检测会非常难以实现,所以BVM在这方面提供了内置支持,相关的需求实现会非常简单,也避免了类似的问题发生。
BVM对于执行中的边界做了诸多限制,但是在区块链的应用场景下,这些限制并不是针对功能性的限制,而是为了提高虚拟机在执行中的稳定性。
这些边界限制乍看上去是一些功能的限制,但是在区块链应用场景下,这些限制不会带来实际功能的限制,
BVM针对可拓展性做的设计
BVM采用了Go模块import的方式,这种方式意味着在BVM上可以嵌入任何一种程序语言的项目,它使程序员更具生产力。并且得益于其并发机制, 用它编写的程序能够非常有效地利用多核与联网的计算机,其新颖的类型系统则使程序结构变得灵活而模块化,还具有方便的垃圾收集机制和强大的运行时反射机制。
BVM 在设计做了特别的处理,使得 BVM 可以很好的适应多线程环境,多线程变成一度是一个令人“头大”的事情,而构建一个可以在并发环境下安全运行的库很多时候需要避免很多问题,BVM 在这个问题上做了很多准备。
Go语言还有很多优势,以轻量级的运行时著称,可以预见,未来会有更多的非 Bottos 甚至非区块链项目使用 BVM。
除此之外,BVM还拥有一套精良设计的底层构架,充分考虑到了其可拓展性,B-coding编译器可以帮助传统代码编译成机器语言,对于智能合约所需要的不同的应用场景,其字节码格式和功能必然需要拓展和修改,BVM 在响应的地方都做了设计,其中深度应用了 visitor 模式,使得在不改变类架构的前提下也可以很容易的为整个 VM 添加功能。
BVM针对高效能做的设计
在连载二中我们提到了BVM是选用了WebAssembly字节码格式作为实现语言的,但是针对区块链在AI场景的应用需求,很多WebAssembly的设计都是多余的。
所以,BVM针对区块链应用场景对WebAssembly一些区块链场景不需要的功能做了特化,同时意味着性能上,BVM做了大幅优化。BVM性能主要得益于其内置化的类型特化,BVM内置了绝大多数智能合约需要的数据类型,大大加快了编译速度,实现整合了WASM的BVM,将会满足未来复杂业务场景对接区块链应用的高性能、高吞吐量要求。
BVM不但在代码层面保证运行的高效性,在架构层面也尽量考虑到高性能、高吞吐的要求,将大量的基础库代码带入字节码层,如今BVM 在虚拟机的实现层植入这些基础类型,性能优化空间也得到了极大的提高。
编者话:下次连载,连载三我们写虚拟机(BVM)对于Bottos生态的影响。