Qtum Neutron:新一代区块链虚拟机中间件会给Qtum带来哪些新功能?

Neutron是Qtum量子链近期的研发重点之一。它是一个集成虚拟机的整体解决方案,最初是为了集成x86虚拟机的“硬连接”方案,我们重构了这个方案,使Qtum(或别的区块链)可以运行多种虚拟机。Neutron目前还在密集的开发之中,准备在今年晚些时候上线。本文将对Neutron进行详细的说明和解释。
1. Neutron简介
Neutron在虚拟机和区块链的其他部分之间提供了一个环境无关接口。这是通过统一的Neutron API(应用程序编程接口)完成的,该API使区块链软件的各个组件可以通过一种通用语言彼此“对话”,而无需学习任何新技巧。使用Neutron,其他软件组件无需针对特殊情况、异常、或者别的奇怪代码进行编程(程序员将其称为“简陋代码”、“意大利面条代码”或者其他NSFW术语)。相反,Neutron提供了一个稳定、安全、有前瞻性的平台,用于集成各种虚拟机,而无需接触任何VM代码。
在深入了解Neutron的更多详细信息之前,我们先从Rust编程语言、中间件在体系结构中的作用以及基于租用的智能合约存储开始。
2. 什么是Rust?
集成x86 VM的Neutron平台的主要功能是将Rust用于智能合约编程。Rust是2006年由Mozilla开发的一种类似C ++的编程语言,以内存安全(无危险的指针操作或自动垃圾回收)而著称[参考1]。它还包括可大大提高开发人员生产效率的现代化工具,例如集成的测试平台和程序包管理。
Rust将在Qtum智能合约生态系统中提供“第一级别”的支持。以前,x86 VM考虑过几种不同的语言,例如C、Go和Python,这仍然是Qtum Neutron的发展方向。但是,我们会首先将重点放在把Rust作为主要语言上。
Rust将成为我们提供语言支持的主要“易于使用”目标,并且所有文档都将以Rust为例编写。我们将提供用于编写智能合约的原生Rust API(crates),并打算在Qtum智能合约生态系统中支持Rust的大部分功能,包括带有“cargo test”的cargo,用于轻松的自动化测试,以及“cargo run”,用于部署智能合约。我们计划在上线后支持其他语言和工具,但是在初始阶段,我们将重点放在Rust上。
我们选择Rust是因为它对程序员编写和调试安全代码十分高效。这是用Rust写的经典的“ Hello World!“。

3. 中间件
如果您在2018年的任何时候播放音乐或收听广播,您可能会听到由格伦·马里斯(Maren Morris)演唱格莱美奖提名歌曲《中间》(The Middle):
Oh baby, why don’t you just meet me in the middle?
I’m losing my mind just a little.
So why don’t you just meet me in the middle?
In the middle…
“中间件”在人际关系和区块链软件堆栈中都占有重要地位。“中间件”在将高级功能与较低级协议(事务,块和网络层)连接方面起着至关重要的作用。如果没有良好的中间件层来支持智能合约,程序员就需要处理明显更多的“认知负担”。令人满意的中间件将程序员需要担心的问题与它的实际工作方式分离开来,因此,他们能更轻松地工作。
对于Qtum架构,我们可以看到Neutron在堆栈中间扮演着核心角色:

4. 租赁存储
纽约百老汇的常客可以将音乐剧“出租”视为1994年版的“汉密尔顿”,主题歌合唱为:
Headlines, bread lines
Blow my mind
And now this deadline
“Eviction or pay”
Rent
“Rent”和“ Hamilton”在当时都是百老汇音乐剧的突破口,而Rent是Neutron的突破性区块链功能。
基于租金的存储将减缓可怕的区块链存储膨胀。当前,借助Qtum EVM,“状态”智能合约存储已超过常规区块链交易的规模。在以太坊上,智能合约状态存储是以太坊(完整的未修剪得存档历史记录)膨胀到超过4TB的主要原因,使完整节点远远超出了普通人台式机的存储能力。
Neutron将提供一种创新的方法,使智能合约为存储支付租金。该设计已经成型,并扩展了旧的Qtum-x86“任意长度的键和值”方法(准确存储您的需求)。与所有其他租用系统相比,我们得租用系统设计简单(因此易于实施),并且将着重于激励措施,以实现在区块链上仅保留共识所需的数据。只有活跃的合约数据才会在线,并且实际使用智能合同的用户会自动支付租金。

上图显示了如何只让活跃的字节码和数据成为区块链的一部分。具有某些管理功能的通证合约可以使用此功能。经常被使用的通证函数将保持活动状态,而很少使用的管理功能可能会变为非活动状态,直到管理员需要对通证执行某种操作。如果需要,将从存储完整状态的“归档”节点检索不活跃的代码和数据,并支付一定费用以将不活跃的状态恢复回可用的活跃状态。从合约的角度来看,这种设计的好处是它是一个完整的“黑匣子”:使用小得多的存储空间,且不给智能合约开发人员增加任何麻烦。
将租金和新的NeutronDB数据库结合起来有以下好处:
Qtum全节点将需要更少的硬盘空间;
· 尽管区块链的全节点大小仍然不是100%有界,但这将大大减少节点每年增加的存储量;
· 用户将在智能合约中控制其数据。如果类似ERC20的智能合约有1000个帐户余额的状态,则当您需要访问自己的余额时,您只需要为自己的余额支付租金,而无需为其他用户的999个余额支付租金;
· Neutron智能合约将能够使用任意长度的键和值。这极大地简化了智能合约逻辑设计,并减少了在EVM智能合约设计中已经出现的错误和安全问题。由于您可以控制存储布局而不是编译器,因此它也使升级变得更加容易;
· 即使智能合约的某些(未使用)状态已从区块链中删除,它也有可能继续运行;
· 可以逐位还原大量状态。这避免了对大型合约状态恢复可能超出区块限制的问题,或者难以说服Staker收录大额交易;
用于智能合约状态的SPV证明将大大简化,并且使用范围更小(即从智能手机检查智能合约状态将需要更少的带宽)。
5. 更多Neutron细节
通常,Neutron中间件的作用是适配上下两层,以便这些层不必进行任何更改,甚至可能不知道“堆栈”中的任何更改。Neutron中间件层之上和之下的层中的细节应该解耦甚至隐藏,以便Neutron可以成为整个过程的中立协调者。
接下来,我们将更多地了解Neutron在“管理”与上面各层的接口以及“管理”到较低协议级别中的作用。
6. Neutron的向上管理
更好的开发者体验
我们为开发人员考虑到了后端和前端的问题!具有x86 VM智能合约的Neutron将把Rust用于智能合约代码和更多传统的软件工程范例。这意味着您可以更轻松地加入生态系统,而无需学习非常特殊的技术和危险的不成熟编程语言(是的,我们在说Solidity)。Rust着眼于安全性并避免程序员犯错误,这使得开发者很难犯低级错误。Rust的范例迫使程序员处理极端情况,诸如“谁拥有此内存”之类的概念必须明确并预先处理。它被称为一种难以编写的语言,但是在满足编译器要求之后,它通常是正确的且没有错误。
安全第一
Neutron具有专注于安全性的内置功能,可以解决EVM中的一些令人恐惧的安全性问题。这将使编写不安全的智能合约更加困难,并为开发人员提供更多工具来确保其合约安全。
可升级的智能合约
Neutron将具有轻松管理智能合约升级的能力,而无需使用复杂的“代理模式”,这些模式是许多安全问题的根源(例如,在相互调用的层中编写智能合约,这很危险)。可以轻松更新软件以添加新功能或修复错误的概念!智能合约可以全部或部分升级其字节码,并具有分散治理的余地,以控制如何完成升级。
为了帮助管理智能合约之外的升级,将对以太坊和Qtum中传统使用的Gas机制进行修改,使其包含一个新概念,以帮助合约应对其无法控制的生态系统变化,例如硬分叉和图书馆合约升级。我们将稍后将发布更多详细信息。
修复重入问题
Neutron还将利用简单直接的解决方案来解决重入问题,以便只有明确建立允许重入的合约才可以执行重入。EVM中当前的技术并没有限制可重入性(合同可以在执行过程中调用自己)。DAO和许多其他不幸的EVM智能合约可以证明[2],这会导致意外和“有趣”的结果。修复程序将包含一些功能,它们要么简单地不允许重入调用,要么以其他方式检测到合约当前处于重入情况,并停止执行。
隔离见证与多签地址
在当前的EVM实施中,智能合约仅限于使用旧版Qtum地址(以“ Q”开头)。借助Neutron,智能合约可以与所有Qtum地址类型(例如SegWit,MultiSig等)(地址以“ M”,“ qc1”等开头)进行交互。添加此功能意味着智能合约可以与MultiSig地址进行本地交互,包括将MultiSig地址识别为智能合约调用的“发送方”,并将币直接发送至这些地址。
API
Neutron API(应用程序编程接口)意味着开发者可以轻松添加新的VM,以共享相同的基础架构,例如,将来可能会添加WASM。这样,就可以为WASM和x86编译相同的合约源代码(在大多数情况下),并且在部署之前,可以使用字节码大小的度量,执行成本等确定实际部署的平台。它还将具有轻松添加可验证且非图灵完备的专用虚拟机的能力,这些虚拟机对于可在其中构建的智能合约类型(可能针对DeFi或扩展应用程序进行了优化)更加安全。
查看更多Neutron Star代码库和正在开发的Neutron API,Neutron智能合约开发者可以访问:https://github.com/qtumproject/neutron-star
NeutronDB
Neutron提供了一个新数据库NeutronDB用于智能合约存储。NeutronDB基于Qtum较旧的DeltaDB设计,该设计是为联机/脱机应用程序设计的,并且可以快速、可扩展地存储为一系列增量(状态差异)的数据。NeutronDB将使用Merkle Patricia树尝试将EVM存储“状态”替换为Qtum基于LevelDB的EVM存储“状态”,该尝试将所有状态存储在一棵树中。相反,NeutronDB使用多个树来建立最终的世界状态。这方面使运行智能合约的SPV(简单付款验证)轻型钱包更加高效,并且意味着完整节点所需的资源更少。
7. Neutron的向下管理
Neutron将包括一个UTXO(未用交易输出)状态系统(“全局” NeutronDB存储除外)。这将使通证、NFT(不可替代通证)和其他潜在的“一次性”状态在区块链上表示为UTXO。这应该为类似QRC20的令牌启用许多新应用程序,以便可以从Lightning Networks和其他Layer2的扩容工具更轻松地使用它们。这也允许完整节点跟踪更少的状态,并且可以彻底改变通证合约的开发方式。
Neutron还将把Qtum的UTXO模型公开给智能合约,从而使更简单的托管风格的智能合约可以“通知”交易已经进行。这将允许托管合约标记已满足要求的完成检查点。这样可以自动对正在发送的交易做出反应,例如清除托管抵押。这些功能将对所有实现UTXO或其他Qtum功能的区块链公开。(示例:DEX掉期合约要求在释放1000 TKN之前将100 QTUM发送到非合约地址。在EVM实现中,这将涉及先发送到合约,然后从合约“拉出”非合约地址至少要进行2或3笔交易。在Neutron中,这样的事情可以在单笔交易中完成,而无需智能合约就可以直接持有资金)
不只是Qtum,不只是区块链
Neutron的构建与区块链无关,因此可以集成到各种区块链甚至非区块链去中心化技术中,只要它需要运行和验证某种不受信任的代码。智能合约将选择一个“功能集”。有些人可能只是想要“基本功能”,每个集成Neutron的区块链都应该能够支持。其他人可能需要更复杂的功能集,例如UTXO和隐私功能,它们可能仅适用于Qtum或与Qtum更相似的区块链。这使Neutron不仅可以促进Qtum区块链本身,也可以促进更广阔的平台经济。
参考内容:
1. Rust编程语言:
https://www.rust-lang.org/
2. theDAO问题分析:
https://hackingdistributed.com/2016/06/18/analysis-of-the-dao-exploit/