区块链技术领域基础设施——虚拟机,是实现智能合约系统最为关键和核心的技术。智能合约不仅是业务逻辑的载体,同时又扎扎实实地落在了技术实现的层面。由此可见,虚拟机是区块链技术落地的基石,在如今技术快速发展乃至未来,区块链技术都将离不开虚拟机的重要支撑。那么到底什么是虚拟机?普通的虚拟机和区块链虚拟机的差别是什么?以及为什么智能合约需要区块链虚拟机?
什么是虚拟机?
想彻底理解虚拟机,首先应该理解“虚拟化”这个抽象化的词,也就进一步会理解普通虚拟机和区块链虚拟机之间的区别。维基百科对其定义:“在计算领域,虚拟化是一个宽泛的术语,指的是对计算机资源的抽象。虚拟化对其用户,不管是应用程序还是终端用户,隐去了计算资源的物理特性。这包括使一个单一的物理资源(比如一个服务器,一个操作系统,一个应用,或是一个存储设备)表现为多个虚拟资源运行;也包括多个物理资源(比如存储设备或多台服务器)表现为一个单一的虚拟资源...”
再精炼一些来说就是:
由一个物理资源创建多个虚拟化资源。
由一个或多个物理资源创建一个虚拟化资源。
日常中网络、存储、硬件都会频繁用于表达某些特定概念。在这一领域的早期成果有 Christopher Strachey 的论文“大型高速计算机的时分系统”。IBM 对虚拟化的探索始于其 CP-40 and M44/44X 研究系统。作为回报,这又促成了其商业产品 CP-67/CMS 。虚拟机的概念使用户隔离开,并为每个用户单独模拟出一套的完整的系统。IBM 模型的一个主要特征就是通过分割计算机资源和完全隔离程序来使程序共享同样的硬件。 大型计算机在当时的资源非常稀缺因此多为共用,因此把虚拟机计算时间切割成许多共享用户的私人计算时间。
服务端虚拟化
服务端虚拟化顾名思义为服务器“虚拟化”,以 VMware,Microsoft,以及 Citrix 等公司为代表。运用服务器虚拟技术,一个物理的机器可以被分成多个虚拟的机器。在这种虚拟化技术的背后,其核心是 hypervisor(虚拟机监视器)的概念。Hypervisor 虽是很小的一层,它可以拦截操作系统对硬件的调用。
并且凭借着这一层的 hypervisor 可以做到:
提升硬件利用率:节省硬件,节约成本.
安全:干净的镜像可用来重建受损的系统,可以提供沙盒和隔离来限制可能的攻击。
开发:调试和性能监控的用例能够以可重复的方式方便的搭建起来.
统一:实现各环境与操作数据的统一性.
为什么区块链需要虚拟机?
理解了“虚拟化”的不同场景的含义后,那区块链为什么还需要虚拟机,它需要哪些虚拟化特性的部分?
这与区块链的独特性相关,区块链系统需要共识机制,保证每一个人输出的计算结果是一致的。以比特币举例A将BTC发送至B,为了实现智能合约,将自动交易转化成代码。区块链虚拟机所承担的主要任务是运行智能合约。本质上,区块链虚拟机就是一个代码的运行环境。从而保证区块链网络中分布式节点的一致性。
从安全性考虑,越是功能强大的智能合约,就越是逻辑复杂,也越容易出现逻辑上的漏洞。在区块链中,虚拟机如果是从安全性方面考虑的话一方面是为了防止因为不法分子或者程序员的编写代码错误而影响到了整个主链,更重要的是防止运行智能合约的设备遭受攻击,如果直接运行在设备系统上,可能会有安全隐患。因为每个节点都要运行智能合约进行验证,但如果不用虚拟机,而是在机器上直接运行,当智能合约开发者疏忽或测试不充分,而造成智能合约的代码有漏洞的话,就非常容易被黑客利用并攻击,这与上文中服务器虚拟机安全性有着共通性。
2018年4月, BEC 因整数溢出编写漏洞,被黑客批量转走了近50% token,然而这个错误本应是语言层面的基本常识。以太坊的智能合约多次出现漏洞,业界普遍认为与底层系统有关,在此 Qtum量子链出的虚拟机技术连载(一)中分析过由于它的设计比较非主流,很难有主流的编程语言能够移植到 EVM 上。这种设计可以说对于近50年来的大多数编程范例来说都不易兼容,因此不够友好。
为了将区块链的开发推向更加主流的阶段,Qtum 量子链选用x86指令集。x86指令集发展已超过40年,时至今日,x86 架构的兼容性也越发强大,生态体系越发完善,成就占有率超过90%的市场。今天的 x86 CPU 中已融入了解码的功能,其将长度不定的 x86 指令转换为长度固定的类似于 RISC 指令,然后将其交给 RISC 内核进行处理。解码包括了硬件解码和微解码两种,简单的 x86 指令采用硬件解码速度较快,而复杂的指令则需要微解码,将其分成若干条简单指令后才进行执行。目前,x86 架构的优势在于单条指令功能强大,指令数少速度较快;而由于指令数少,高频率运行时也不需要很大的宽带占用往 CPU 传输指令。
比特币:比特币的区块链技术主要是为数字货币交易提供简单的技术支持。
以太坊:以太坊开发智能合约以及图灵完备的EVM为标志。
Qtum量子链:以 Qtum-x86 为代表的区块链基础设施建设逐步落地,推动区块链商业经济快速发展。
在 QTUM 技术实验室发布的 为何 Qtum 量子链要设计X86虚拟机?Qtum-x86 设计时计划实现多种语言编写智能合约。因为EVM 开发需要学习solidity,增加学习成本的同时稳定性不强,如果区块链虚拟机支持多种编程语言可以变得更加安全。以 Rust 为例,Rust 相对于其他新型编写语言中非常高效、轻量级的编程语言,最重要的是,它的安全性较高,能够降低因程序员在编程中出现的错误而导致被攻击的风险。
目前以太坊的开发费用还是非常高昂,并由于没有标准库,也使得占用了大量的内存Qtum-x86 为这些标准程序库函数提供特殊的内部代码,类似于以太坊的预编译合约。这种功能可以不需要为新的预编译合约添加特殊支持,即可使用,使得在不影响其他共识等变量之下,更加的高效、便捷和节省内存。
Qtum 量子链开发团队设计的初衷是能够支持多种虚拟机,以太坊虚拟机作为第一个支持的虚拟机,但目前AAL的功能受到EVM的极大限制,而 Qtum-x86 虚拟机就将不再受到这些限制。
Qtum-x86 虚拟机的大内存空间,以及它高效的操作代码集,可以实现完整的区块链数据进行智能合约分析,这在以太坊虚拟机上是无法实现的。在未来有可能支持基于ai的智能合约自动监控区块链,成为潜在的 oracle,允许智能合约对自身进行动态调整,以便在当前的网络条件下尽可能高效地运行。这些区块链数据可以包括完整交易数据以及节点的统计数据(共识相关)。由于这些数据都是常量,且只需要占用极少的内存空间,所以公开这些数据没有什么弊端。
目前,以太坊虚拟机强制每个用户都使用指向32-bytekey指向32-byte数据。开发人员管理起来可能会相当复杂,尤其是考虑到存储空间碎片化和维护的问题。因此,在Qtum-x86虚拟机上,会给智能合约添加一个通用的key-value存储。这样以来,用户就可以使用任何从1字节到更长字节的key,并将其指向相同长度的变量值。目前,Qtum 开发团队提出的gas模型首先对读/写该数据库的操作收取固定费用,之后再根据实际操作的字节数进行按字计价收费。当然,这个功能也会被计入stateRootHash中,这样SPV钱包就可以使用这个数据库与智能合约进行交互。
Qtum 开发团队另一个设计目标是使智能合约的依赖关系变得明确且不可变。这仅仅是一种opt-in功能,所以仍然可以允许调用未知合约。对于那些确切知道它们依赖关系的智能合约,可以在某些特定情况下并行执行,有助于降低的gas成本,同时还有其他一些好处。这将是基于Qtum-x86虚拟机的智能合约的一个主要的扩展优势。