区块生成及验证的方法、装置、电子设备和可读存储介质与流程

文档序号:24289812发布日期:2021-03-17 00:38阅读:61来源:国知局
区块生成及验证的方法、装置、电子设备和可读存储介质与流程

本发明涉及区块链技术领域,尤其是区块组成、区块生成和区块验证技术领域。



背景技术:

无论基于什么共识算法,一个区块链网络上的区块生成节点在生成区块时,会从执行上一区块中的交易达成的世界状态开始,从等待交易队列中选择一批待执行交易予以执行,然后把这些交易、执行这些交易达成的新的世界状态(或其哈希值),上一个区块的哈希值,连同其他必要信息,生成新的区块并把该区块发送给区块链网络上的其他节点,进而对该区块完成显式或隐式的共识。

一个区块链网络上的区块验证节点在收到一个新区块时,会初步验证区块和其中的交易的有效性,然后从执行上一区块中的交易达成的世界状态开始,执行区块中包含的所有交易并达成的新的世界状态(或其哈希值),然后与区块中声称的新的世界状态进行比较。比较成功之后,该区块链节点会依共识流程对该区块完成显式或隐式的共识(即接受或拒绝该区块)。

在区块生成和验证时,执行交易需要的时间在整个区块共识全流程所需总时间中占据很大一部分,尤其是在现实场景中交易通常比较复杂、交易执行比较费时。



技术实现要素:

为了解决上述技术问题中的至少一个,本发明提供了一种区块生成及验证的方法、装置、电子设备和可读存储介质。

本发明的第一方面,提供了一种区块生成方法,包括:

获取一组待执行的交易;所述一组待执行的交易用于生成第一区块;

获取第二区块对应的世界状态;所述第二区块与所述第一区块间隔的区块数为预设值;

生成所述第一区块;所述第一区块包括所述一组待执行的交易和所述第二区块对应的世界状态。

可选地,生成所述第一区块之后,还包括:

从第三区块的世界状态出发,执行所述第一区块包括的所述一组待执行的交易;所述第三区块为所述第一区块的上一个区块;

生成所述第一区块对应的世界状态。

可选地,所述获取第二区块对应的世界状态,包括:

从区块状态队列的队头获取第二区块对应的世界状态;

生成所述第一区块对应的世界状态之后,还包括:

将所述第一区块对应的世界状态提交至所述区块状态队列的队尾。

可选地,生成所述第一区块之后,还包括:

将所述第一区块提交至区块执行队列的队尾;

从第三区块的世界状态出发,执行所述第一区块包括的所述一组待执行的交易之前,还包括:

从所述区块执行队列的队头提取所述第一区块。

可选地,生成所述第一区块之后,还包括:

将所述第一区块传播至区块链的其它节点。

可选地,方法还包括:

创建第一线程和第二线程;

所述第一线程用于获取一组待执行的交易;所述一组待执行的交易用于生成第一区块;获取第二区块对应的世界状态;所述第二区块与所述第一区块间隔的区块数为预设值;生成所述第一区块;所述第一区块包括所述一组待执行的交易和所述第二区块对应的世界状态;

所述第二线程用于从第三区块的世界状态出发,执行所述第一区块包括的所述一组待执行的交易;所述第三区块为所述第一区块的上一个区块;生成所述第一区块对应的世界状态。

可选地,所述第一线程还用于从区块状态队列的队头获取第二区块对应的世界状态;

所述第二线程还用于将所述第一区块对应的世界状态提交至所述区块状态队列的队尾。

可选地,所述第一线程还用于在生成所述第一区块之后,将所述第一区块提交至区块执行队列的队尾;

所述第二线程还用于从所述区块执行队列的队头提取所述第一区块。

可选地,所述第一线程还用于在生成所述第一区块之后,将所述第一区块传播至区块链的其它节点。

可选地,所述预设值为0或者大于等于1的整数;

当所述第一区块属于区块链的从头开始的所述大于等于1的整数个区块时,所述预设值为0;

当所述第一区块属于区块链的从头开始的所述大于等于1的整数个区块之后的区块时,所述预设值为所述大于等于1的整数。

本发明的第二方面,提供了一种区块验证方法,包括:

接收区块链的其它节点传播的第一区块;

获取第二区块对应的世界状态;所述第二区块与所述第一区块间隔的区块数为预设值;

验证所述第二区块对应的世界状态和所述第一区块包括的世界状态是否一致;如果一致,则验证成功;否则,验证失败。

可选地,所述验证成功之后,还包括:

从第三区块的世界状态出发,执行所述第一区块包括的一组交易;所述第三区块为所述第一区块的上一个区块;

生成所述第一区块对应的世界状态。

可选地,所述获取第二区块对应的世界状态,包括:

从区块状态队列的队头获取第二区块对应的世界状态;

生成所述第一区块对应的世界状态之后,还包括:

将所述第一区块对应的世界状态提交至所述区块状态队列的队尾。

可选地,所述验证成功之后,还包括:

将所述第一区块提交至区块执行队列的队尾;

从第三区块的世界状态出发,执行所述第一区块包括的一组交易之前,还包括:

从所述区块执行队列的队头提取所述第一区块。

可选地,所述验证成功之后,还包括:

将所述第一区块传播至区块链的其它节点。

可选地,方法还包括:

创建第一线程和第二线程;

所述第一线程用于接收区块链的其它节点传播的第一区块;获取第二区块对应的世界状态;所述第二区块与所述第一区块间隔的区块数为预设值;验证所述第二区块对应的世界状态和所述第一区块包括的世界状态是否一致;如果一致,则验证成功;否则,验证失败;

所述第二线程用于在所述第一线程验证成功之后,从第三区块的世界状态出发,执行所述第一区块包括的一组交易;生成所述第一区块对应的世界状态。

可选地,所述第一线程还用于从区块状态队列的队头获取第二区块对应的世界状态;

所述第二线程还用于在生成所述第一区块对应的世界状态之后,将所述第一区块对应的世界状态提交至所述区块状态队列的队尾。

可选地,所述第一线程还用于在验证成功之后,将所述第一区块提交至区块执行队列的队尾;

所述第二线程还用于从所述区块执行队列的队头提取所述第一区块。

可选地,所述第一线程还用于将所述第一区块传播至区块链的其它节点。

可选地,所述预设值为0或者大于等于1的整数;

当所述第一区块属于区块链的从头开始的所述大于等于1的整数个区块时,所述预设值为0;

当所述第一区块属于区块链的从头开始的所述大于等于1的整数个区块之后的区块时,所述预设值为所述大于等于1的整数。

本发明的第三方面,提供了一种区块生成装置,包括区块链生成模块;

所述区块链生成模块包括:

交易选择子模块,用于获取一组待执行的交易;所述一组待执行的交易用于生成第一区块;

世界状态获取子模块,用于获取第二区块对应的世界状态;所述第二区块与所述第一区块间隔的区块数为预设值;

区块生成子模块,用于生成所述第一区块;所述第一区块包括所述一组待执行的交易和所述第二区块对应的世界状态。

可选地,还包括:区块执行模块;

所述区块执行模块包括:

交易执行子模块,用于从第三区块的世界状态出发,执行所述第一区块包括的所述一组待执行的交易;所述第三区块为所述第一区块的上一个区块;

世界状态生成子模块,用于生成所述第一区块对应的世界状态。

可选地,所述区块链生成模块还包括:

区块传播子模块,用于将所述第一区块传播至区块链的其它节点。

本发明的第四方面,提供了一种区块验证装置,包括区块验证模块;

所述区块验证模块包括:

区块接收子模块,用于接收区块链的其它节点传播的第一区块;

世界状态获取子模块,用于获取第二区块对应的世界状态;所述第二区块与所述第一区块间隔的区块数为预设值;

区块验证子模块,用于验证所述第二区块对应的世界状态和所述第一区块包括的世界状态是否一致;如果一致,则验证成功;否则,验证失败。

可选地,还包括区块执行模块;

所述区块执行模块包括:

交易执行子模块,用于从第三区块的世界状态出发,执行所述第一区块包括的一组交易;所述第三区块为所述第一区块的上一个区块;

世界状态生成子模块,用于生成所述第一区块对应的世界状态。

可选地,所述区块验证模块还包括:

区块传播子模块,用于将所述第一区块传播至区块链的其它节点。

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

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

附图说明

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

图1是现有技术的区块链中第x个区块(bx)的组成示例图。

图2是本发明实现的区块链中第x个区块(bx)的组成示例图。

图3是异步、并行的交易执行线程和区块共识线程的交互示意图。

具体实施方式

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

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

区块链技术中最著名的数据结构,应该就是“分布式账本”了。分布式账本,是一个区块列表,其中的每一个区块都包含一组交易、执行完该区块的交易之后达成的世界状态的哈希值、前一区块哈希值等信息。如图1中图块100所示,在本发明之前,第x个区块(即bx)包含以下信息:

(1)前一个区块(即bx-1)的哈希值,用bhx-1表示(图块101);

(2)一个交易列表,其中每个交易均有发起方签名。如tx1(图块102)&txn(图块103);

(3)执行完成bx中的交易之后达成的世界状态的哈希值,用wsx(图块104);

(4)其他与具体的区块链技术相关的信息,如区块签名。

在生成第x个区块,即bx时,一个区块链网络上的区块生成节点,基于执行上一区块中的交易达成的世界状态(wsx-1)开始,首先从等待交易池中选择一组待执行的交易,执行并达成新的世界状态(wsx),然后生成bx,发送其到整个区块链网络并与其他节点一起完成共识流程。

在验证第x个区块,即bx时,一个区块链网络上的区块验证节点,在完成初步的区块正确性校验之后,基于执行上一区块中的交易达成的世界状态(wsx-1)开始,执行区块中的交易,并达成新的世界状态(wsx)并与该区块中声称的世界状态比较。如果一致,再参与完成后续的共识流程。

在区块生成和验证时执行交易需要的时间,占据整个区块链共识流程所需要的时间的相当大一部分,尤其是在现实场景中交易复杂费时以及为了更好的并发和吞吐能力在一个区块里包含很多交易时。交易执行时间对整个区块链性能的影响如此重要,它可能与发送区块到整个区块网络的大部分节点以及达成显式或隐式共识的时间相若,甚至超过后者。

在区块链网络中,最小化区块中的交易的执行时间对共识过程的影响,是一个巨大的挑战。

本发明中,为表述方便,在区块生成和验证中执行区块中所有交易需要的时间,被称为执行时间,用te表示,在共识过程中传播区块到整个区块链网络并达成显式或隐式共识需要的时间被称为共识时间,用tc表示。一个区块,从生成(包括交易执行)、传播、验证(包括交易执行)和共识所需要的时间大致是(2*te+tc)。

在节点计算能力给定的情况下,te和每一个交易执行的时间以及一个区块中包含的交易数量相关,tc与区块链网络的节点数量、连接情况、带宽、延迟,以及共识算法的效率相关。虽然不好明确断言te和tc到底谁大,但是他们都是影响区块链性能的重要时间因素。

本发明创造一种新的区块组成、生成和验证的方法,该方法实现区块的交易执行逻辑和共识逻辑的并行处理(尽管是延迟执行的),做到在共识流程中进行区块生成和验证时世界状态即时可用,无需等待(如果延迟因子d配置适当的话)。这样,整个区块链的性能不但和交易时间复杂度基本无关、区块中包含的交易数量不再受制于交易执行的时间复杂度,而且因为无需等待交易执行,能够大大提高整个区块链的性能。

首先,本发明修改了区块的构成:与本发明之前的区块链中的第x个区块(bx)包含世界状态wsx(执行bx中的交易之后达成的世界状态)不同,本发明实现的区块链中bx包含的是wsx-d(请见图2所示),这里d是延迟因子。区块链账本中最前边的d个区块,特殊设定为d=0。

这个区块构成修改,使得区块交易执行和区块共识可以异步并行进行。如果d选择合适的话,当生成和验证bx时,wsx-d已经就绪,或者至少无需像本发明之前的区块链一样等待te时间完成交易执行。

然后,如图3所示,本发明把区块中的交易执行逻辑从共识过程中的剥离出来,以两个线程实现,一个是区块执行线程(图块300),一个是区块共识线程(图块303)。前者,对每一个区块负责执行区块中的交易达成世界状态。后者负责基于区块执行线程准备就绪的世界状态,生成、传播、验证和共识区块。这里,名词“线程”特指一个(或一组相同的)可供操作系统调度、cpu执行的程序控制流程,在实现中不一定必须对应一个(或一组)操作系统线程或进程。

在区块共识线程中,区块生成节点生成第x个区块即bx的步骤如下:

(0)从本地的等待交易池(图块302)选择一组交易;

(1)从区块状态队列(图块301)立即获取世界状态wsx-d(执行区块bx-d中的交易之后达成的世界状态),连同其他必要处理生成bx;

(2)提交bx到本地的区块执行队列(图块304)的队尾以便区块执行线程(图块300)异步处理;

(3)传播bx到区块链网络并与其他节点一起完成对bx的共识(接受或拒绝)。

在区块共识线程中,区块验证节点验证第x个区块即bx的步骤如下:

(1)从区块状态队列(图块301)立即获取世界状态wsx-d(执行区块bx-d中的交易之后达成的世界状态),并同bx中声称的世界状态比对。如果不一致,验证失败。

(2)提交bx到本地的区块执行队列(图块304)的队尾以便区块执行线程(图块300)异步处理;

(3)传播bx到区块链网络并与其他节点一起完成对bx的共识(接受或拒绝)。

与区块共识线程(图块303)并行,每个区块链节点上的区块执行线程(图块300)对从区块执行队列(图块304)的队头读取的每一个区块bx(第x个区块)进行处理并达成本地的世界状态wsx。处理流程如下:

(b)从区块执行队列(图块304)的队头,读取区块bx;

(b)从区块bx-1的世界状态(即wsx-1)出发,执行bx中的交易,达成本地的世界状态wsx,并提交wsx到区块状态队列(图块301)的队尾。

本发明是一个区块链区块组成和执行(生成及验证)方法,该方法通过延迟、异步预执行区块链交易,确保在区块生成和验证时世界状态已经就绪,从而节省整个区块共识全流程的时间,提高整个区块链的性能。

由于区块共识线程(包括区块生成和验证)和交易执行线程事实上在并行执行、无需互相等待(假定延迟因子d配置合适),本发明能够使得区块链的共识流程明显变“快”,从而提高区块链的整体性能。

采用本发明,在由多核cpu区块链节点组成的区块链网络上,区块生成(包括交易执行)、传播、验证(包括交易执行)和共识需要的时间从本发明之前的大约(2*te+tc)降低到大约max(2*te,tc)。这是非常明显的时间节省。

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

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

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

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

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

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

如在此所使用的那样,除非另行规定,使用序数词“第一”、“第二”、“第三”等等来描述普通对象仅仅表示涉及类似对象的不同实例,并且并不意图暗示这样被描述的对象必须具有时间上、空间上、排序方面或者以任意其它方式的给定顺序。

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

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