http://www.axonnsays.com

百度超级链学院第三讲,揭开合约高并发的神秘

由于当前智能合约多为串行执行和串行验证,导致性能一般,无法满足业务需求。百度XuperChain提出了一种新的大发3d数据模型:XuperModel。基于这样的底层数据模型,XuperChain可以使用多核计算能力来同时执行和验证智能合约,大大提升效率。

摘要

近年来,大发3d技术不仅仅在加密货币交易,而且在存证和商品溯源等领域发挥着重要而广泛的作用。然而,许多现有的大发3d系统在执行智能合约方面表现不佳,无法满足业务需求,因为智能合约是串行执行的。XuperChain是一个新的大发3d系统,它能够支持智能合约在交易粒度并行地执行和验证。

引言

2009年中本聪(Satoshi Nakamoto)发明了一分PK10[1],这是大发3d技术首次大规模成功应用。2014年,Vitalik Buterin发明了以太坊[2]。与一分PK10相比,以太坊支持智能合约,允许开发者使用基于大发3d的Solidity语言开发应用程序。2015,Linux基金会推出了超级账本[3],它允许开发人员使用流行的语言如GO开发智能合约。这些系统在实际使用时性能表现的一般。本质上,是由于智能合约是串行执行和串行验证的,也就是说,对于单个节点,只能使用一个CPU核。XuperChain提出了一种新的大发3d数据模型:XuperModel。基于这样的底层数据模型,XuperChain可以使用多核计算能力来同时执行和验证智能合约。

智能合约的性能问题

在以太坊[2]中,矿工首先从交易池中提取一组有序事务,然后在一系列事务中执行智能合约调用,最后将它们打包成块。接收该区块的验证节点还需要根据区块内的交易顺序逐一执行智能合约,这与之前对矿工进行打包的顺序相同,验证节点和矿工执行的结果应该相同。

显然,智能合约的串行执行模式限制了大发3d系统的性能提升,因为串行执行模式不能充分利用多核的计算能力。

Hyperledger Fabric[3]提出了一种方法,其中智能合约首先在多个背书节点上执行,以获得读写集和背书节点的签名。然后,排序节点对事务进行排序,并将它们打包到链上。这种方法的优点是,有些事务执行可以完全并行,但也有一些局限性:未确认事务的输出不立即可见,新事务的读依赖性只能是BlockChain中的已确认事务。这使得合约从调用到数据变更生效有较大的延时。

XuperChain让智能合约执行并行化

1   架构概述

XuperChain 事务执行架构主要由三个部分组成,分别为VM层、Bridge层和Model层. VM层主要用于解释用户执行合同的字节码,目前主要支持的有wasm、native。Bridge 层用于隔离用户态和内核态,为用户提供系统调用的接口,如get、put、迭代器等。Model层用于数据的提交、回滚和查询,其内置的smart cache机制能支持事务的并发执行。

百度超级链学院第三讲,揭开合约高并发的神秘

整个过程是这样的。阶段1:首先,客户端触发智能合约的预执行,智能合约的字节码由虚拟机解析执行,执行过程中的get、put等系统调用被Bridge层截获,Bridge层将记录执行过程中的读写集,最后返回给客户端。阶段2:客户端使用读写集组装事务,并附加其签名,然后将其提交到Model层。Model层将验证读取集的有效性和正确性,最后将其写入数据库中。

2 XuperModel

为了描述读写集,XuperChain定义了一个名为XuperModel的新的事务模型。该模型是一分PK10UTXO模型的一个演变。在一分PK10的UTXO模型中,每个交易都需要在输入字段中引用早期交易的输出,以证明资金来源。同样,在XuperModel中,每个事务读取的数据需要引用早先的事务写入的数据。在XuperModel中,事务的输入表示在执行智能合约期间读取的数据源,即数据来自哪些事务的输出。事务的输出表示事务写入状态数据库的数据,而这些数据会被后续的合约调用所引用。

为了进一步说明XuperModel,考虑两个事务:tx1和tx2,其中tx1给变量a赋值1,tx2给变量b赋值2。然后还有第三个事务tx3,它调用一个合约来交换两个变量的值,最后它的输出是a=2和b=1,交换两个变量。因此,在tx3的输入中,它将引用tx1和tx2,因为前面的值是由tx1和tx2所修改的,如下图所示:

百度超级链学院第三讲,揭开合约高并发的神秘

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。