MultiVAC 是为大规模去中心化应用设计的下一代高性能公链,通过可信分片技术为区块链系统赋予了可持续无限扩展的能力。MultiVAC 首次提出了基于可验证随机函数选择分片节点的可信度概率模型,并将该模型运用到区块链交易、计算、存储等关键环节中,使得任务目标可以在部分节点参与的情况下达到极高的可靠性。MultiVAC 将网络中的交易根据经典 UTXO 账户模型分片,通过可信度概率模型选择矿工记账,将公链性能提升到企业级商用水平。作为区块链领域中首个提供弹性计算模型的公链,MultiVAC 创造性地提出了可验证计算任务的 PoIE 共识、专为区块链设计的 BISC 指令集、具备通用计算能力的 MVM 虚拟机等技术,使得开发者能够自主权衡分布式应用中的一致性,可用性和分区容忍性要求,为应用层复杂业务逻辑提供完备支持,从而更便捷地构筑多元化的公链生态体系。
1.要解决的问题
区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式,是一种全球化、去中心化的技术网络。安全性、可扩展性、去中心化构成一个不可能三角。以 Bitcoin、Ethereum为代表的公链完全不具备扩展性,全网计算能力等同于单个矿工计算能力,全网总处理能力与节点规模不相关甚至负相关(更大的通讯成本)。以 EOS为代表的公链尝试用超级节点解决性能瓶颈,却放弃了去中心化。以 Zilliqa、Dfinity为代表的分片方案放弃了一定的安全性,以 Plasma为代表状态通道(State Channel)技术则使用了技术结合现实的手段来处理安全性问题。
目前大量研发投入到提高每秒交易数量的技术方案上。最新公链将每秒交易量提升到数千水平(e.g. EOS,Seele在实验环境下达到 1000-3000 tps, tps = transactions per second)。但是这一交易处理速度依然受到共识制约,主要瓶颈在于单一矿工的硬件处理能力。本质上,很多公链没有实质性地突破“区块链是一个账本”的认知。
同时,网络扩张的速度和规模也不尽如人意:截止 2018年 5 月 13 日 12:00 Noon (UTC 时间),问世近 10 年的 Bitcoin的全节点仅有 10424 个,Ethereum 的全节点仅有 14383个。账本庞大及挖矿困难,建立一个全节点本身并不具备足够收益,导致普通用户不愿意建立全节点。
MultiVAC 认为区块链能否真正商用化的关键在于区块链能否提供通用计算能力,以及全网交易和合约处理性能是否能够可扩展、可增长与可适应。
据此,MultiVAC 提出可信分片计算模型,旨在去中心化网络的不可信节点之间,建立一种计算上的分工与可信关系,使得全球节点可以汇总交易能力,构建成算力可以无限扩张的基础公链网络。
同时,MultiVAC 将交易处理与智能合约进行独立分片设计,构建了一个具有极强支持性和弹性的区块链底层平台。
DApp 可实现通用计算层面上的业务逻辑,并可根据自我需要灵活选择由多大规模的节点来进行计算和达成共识。
为此,MultiVAC 要解决的核心问题是:
1, 如何在全网中选取若干个节点组成可信分片
2, 如何通过可信分片处理网络交易并记录账本
3, 如何验证节点是否诚实可信地完成了计算任务
其中问题 1 决定了 MultiVAC 如何在交易和合约层面进行分片,问题 2 决定了 MultiVAC 如何在交易分片内达成出块共识,问题 3 决定了 MultiVAC 如何将弹性计算分片应用到智能合约。
MultiVAC 利用 VRF 构建可靠概率模型,解决了在交易和合约中如何安全、高效、随机选取分片节点的问题;采用UTXO 账本分片和共识族达成片内共识,实现交易可信分片构建;设计 BISC 区块链专用指令集和 MVM 通用计算虚拟机运行智能合约,通过PoIE共识机制验证计算任务,为DApp业务逻辑处理提供了基于可信分片的弹性执行环境。
2.可验证随机函数 VRF
共识算法的本质是在分布式网络中如何选取一个或多个节点成为记账人。MultiVAC 中关于交易处理和合约计算的分片方案都以 VRF(Verifiable Random Function,可验证随机函数为基础。VRF 是一种共识框架,也是数学工具。
理想状态下,区块链系统中每一个诚实节点都应该有权力参与整个网络的记账工作。共识机制创新本质需要兼顾节点选择的公平性和系统运行的效率。Bitcoin 及 Ethereum 的PoW 算法机制,保证记账节点的选取充分随机,且只有掌控超过全网 51%算力才能破坏规则。PoW 具备数学优雅性,充分体现去中心化的公平性,不过存在巨大的资源浪费。而以石墨烯技术为代表的 DPoS 算法倾向于提高系统吞吐量而牺牲节点选取随机性,并舍弃了普通节点的参与机会,牺牲数学的优雅性和去中心化的公平性换取效率优势。其他共识算法如 PBFT 算法(O(n2)的复杂度)及其各类改良版本、RAFT 算法等,受限于较高的交互成本等原因,难以大规模应用于公链系统。
MultiVAC 认为,Bitcoin、Ethereum 的节点选择机制具有良好的随机性,并赋予所有节点平等记账权力,这是区块链系统存在和发展的基石。Ethereum 还专门针对 ASIC 专业矿机设计 ETHash,将记账权力从中心化矿场归还给普通节点。但必须承认,PoW 节点选择带来巨大资源消耗,哈希计算本身不能创造实际价值。
理想的共识算法应该兼顾随机性和效率。随机性(去中心化)是区块链存在的核心意义,而现实是现有公链性能拓展决定了区块链的未来。VRF 是解决这一矛盾的最佳突破方向。一个良好的 VRF,应该具有以下特点:
1, VRF 可验证随机数发生器,为分布式系统提供数学上严谨的随机性。
2, VRF 具有不可预测、不可控制性,从数学上保证安全性。
3, VRF 可以是非交互式的,传播成本低、效率高。
目前,采用 VRF 进行选择的区块链共识方案有Algorand,Dfinity 中使用的 BLS 算法,以及 Cardano中的 Ouroboros Praos 算法。
VRF 是一个三元组:
以上可证,VRF 在数学上定义了完善的随机数发生器,可以应用于区块链系统中节点的选择、检查点的生成等诸多问题,是随机选取记账矿工的优异方案。
但是,在具备上述概率正确性、唯一证明性、伪随机性三大性质之外,区块链系统中的随机数还应该具备不可预测性。一旦记账矿工在还没有完成记账时就暴露,则有可能遭遇来自作恶者的攻击而导致记账失败。
因此,还需要一种可验证的不可预测函数(Verifiable Unpredictable Functions, VUF),同样是一个三元组:
VUF = VUF 的定义和 VRF 完全一样,并且满足 VRF 中的概率正确性、唯一证明性两个性质,除此之外,它还需要满足不可预测性,即:
3 分片选取概率模型
VRF 提供了一种快捷、有效的方式,实现从一个分布式网络中选取一部分节点。
假设全网共有V个节点,要建立一个具有m个节点的分片。MultiVAC 在主链上产生随机数R,节点i根据自身私钥对R进行加密,得到Ri,这里,Ri是一个 256bit 的随机数。其被选中为片内节点的条件是:
这是一个与N无关的表示,即在一个节点充分多的网络环境中,分片的构造只和预设的片内节点个数m有关,与全局网络节点个数无关。
从这一数学基础出发,完全可以将 Bitcoin 或 Ethereum看作是庞大的现代互联网中的一个分片,而这个分片的可信度仅和 Bitcoin 或者 Ethereum 的参与节点个数相关,而和整个互联网有多大并无太大关系。故,我们有以下两个论断:
4 交易与共识
基于 VRF 和可信度概率模型,我们可以将全网构建成为多个分片,每一笔交易可以委派给某一个特定分片来执行。但如何设计合适的交易处理机制,以实现多个分片之间的协同交互,是一件非常有挑战性的事情。交易分片方案需要综合考虑账本如何管理、在分片内部达成的共识是否足够安全、以及跨多个分片之间的交易如何执行等问题。
现有技术方案,如 Elastico,Zilliqa使用了统一的账本数据,虽然实现了分片处理交易,但数据之间的同步成本依然存在,本质上没有解决数据分 片问题。
OmniLedge设计了名为 Atomix 的拜占庭分片原子提交协议(Byzantine Shard Atomic Commit (Atomix) protocol),实现对每一个交易的原子处理,但这一协议逻辑比较复杂,工程实现难度较大。
MultiVAC 设计分片 UTXO 机制来解决这一问题。网络将交易根据账户分配到不同分片,同一个账户的所有支出交易在同一个分片中执行。在 UTXO 交易模型之下,每一个UTXO 交易的输入都是一笔或多笔已确认交易,而输出不需要与交易接收方进行数据交互,如图 2 所示。所以当一个账户始终在同一个片内被处理时,保证了 UTXO 交易只对分片内数据进行写操作,对分片外账本数据均为只读操作,避免了跨片的复杂数据逻辑。此方法逻辑简单、清晰,执行效率高,易于工程实现。
图 2:MultiVAC 中的 UTXO 模型。交易依据支付者的地址被分到不同的分片执行。UTXO 的输入是其它分片上已经被确认的交易,所以跨片的数据交互都是只读的操作。
账本分片的潜在问题是作恶者如果需要篡改某笔交易或想要实现双重支付,则不需要攻击全网,只需要对特定的分片实施攻击,或联合该分片的矿工实现作恶。解决的方案有两种途径,一种是动态调整用户所归属的分片,另一种是动态调整所属分片的矿工。两种方法都可以使作恶者的难度提升至攻击全网的难度,MultiVAC 选择第二种方案。同时,MultiVAC 在分片内共识选用 PBFT、异步 BFT 或 BA⋆等不会(或极低概率)产生分叉的算法,且一旦作恶产生错误的区块必定会留下密码学痕迹。而 Bitcoin 中的 PoW 算法并不适用于片内共识,因为分片的算力弱于全网算力,攻击者在分片内更容易占据多数算力,在分片内产生分叉。令分片的可信度要求为q,则分片大小m应满足:
对于公链上的交易来说,MultiVAC 单个分片内的共识强度将足以达到极高可靠性要求,这一可靠性需要至少数百量级的单片节点数。但对于表达通用业务逻辑的 DApp 和智能合约而言,如果每一行代码都需要在数百上千节点上重复运行,显然过于浪费。那么,是否有办法在不可信任的去中心化网络中,通过更少或者可选有限的节点数,完成合约层面的可靠计算,并保证过程与结果的可信度呢?MultiVAC将在 VRF 选取分片的基础上,通过 BISC 指令集、MVM 虚拟机、PoIE 共识为 DApp 构建在智能合约层面上的弹性可信计算分片模型。
5 指令集与虚拟机
虚拟机为分布式节点执行智能合约提供了良好的沙盒环境。但对要具有通用计算能力和无限扩展能力的公链来说,指令集的设计也至关重要。目前主流的指令集和虚拟机设计方案比较简易,无法支撑起复杂业务逻辑与应用。
MultiVAC 将建立适用于区块链系统的专属指令集 BISC(Blockchain Instruction Set Computer),并基于这一指令集系统设计具备通用计算能力的虚拟机 MVM(MultiVAC Virtual Machine)。
5.1 指令集和虚拟机的设计要求
长远来看,区块链虚拟机可以直接是一台专业的硬件计算机,具有更高的计算效能,未来还具有落地成为硬件 CPU的能力。区块链指令集应该是一种高效、成熟的指令集,通过支持复杂通用计算来支撑复杂上层应用。
MultiVAC 基于长远愿景设计指令集和虚拟机:
1, 支持通用计算能力。简单的虚拟机和字节码,如Ethereum 的虚拟机 EVM[12],难以支撑复杂应用逻辑。面向未来的智能合约和 DApp 要求虚拟机除了图灵完备之外,还要求指令集能支持更复杂的计算逻辑。
2, 支持高级语言,具有良好的编译生态。MultiVAC是开源技术生态,支持大量高级语言并提供完善的编译生态,可支持既有程序的平滑迁移,对开发者全面友好。
3, 具有高效可行的硬件架构。现有区块链系统在将虚拟机的字节码进行解释或编译执行时,会严重损失底层硬件性能。MVM 将基于成熟的开源 CPU 指令集进行二次设计和升级,具有进一步发展成为硬件计算机的能力,使得计算机能够天然成为 MultiVAC 矿机节点,同时还具备桌面计算机或移动设备所需要的通用计算能力,实现矿机和计算机的无缝切换。
5.2 BISC 指令集
MultiVAC将在现代最出色的开源精简指令集RISC-V指令集基础上,升级开发区块链专用指令集 BISC(Blockchain Instruction Set Computer)。BISC 是一套灵活、定制化的指令集架构。它基于成熟的开源 RISC-V 社区,有大量成熟的指令架构体系,也有良好的开源编译生态。同时,MultiVAC 对它进行区块链定制化,包括加入 256 位指令的处理,以及为公链运行加入哈希与签名指令。BISC 的开发也将遵循开源共享原则。
BISC 指令集支持一套精简而完善的指令序列。如表 1所示。最后一列列举了 BISC 指令集包含的指令内容。BISC包含了多个指令包,其中 RV 表示这是由 RISC-V 定义的标准指令扩展包,BRV 开头的是 BISC 新定义的扩展包。RV或 BRV 后跟的数字表示数据位宽,最后的字母表示扩展包的功能。其中 I 指令包是 RISC-V 的基础包,MAFD 4 种指令包是 RISC-V 定义的标准扩展包,IMAFD 5 种指令构成的集合统称为标准通用指令集(G 指令)。G 指令,尤其 RV32G和RV64G是RISC-V社区目前重点支持和实现的基础指令集。而 L 和 B 两种指令是 RISC-V 定义的额外扩展包,H 指令包和 X 指令是 BISC 指令集中全新定义的。
BISC 指令集架构支持基于 LLVM 的 C 语言编译架构,GDB 调试工具,glibc 标准库等。LLVM(Low Level Virtual Machine,底层语言虚拟机)本质是编译器框架,目的是对任意编程语言,利用该基础框架,构建一个包括编译时、链接时、执行时等的语言执行器。以 RISC-V 为后端的 LLVM编译框架将会支持 Java、Go 等高级语言。其架构如图 3 所示。
5.3 MVM 虚拟机
MVM(MultiVAC Virtual Machine)是为支持弹性计算模型而设计的区块链专用虚拟机,能够为图灵完备的高级语言所编写的智能合约提供高效率、可验证的执行环境,具备静态编译指令优化、运行时态指令检查、指令执行过程校验、存储空间分配调度等能力。
在分布式系统中,为了避免恶意代码对网络平台的循环攻击,以及缺陷代码对计算资源的持续占用,执行智能合约的沙盒环境应该具备解决图灵停机问题的能力。MVM 采用类似 Ethereum 中 gas 计费的机制来解决此问题,对合约需要执行的 BISC 指令进行统计并计算费用,当成功完成计算任务或者费用已消耗完毕时,合约程序停止。
基于针对 BISC 指令集的 gas 计费机制,计算任务中的每一步都会被精确量化,这将会引导智能合约向高性价比方向演化,即在实现计算目标不变的前提下,尽可能的减少计算步骤、精简指令序列,为此 MVM 设计了针对性的优化与建议引擎,能够通过测试环境预执行来提示开发者计算任务的指令集规模和单条指令单价成本,以及通过编译环境为开发者提供代码优化建议。
除了可以在有限的时间内可以结束运行,在弹性计算模型中执行的智能合约还需要经过诚实性工作验证,MVM 通过嵌入 PoIE 共识来完成此任务,因此,计算、计费、验证将融入到每段指令的执行过程中同时进行,其中需要说明的是,计费和验证过程虽然消耗计算资源,但是服务能力中必要的保障机制,与执行任务所设定的 gas 额度无关。当指令序列在足够充裕的 gas 费用保证下顺利完成,并且验证通过之后,节点将通过共识将计算结果打包发布并获得 gas 奖励。
为了更便捷的进行指令操作,MVM 提供了面向 BISC更友好的内存模型,该模型能够将计算机物理资源进行隔离,并且为合约执行提供灵活的运行时支持,内置了栈空间和堆空间。其中栈空间提供足够的调用深度,支持多种数据结构类型,并可提供批量出入栈操作,而堆空间提供自由分配的能力,支持随机寻址,同时提供监测机制对已释放资源进行回收,整体为通用计算提供基本存储保障。
MVM 可以运行在所有网络节点中,提供计算服务的节点会将其通过网络接收到的计算任务纳入以指令集单价为索引的优先队列中,集中调度和执行计算任务,并交付计算结果。
6 PoIE 共识
现有分片技术如 Ethereum 分片方案、Zilliqa、Elastico等,对每个分片内部的节点数量有较大的要求,至少也应该是数百至数千的水平。考虑一个区块链上的分布式应用 DApp,它的代码就是公链上的一个或多个合约,如果 DApp 的每一行代码都需要在数百上千个节点上重复运行,这个成本显然是过于高昂了。
那么,在区块链这种不可信任的节点网络之中,有没有办法可以只让少数几个节点执行代码,就可以进行计算任务的验证,还能保证计算过程及结果的可靠性?
7 存储,传输与计算
一个健壮而具有扩展性的公链网络,应该在计算、存储、传输三个维度上都具有良好的扩展性、安全性和去中心化。此外,还应有完善的经济体系激励更多节点加入网络,以提供计算、存储、传输服务,建立完整而具有成长性的公链基础设施。但要实现上述理想的网络平台还面临着很多学术和工程上的困难。
MultiVAC 首次提出了以弹性分片的方案去解决区块链网络中的计算问题,同时通过 PoIE 去验证计算的真实执行情况。PoIE 提供了节点确实执行的指令集序列Γ,以及经过同态隐藏后的节点专属序列Λ。基于序列的执行情况,可以很容易地设计经济激励体系,如类似于 Ethereum 的 gas 激励机制,设计计算任务奖励函数:
MultiVAC 实现了高性能的交易处理能力,并且随着加入节点数的增加,其交易处理能力也相应得到提升。当公链的平均交易处理量> 1,000 tps(平均值,不代表公链性能),平均单个交易的数据大小0.4 KB的时候,公链每年就会产生超过10TB账本数据。显然,普通的个人电脑已经不可能存储完整的历史账本,所以解决的途径只有两条:使用超级节点,或者分片存储。
在存储层面,IPFS设计了完整的去中心化分布式存储系统,提供了可寻址、版本化、点对点的文件系统。一些知名的公链系统已经使用了 IPFS 作为底层存储,如 EOS。IPFS 使用了 filecoin作为存储激励机制,其他的区块链存储方案还有 Storj,MaidSafe,Siacoin等。
与 IPFS 基于 Hash 的存储与检索方案略有不同,MultiVAC 首次提出了基于 Merkle Root 的存储结构。这样的结构的好处是不仅仅可以基于 Merkle Root 值进行检索或数据获取,还支持较小的数据片段的检索和获取,以及针对片段的网络校验,包括存在性校验和真实性校验。MultiVAC中同时支持基于 Hash与基于Merkle Root 的数据存取与检索。
此外,MultiVAC 还加入了 VRF 分片存储机制,建立分布式去中心化存储系统。类似于 Bitcoin 轻节点,MultiVAC 的节点只存储区块的摘要信息,真正的交易信息及合约相关输入输出都存储在分布式存储之中。值得注意的是,在 MultiVAC中,数据的存储仅作为系统的底层服务被使用,存储者不能对数据进行任何修改操作。关于数据的所有产生、修改、删除、确认、共识等行为均由上层逻辑达成,底层存储服务仅保管确定性的数据并向上层提供存取功能。在 MultiVAC 中,节点提供计算与存储服务都会获得相应的激励。
最后,区块链网络还需要考虑数据传输的问题。如果使用分片存储账本,那么必然面临的问题是账本的存储压力被转化成了数据通讯的压力。不过 IPFS 已经证明了分布式的存储也带来了分布式网络传输,可以缓解中心化节点的带宽压力。
若一个节点在出块时需要处理t个交易:如果全网存储账本的话,则面临O(t)的磁盘 IO 成本,O(t)的网络账本同步成本;如果是分片存储账本,那么就没有磁盘 IO 成本,同样是O(t)的网络账本同步成本,另外还需要O(t)的交易验证带来的网络通讯成本。由于交易验证可能是一个碎片化的网络通讯,所以工程实现上成本会高于本地磁盘 IO。但本质上,账本分片不会增加网络传输的理论复杂度。
在传输的激励机制层面,学术界和工业界都没有一个有效的解决方案,目前仍然是一个开放的问题。即使在 IPFS和 filecoin 的方案之中,一个存储节点可以通过 PoRep 和PoST 两个共识来获得存储的奖励。但在网络上其他节点需要使用这个数据的时候,由于带宽成本等原因,存储节点完全可以拒绝向请求方传输数据。此外,数据传输是高频次的,每一次访问都产生对应的奖励交易也是不可能实现的,因为交易又会带来数据传输的成本,进而产生了无限递归。一个良好的传输激励机制需要综合考虑带宽、延迟、数据总传输量、请求频次等问题,这些困难也使得它目前仍然是一个等待解决的问题。不过由于传输不会脱离计算或存储而独立存在,所以传输的激励体制并不是必须的。
MultiVAC 综合考虑区块链中的计算、存储、传输问题,并设计了计算与存储的激励机制,是首个实现了在计算、存储、传输三个维度可扩展的公链。
8 总结
MultiVAC 设计了一种通过 VRF 选择节点进行分片,以概率模型保证可信度的高性能公链,该架构为其上运行的智能合约提供了可以自由定义和取舍安全性、去中心化和可扩展性的弹性可信计算分片模型。MultiVAC 网络的处理能力能够伴随节点数量和计算能力的扩张而持续增加;在业务支持方面,基于 BISC 指令集、MVM 虚拟机、PoIE 共识的分布式计算平台能够为公链上的去中心化应用提供无限扩张的资源供给。
(MultiVAC 名称来源于科幻作家阿西莫夫《最后的问题》中的超级计算机的名称。这台超级计算机,从现在我们熟知的晶体管结构,自我进化到与所有人类灵魂融为一体的超时空结构,最终在整个宇宙热寂湮灭之时,完成了终极问题“如何逆转宇宙的熵增”的计算和再现。)
领取专属 10元无门槛券
私享最新 技术干货