开启智能合约新时代,Qtum-x86虚拟机优势何在?

100 阅读10分钟

前言

随着Qtum-x86虚拟机的设计与开发工作的不断推进,更多的开发细节逐渐浮出水面。虚拟机在区块链世界中拥有多重要的位置?Qtum-x86虚拟机在这个领域里的特别之处与优势在哪里?

进入主题之前,让我们先花一点时间,简单回顾一下区块链的历史。2009年开始运行的比特币使用操作码(opcodes)在底层操纵UTXO,实现用户在上层能够感知到的“转账”功能。实际上比特币的世界里并没有账户概念,每个用户钱包里的余额就是他所有UTXO的加总,就像你实际拥有的钱包一样,钱包的余额等于里面钞票的总和。


没过多久,“密码朋克”们开始在比特币协议上夹带私货,发明了利用OP_RETUN记录信息的omni layer和一系列彩色币,并开始改造比特币代码发行新链。这种发行方式过于复杂。随后,出现了允许用户在其链上发行资产的区块链。这类区块链给用户提供了接口,并可以输入一些币的参数,如发行量、最小单位等,大大简化了发币成本。但这种方式并没有真正流行起来,因为出现了发币更简便、功能更多元的公链——以太坊。以太坊在区块链上实现了智能合约,用户可以使用以太坊特有的Solidity语言编写代码,编译成字节码后在节点的以太坊虚拟机EVM上运行。



区块链虚拟机的进化史

从虚拟机到区块链虚拟机


虚拟机,或者说虚拟化技术,历史远长于区块链。从最开始的大型机分时系统开始,到操作系统虚拟机、编程语言虚拟机、服务器虚拟化、容器化等技术,经过了数十年的发展,此类技术已经相对成熟,并被应用于很多场景。其核心在于,将应用程序的运行环境与实际的操作系统和硬件隔离开,将计算资源抽象化,使应用程序不局限于硬件或者操作系统的环境。


回到区块链领域,在区块链上使用虚拟机主要出于两个目的:可验证与安全。


可验证才能达成共识,而共识是区块链能够实现信任的原因。普通应用程序对可验证性几乎没有要求,由于运行环境软硬件的区别,同样的程序在不同客户端的运行结果可能并不完全一致。对中心化应用来说不是问题,因为有服务器对数据进行同步,但对于去中心化的区块链来说,这种差异会造成无法达成共识,因此无法接受,所以需要一个统一的虚拟环境来确保智能合约运行结果可验证。


区块链对安全的高要求也是出于其去中心、不可逆的特性。虚拟化的运行环境能减少合约对别的合约以及区块链平台本身的影响,提高系统的安全性。


出于这些独特的要求,以太坊在创立之初设计了Solidity语言及对应的以太坊虚拟机。而Qtum量子链综合了比特币和以太坊的优势,目前也使用EVM作为平台的虚拟机。目前在区块链领域的虚拟机主要可以分为两大流派:

  • 源自EVM、运行Solidity的虚拟机

  • 运行WASM(WebAssembly)虚拟机


这两者中,EVM类的虚拟机应用得更为广泛,包括Qtum在内的很多公链都选择兼容EVM。虽然Solidity的开发与常见的编程语言设计上差别较大,但多年的发展与先发优势让其拥有了相对广泛的开发者群体,并且就区块链领域来看,其开发环境、工具链、标准框架等资源也最为成熟与丰富。


Solidity综合了JavaScript、Go、C++等多种语言的特点,整体语法类似JavaScript。使用高级语言编写完代码后将由编译器编译成EVM字节码,将字节码交给EVM进行运行。EVM是一个栈结构的虚拟机,与大部分计算机的寄存器模型有所不同,所以虚拟机执行字节码时需要进一步解释成机器码,在物理机上运行。


EVM为以太坊区块链量身定做,但这也造成了虚拟机与链的深度耦合,现有的EVM很难兼容Solidity之外的语言。而EVM与Solidity的设计较为仓促,留下了一系列被人诟病的问题,如所有的键与值都是256位,在物理机上执行时需要很多额外优化;编程语言虽然实现了图灵完备性,但缺少很多高级语言的特性;生成的字节码大,浪费区块空间;gas模型不合理,难以估计gas消耗,修改模型又会影响现有合约;合约无法升级等。EVM的升级从未停止,但困难重重,仅仅重入攻击问题就花费了很多精力,仍未彻底解决,并直接造成了君士坦丁堡硬分叉的推迟。以太坊团队在数年前就开始了对WASM的研究,并准备在ETH2.0上应用新虚拟机WASM。


为何提出Qtum-x86虚拟机?

Qtum-x86虚拟机从何而来


由于EVM的先天缺陷,就引出了区块链虚拟机的第二大类——WASM虚拟机。这一类虚拟机被很多新项目和在研究开发之中的项目所采用。WASM并不是一种高级语言,而是一种在编译过程中产生的字节码规范。WASM背后有Google、Microsoft等大公司的开发支持,初衷是作为web端JavaScript的一种补充,用来更高效地支持web应用。WASM是一项较新的技术,仍在快速发展完善之中,其代码体积较小,某些场景的运行速度也明显快于JavaScript,可以支持C/C++/Rust等多种通用高级语言。


WASM的虚拟机与EVM类似,也是利用栈的结构,在区块链虚拟机这个领域,在 QTUM 技术实验室发布的 为何Qtum 量子链要设计x86虚拟机?解释的非常全面。Qtum用AAL,以比特币的UTXO为底层,将EVM的可编程性与比特币的安全、隐私结合了起来进行创新。从一开始,Qtum就做好了兼容多虚拟机的准备,将EVM与底层进行了解耦,并规划了x86虚拟机的研发。


与EOS等出块群体很小的DPoS公链不同,Qtum使用更去中心化的MPoS共识机制,不设超级节点,对出块节点的硬件要求很低,数千个节点分散在世界各地。因此,x86这种PC市场占有率超过90%的CPU架构能最大化地适应当前节点的硬件条件。与EVM或WASM不同,x86作为历史超过40年的ISA(指令集架构,为CPU设计的底层语言),一方面研究众多,工具丰富,有很多虚拟化和模拟的经验可以参考;另一方面,可以使用寄存器结构进行模拟,与物理机条件更匹配,对执行效率和费用可以做进一步优化,并且借助x86高效的指令集和虚拟机的冯诺依曼架构可以实现很多现有虚拟机无法实现的特性。


Qtum-x86 技术优势

7大优势全面解读


支持多语言,首先将支持Rust:Rust是一种近来在区块链领域十分热门的编程语言,其设计较为轻便、高效,且十分强调安全性。自从Libra选择使用Rust后,Rust引起了越来越多开发者的注意。Qtum Co-Founder Jordan Earls早在2017年就将Rust放在虚拟机优先支持的语言之中,并预言2018年将是Rust智能合约的开端。开发者使用Rust学习成本较低,并有很多工具可以使用,并可以以较少的工作量从现有编译器上改造出适用的编译器。Qtum还计划后续添加对C#、Go等热门语言的支持。


使用虚拟机使用API与区块链通信,可并行支持多虚拟机:意味着Solidity开发者也可以继续使用Solidity在Qtum上进行开发,甚至可以混合开发,互相调用。这能减少开发者的迁移成本,降低开发门槛。


优化Gas模型,使开发和使用更便宜,结合DGP,后续可以对模型进行持续优化:x86架构下,很多原本在EVM上很昂贵的操作可以变得很便宜,如strlen。同时,由于Qtum DGP的存在,可以由节点对模型进行投票修改,使设计上难以精确的Gas模型在实际应用中进一步优化。


通过存储租用模型解决状态膨胀和存储占用问题:随着时间的推移,比特币全节点的大小已经超过100G,EOS这类出块更快的区块链更是几年就能突破1T。这阻碍了普通用户加入网络验证交易,使得同步、查找、验证等都变得更困难。Qtum提出了根据合约使用的存储进行收费,详情见:Qtum-x86虚拟机实现存储区租赁,高效节省虚拟机内存


智能合约可升级:以太坊目前的合约无法升级,开发者只能将状态与逻辑分离,在需要升级的时候重新上传合约。这不符合开发的客观要求,有更好的方案来实现区块链的不可修改特性。x86的智能合约将在不损失合约安全性和去信任的前提下可以被升级,更加贴合实际的开发需求。


更多标准库:开发者将不必在每个合约开头自己写safemath。这不仅能节约开发者的时间,也能节省区块链的空间,降低合约的费用。以类似预编合约的方式将一些常用的标准库,从而合约不需要特殊支持也可以调用。


解锁AAL的更多功能:当前AAL的很多潜力被EVM限制住了,如segwit、P2SH等等。x86虚拟机将进一步释放Qtum功能上的潜力。


以上仅仅是x86虚拟机的冰山一角,新虚拟机的还将带来合约调用、数据存储、合约功能等方面的更多革新。


少有人走的路总是更艰辛,但也会带来更多惊喜。Qtum创立之初就将Qtum-x86虚拟机的研发定为长期发展目标,并且相关GitHub代码一直保持高度活跃。随着研发与实施的逐步推进与完善,Qtum-x86虚拟机将凭借其独特优势,在区块链智能合约的赛场里拥有自己的位置,将区块链带向更广阔的舞台。