一种区块链的并行交易执行方法、装置和电子设备与流程

文档序号:24289801发布日期:2021-03-17 00:38阅读:162来源:国知局
一种区块链的并行交易执行方法、装置和电子设备与流程

本发明涉及区块链技术领域,尤其是在区块生成和区块验证中交易执行这一技术领域。



背景技术:

区块链网络上的节点在生成区块时,需要选择并依确定性的顺序,顺次执行一组交易,达成新的世界状态,方可生成区块,进而参与共识。同样,区块链节点在验证区块时,需要依同样的确定性的顺序,顺次执行区块里包含的一组交易并达成新的世界状态,方可验证区块并进而参与共识。

因为交易是顺次执行,为了提高出块速度,每个区块能够包含的交易数量可能非常有限,这严重影响区块链的并发能力等性能。执行逻辑复杂、耗时较长的交易时,这个问题就更突出。



技术实现要素:

为了解决上述技术问题中的至少一个,本发明提供了一种区块链的并行交易执行方法、装置、电子设备和可读存储介质。

本发明的第一方面,提供了一种区块链的并行交易执行方法,包括:

获取每个交易的有效依赖关系;

根据所述每个交易的有效依赖关系,为所述每个交易分配交易桶;

并行地执行每个交易桶中的交易。

可选地,获取每个交易的有效依赖关系,包括:

获取每个交易的目标智能合约的有效依赖关系;和/或,获取每个交易声明的有效依赖关系。

其中,预先设置每个交易的目标智能合约的有效依赖关系,直接获取每个交易的目标智能合约的有效依赖关系作为交易的有效依赖关系;或者,规定每个交易需要声明有效依赖关系,将交易声明的有效依赖关系作为交易的有效依赖关系;又或者,预先设置每个交易的目标智能合约的有效依赖关系,以及,每个交易需要声明有效依赖关系,将交易的目标智能合约的有效依赖关系和交易声明的有效依赖关系的并集作为交易的有效依赖关系。在本发明实施例中,有效依赖关系通过一个元数据表达,元数据包括未设定、不相关、以及至少一个地址三种取值情况。

可选地,获取每个交易的有效依赖关系,包括:

获取每个交易的目标智能合约的依赖关系和依赖解除;

获取所述每个交易声明的依赖关系和依赖解除;

根据所述每个交易的目标智能合约的依赖关系和依赖解除,以及所述每个交易声明的依赖关系和依赖解除,确定所述每个交易的有效依赖关系。

可选地,根据所述每个交易的目标智能合约的依赖关系和依赖解除,以及所述每个交易声明的依赖关系和依赖解除,确定所述每个交易的有效依赖关系,包括:

对于所述每个交易中的任一交易,当所述任一交易的目标智能合约的依赖关系和所述任一交易声明的依赖关系均不为未设定时,计算所述任一交易的目标智能合约的依赖关系和所述任一交易声明的依赖关系的并集,将所述并集减去所述任一交易的目标智能合约的显式依赖解除和所述任一交易声明的显式依赖解除,得到所述任一交易的有效依赖关系。

其中,显式依赖解除指包括一个或多个地址的依赖解除。

可选地,根据所述每个交易的目标智能合约的依赖关系和依赖解除,以及所述每个交易声明的依赖关系和依赖解除,确定所述每个交易的有效依赖关系,包括:

对于所述每个交易中的任一交易,当所述任一交易的目标智能合约的依赖关系和所述任一交易声明的依赖关系均为未设定时,确定所述任一交易的有效依赖关系为未设定;

对于所述每个交易中的任一交易,当所述任一交易的目标智能合约的依赖关系和所述任一交易声明的依赖关系中的一个为未设定时,将所述任一交易的目标智能合约的依赖关系和所述每个交易声明的依赖关系中的另一个减去所述任一交易的目标智能合约的显式依赖解除和所述任一交易声明的显式依赖解除,得到所述任一交易的有效依赖关系。

其中,显式依赖解除指包括一个或多个地址的依赖解除。

可选地,根据所述每个交易的有效依赖关系,为所述每个交易分配交易桶,包括:

对于所述每个交易中的任一交易,当所述任一交易的有效依赖关系为不相关时,为所述任一交易分配单独的交易桶。

可选地,根据所述每个交易的有效依赖关系,为所述每个交易分配交易桶,包括:

对于所述每个交易中的任一交易,当所述任一交易的有效依赖关系为未设定时,将所述任一交易分配至用于存放有效依赖关系为未设定的至少一个交易的交易桶。

对于所述每个交易中的任一交易,当所述任一交易的有效依赖关系为一个或多个地址时,将所述任一交易分配至用于存放有效依赖关系相同的交易的交易桶。

可选地,根据所述每个交易的有效依赖关系,为所述每个交易分配交易桶,包括:

对于所述每个交易中的任一交易,当所述任一交易的有效依赖关系为未设定时,或者,当所述任一交易的有效依赖关系为一个或多个地址时,将所述任一交易分配至用于存放有效依赖关系不为不相关的至少一个交易的交易桶。

可选地,方法还包括:

当用于分配的交易桶不存在时,创建对应的交易桶。

可选地,并行地执行每个交易桶中的交易,包括:

为每个交易桶创建一个线程,各个线程并行地执行每个交易桶中的交易。

可选地,并行地执行每个交易桶中的交易,包括:

创建多个线程,每个线程对应至少一个用于存放有效依赖关系为不相关的交易的交易桶,和/或,每个线程对应至少一个用于存放有效依赖关系相同的交易的交易桶;

各个线程并行地执行对应的多个交易桶中的交易。

可选地,获取每个交易的有效依赖关系之后,还包括:

将所述有效依赖关系更新至区块链网络的世界状态数据。

可选地,所述执行每个交易桶中的交易之后,还包括:

判断所述每个交易桶中的交易在执行时使用的依赖关系与所述有效依赖关系是否一致;如果是,确定交易执行成功;否则,确定交易执行失败。

可选地,所述确定交易执行失败之后,还包括:

如果确定所述目标智能合约的依赖关系和/或依赖解除有误导致交易执行失败,修正所述目标智能合约的依赖关系和/或依赖解除,如果确定交易声明的依赖解除导致交易执行失败,执行惩罚交易发起方的处理流程。

可选地,当区块生成时,或者,当区块验证时,获取每个交易的有效依赖关系,根据所述每个交易的有效依赖关系,为所述每个交易分配交易桶,并行地执行每个交易桶中的交易。

本发明的第二方面,提供了一种区块链的并行交易执行装置,包括:

有效依赖关系获取模块,用于获取每个交易的有效依赖关系;

交易桶分配模块,用于根据所述每个交易的有效依赖关系,为所述每个交易分配交易桶;

交易执行模块,用于并行地执行每个交易桶中的交易。

可选地,所述有效依赖关系获取模块,具体用于:

获取每个交易的目标智能合约的有效依赖关系;和/或,获取每个交易声明的有效依赖关系。

可选地,所述有效依赖关系获取模块,具体用于:

获取每个交易的目标智能合约的依赖关系和依赖解除;

获取所述每个交易声明的依赖关系和依赖解除;

根据所述每个交易的目标智能合约的依赖关系和依赖解除,以及所述每个交易声明的依赖关系和依赖解除,确定所述每个交易的有效依赖关系。

可选地,所述有效依赖关系获取模块用于根据所述每个交易的目标智能合约的依赖关系和依赖解除,以及所述每个交易声明的依赖关系和依赖解除,确定所述每个交易的有效依赖关系时,具体用于:

对于所述每个交易中的任一交易,当所述任一交易的目标智能合约的依赖关系和所述任一交易声明的依赖关系均不为未设定时,计算所述任一交易的目标智能合约的依赖关系和所述任一交易声明的依赖关系的并集,将所述并集减去所述任一交易的目标智能合约的显式依赖解除和所述任一交易声明的显式依赖解除,得到所述任一交易的有效依赖关系。

可选地,所述有效依赖关系获取模块用于根据所述每个交易的目标智能合约的依赖关系和依赖解除,以及所述每个交易声明的依赖关系和依赖解除,确定所述每个交易的有效依赖关系时,具体用于:

对于所述每个交易中的任一交易,当所述任一交易的目标智能合约的依赖关系和所述任一交易声明的依赖关系均为未设定时,确定所述任一交易的有效依赖关系为未设定;

对于所述每个交易中的任一交易,当所述任一交易的目标智能合约的依赖关系和所述任一交易声明的依赖关系中的一个为未设定时,将所述任一交易的目标智能合约的依赖关系和所述每个交易声明的依赖关系中的另一个减去所述任一交易的目标智能合约的显式依赖解除和所述任一交易声明的显式依赖解除,得到所述任一交易的有效依赖关系。

可选地,所述交易桶分配模块具体用于:

对于所述每个交易中的任一交易,当所述任一交易的有效依赖关系为不相关时,为所述任一交易分配单独的交易桶。

可选地,所述交易桶分配模块具体用于:

对于所述每个交易中的任一交易,当所述任一交易的有效依赖关系为未设定时,将所述任一交易分配至用于存放有效依赖关系为未设定的至少一个交易的交易桶。

对于所述每个交易中的任一交易,当所述任一交易的有效依赖关系为一个或多个地址时,将所述任一交易分配至用于存放有效依赖关系相同的交易的交易桶。

可选地,所述交易桶分配模块还用于:

当用于分配的交易桶不存在时,创建对应的交易桶。

可选地,所述交易执行模块具体用于:

为每个交易桶创建一个线程,各个线程并行地执行每个交易桶中的交易。

可选地,所述交易执行模块具体用于:

创建多个线程,每个线程对应至少一个用于存放有效依赖关系为不相关的交易的交易桶,和/或,每个线程对应至少一个用于存放有效依赖关系相同的交易的交易桶;

各个线程并行地执行对应的多个交易桶中的交易。

可选地,装置还包括:

状态数据更新模块,用于将所述有效依赖关系更新至区块链网络的世界状态数据。

可选地,所述交易执行检验模块,用于判断所述每个交易桶中的交易在执行时使用的依赖关系与所述有效依赖关系是否一致;如果是,确定交易执行成功;否则,确定交易执行失败。

可选地,所述交易执行检验模块,还用于:

在确定交易执行失败之后,如果确定所述目标智能合约的依赖关系和/或依赖解除有误导致交易执行失败,修正所述目标智能合约的依赖关系和/或依赖解除,如果确定交易声明的依赖解除导致交易执行失败,执行惩罚交易发起方的处理流程。

本发明的第三方面,提供了一种电子设备,包括存储器和处理器,所述存储器用于存储计算机指令,所述计算机指令被所述处理器执行以实现如本发明第一方面所述的方法。

本发明的第四方面,提供了一种可读存储介质,其上存储有计算机指令,所述计算机指令被处理器执行时实现本发明第一方面所述的方法。

本发明是一个区块链上智能合约交易执行的方法。在生成区块和验证区块时,该方法根据智能合约和交易本身的依赖关系对待执行的交易进行分桶(交易桶)。不同交易桶中的交易,彼此完全没有依赖关系,也就是说任何两个分属不同交易桶的交易,不会读写相同的“状态”。这样,就可以为每一个交易桶创建一个交易执行线程。同一个交易桶中的交易,由对应的交易执行线程顺次执行,但是分属不同交易桶的交易,由这些交易执行线程并行执行。这里,名词“线程”特指一个(或一组相同的)可供操作系统调度、cpu执行的程序控制流程,在实现中不一定必须对应一个(或一组)操作系统线程或进程。

依赖关系,可以在部署智能合约或提交交易时主动声明、区块链协议栈进行代码分析主动发现、执行交易时被动发现等方式获得和更新。依赖关系的作用范围,可以是合约级、交易级。合约级依赖关系,对面向该智能合约的所有业务交易适用,并记录到“世界状态”中。交易级的依赖关系,只对当前交易适用。交易级的依赖关系,有更高优先级。

一个区块链网络上的智能合约,经常互不依赖。在由配置多核cpu的区块链节点组成的区块链网络上,本发明的并行执行方法能够有效缩短区块生成和验证时交易执行的时间,从而节省整个区块共识全流程的时间,提高整个区块链的性能。

附图说明

附图示出了本发明的示例性实施方式,并与其说明一起用于解释本发明的原理,其中包括了这些附图以提供对本发明的进一步理解,并且附图包括在本说明书中并构成本说明书的一部分。

图1是本发明的交易分桶和并行执行示例。

具体实施方式

下面结合附图和实施方式对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施方式仅用于解释相关内容,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分。

需要说明的是,在不冲突的情况下,本发明中的实施方式及实施方式中的特征可以相互组合。下面将参考附图并结合实施方式来详细说明。

一种区块链协议栈在生成区块时按确定性的顺序,顺次执行即将进入区块的交易,达成新的世界状态并计入新区块;在验证区块时依同样确定性的顺序,顺次执行区块中的交易,达成新的世界状态并与区块中的世界状态声明进行比对。

与上述的区块链协议栈不同,另一种区块链协议栈“前置”交易(提议)的真正执行,并把状态的读写结果和各个背书节点(endorser)的签名计入真正的交易。在生成和验证区块时,这些交易在排序节点(orderer)和提交节点(committer)的“执行”只是“验证”每个交易内包含的各个背书节点的签名,这个“执行”相对真正的交易执行通常要快。但是,如果一个交易的背书节点很多时,验证这些背书节点的签名也可能费时不菲。

因为在生成区块和验证区块时,交易是顺次执行,为了提高出块和共识速度,每个区块能够包含的交易数量可能非常有限,这严重影响区块链的并发能力等性能。如果是执行逻辑复杂、耗时较长的交易,这个问题就更突出。

本发明实施例提供的并行交易执行方法包括以下三个方面:

1、依赖关系与依赖解除。

本发明在智能合约的部署交易和提交智能合约执行的业务交易中引入两个新的可选的元数据,称为依赖关系(deprel)和依赖解除(deprem)。前者支持一个智能合约(在部署时)或一个业务交易(在提交时)通过显式的设定deprel来声明其依赖关系,后者支持一个智能合约或一个业务交易显式的解除其可可能继承的依赖。

依赖关系(deprel)和依赖解除(deprem)的取值为未设定(“undef”)、不相关(“n/a”),或者是有相关,后者用一组智能合约地址(或用户地址)的列表表示。

如果一个智能合约完全不依赖其他智能合约,或者一个业务交易除了继承目标智能合约的依赖关系之外没有其他依赖,则其deprel值应该设置为不相关(“n/a”)。

如果一个智能合约在部署时没有设定deprel,则区块链协议栈设置其依赖关系为未设定(“undef”)。如果一个业务交易在提交时没有设定deprel而且其目标智能合约的依赖列表为未设定(“undef”),则区块链协议栈设置其依赖列表为未设定(“undef”)。

一个业务交易的有效依赖关系(depeff),是其目标智能合约(或目标用户)的依赖关系和自身依赖关系的并集,但剔除其显式解除的依赖。

比如,如果智能合约a在部署时声明依赖关系(deprel)为“0x1…1”,“0x2…2”,“0x3…3”表明其有三个依赖,其智能合约地址分别为0x1…1和0x2...2和0x3…3。如果目标未智能合约为a的业务交易t在提交时声明其依赖关系(deprel)为“0x4…4”,声明其依赖解除(deprem)为“0x1…1”,则业务交易t的有效依赖关系(depeff)为“0x2…2”,“0x3…3”,“0x4…4”。

2、依赖关系的建立。

如图1所示,一个区块链协议栈会有一个自动或手工的所谓的合约部署模块(图块100),该模块接收并执行部署交易,以完成新智能合约在区块链网络上各个节点的部署。本发明对该模块添加新能力,即收集和发现依赖关系的能力,具体表现为:通过检查部署交易中的依赖关系(deprel)和依赖解除(deprem)设置,同时可选的,如果可能的话,分析新智能合约的代码主动发现依赖关系和依赖解除设置。从两个依赖关系(deprel)的并集,剔除两个依赖解除(deprem)的并集,得到该智能合约的有效依赖关系(depeff)并将其记录进入合约依赖状态库(图1图块101,第a)步)。

同样如图1所示,一个区块链协议栈会有一个所谓的状态收集模块(图块109)来收集交易执行之后形成的新的世界状态。本发明对该模块添加新能力,即分析各个并行执行的交易执行线程(图块106、107、108)完成交易执行之后收集的状态读写操作,判断交易分桶模块(图块102)依赖的有效依赖关系的真实性。如果一个交易依赖了未曾发现的依赖关系,则该交易会失败,同时其目标智能合约的有效依赖关系会相应更新并记录到合约依赖状态库(图块101,第(5)步)。

合约依赖状态库,是一个区块链网络的世界状态的一部分。

3、分桶及并行处理。

本发明在区块生成和验证时,基于各个交易的有效依赖关系对交易分桶,然后实现对无有效依赖关系的交易进行并行处理,以提高区块链的性能。

分桶原则如下:

(1)有效依赖关系为不相关(n/a)的交易,可以单独占桶,以实现最好的并发性能。

(2)有效依赖关系为未设定(“undef”)的交易,为了兼容性,都分配进入同一个交易桶。

(3)每一个独特的有效依赖关系,如果其既非未设定(undef)又非不相关(n/a),则分配一个单独的交易桶。

并发原则如下:

(1)每一个交易桶,对应创建一个交易执行线程(如图块106、107、108所示)。

(2)如果有效依赖关系为不相关(“n/a”)的交易桶过多、或者独特有效依赖关系的数量过多,可以考虑多个交易桶共享一个交易执行线程,以控制并发线程的数量(最大并发线程数量可以设定)。

基于以上的分桶原则,在区块生成和区块验证时,给定一组交易,本发明的并行处理流程如下:

(1)交易分桶模块(图块102)对每一个交易,基于其目标智能合约的地址,查询合约状态依赖库(图块101)得到目标智能合约的有效依赖关系,加上交易本身可能声明的依赖关系,剔除交易本身可能声明的依赖解除,得到该交易的有效依赖关系。

(2)如果该有效依赖关系没有对应的交易桶(如图块103、104、105所示),则创建交易桶。分配该交易到其有效依赖关系对应的交易桶。

(3)每个交易桶对应的并发线程,即交易执行线程(如图块106、107、108所示),按既定顺序依次执行其交易桶中的交易,并记录每个交易的状态读写操作。

(4)状态归集模块(图块109)在各个交易执行线程对其交易桶中的交易完成执行(或时间到)之后,收集各个已完成的交易的状态读写情况。

(5)状态归集模块(图块109)分析每个交易的状态读写用到的实际依赖关系。如果该实际依赖关系与分桶时确定的有效依赖关系不同,即判定为依赖违反,该交易的执行以失败处理。如果该等违反是因为目标智能合约的有效依赖关系有误,则修正该智能合约的有效依赖关系并更新合约依赖状态库。如果该等违反是因为业务交易的发起方施加显式的依赖解除(deprem)造成,则发起方应受相应惩罚,比如罚款、限期或永远拒绝服务等。

在区块生成和验证需要执行一组交易时,本发明基于每个交易的有效依赖关系,将交易分配给并行执行的交易执行线程,实现不相关交易的并行执行的方式,相比本发明之前的顺次执行方式,能够有效降低区块生成和验证时执行交易需要的时间,提高区块链协议栈的并发能力、降低其时延,改善区块链协议栈的整体性能。

应当理解,这里描述的各种技术可结合硬件或软件,或者它们的组合一起实现。从而,本发明的方法和设备,或者本发明的方法和设备的某些方面或部分可采取嵌入有形媒介,例如软盘、cd-rom、硬盘驱动器或者其它任意机器可读的存储介质中的程序代码(即指令)的形式,其中当程序被载入诸如计算机之类的机器,并被该机器执行时,该机器变成实践本发明的设备。

在程序代码在可编程计算机上执行的情况下,计算设备一般包括处理器、处理器可读的存储介质(包括易失性和非易失性存储器和/或存储元件),至少一个输入装置,和至少一个输出装置。其中,存储器被配置用于存储程序代码;处理器被配置用于根据该存储器中存储的该程序代码中的指令,执行本发明的各种方法。

以示例而非限制的方式,计算机可读介质包括计算机存储介质和通信介质。计算机可读介质包括计算机存储介质和通信介质。计算机存储介质存储诸如计算机可读指令、数据结构、程序模块或其它数据等信息。通信介质一般以诸如载波或其它传输机制等已调制数据信号来体现计算机可读指令、数据结构、程序模块或其它数据,并且包括任何信息传递介质。以上的任一种的组合也包括在计算机可读介质的范围之内。

本领域那些技术人员应当理解在本文所发明的示例中的设备的模块或单元或组件可以布置在如该实施例中所描述的设备中,或者可替换地可以定位在与该示例中的设备不同的一个或多个设备中。前述示例中的模块可以组合为一个模块或者此外可以分成多个子模块。

本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中发明的所有特征以及如此发明的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中发明的每个特征可以由提供相同、等同或相似目的的替代特征来代替。

此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。

尽管根据有限数量的实施例描述了本发明,但是受益于上面的描述,本技术领域内的技术人员明白,在由此描述的本发明的范围内,可以设想其它实施例。此外,应当注意,本说明书中使用的语言主要是为了可读性和教导的目的而选择的,而不是为了解释或者限定本发明的主题而选择的。因此,在不偏离所附权利要求书的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。对于本发明的范围,对本发明所做的发明是说明性的,而非限制性的,本发明的范围由所附权利要求书限定。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1