掌桥专利:专业的专利平台
掌桥专利
首页

区块链的共识方法、装置、计算机可读介质及电子设备

文献发布时间:2024-04-18 20:01:23


区块链的共识方法、装置、计算机可读介质及电子设备

技术领域

本申请涉及计算机及通信技术领域,具体而言,涉及一种区块链的共识方法、装置、计算机可读介质及电子设备。

背景技术

在区块链技术中,共识机制是保证区块链系统正常运行的基础。所谓共识即是达成一致的意思,区块链系统中的每个节点设备各自存储有一份分布式账本(即区块链),区块链系统的共识过程就是让各个节点设备之间的分布式账本保持一致的过程。在区块链系统中,所有共识节点都是对等的,且都可以打包任意交易信息至待共识的区块中,为了保证不重复打包某些交易信息,相关技术中提出的打包流程通常是在确定前一个区块之后再打包下一个区块,以此将已打包至区块中的交易信息过滤掉,避免对重复的交易信息进行打包。但是,这种串行的打包处理机制导致出块速率较慢,影响了区块链系统的共识性能。

发明内容

本申请的实施例提供了一种区块链的共识方法、装置、计算机可读介质及电子设备,进而可以通过对交易分组避免了对交易信息进行重复打包,并且可以提高区块链的出块速率,有利于提升区块链系统的共识性能。

本申请的其他特性和优点将通过下面的详细描述变得显然,或部分地通过本申请的实践而习得。

根据本申请实施例的一个方面,提供了一种区块链的共识方法,包括:根据区块链网络中的共识节点数量对本地交易池中的交易信息进行分组,得到与所述区块链网络中的各个共识节点相对应的交易分组;根据当前共识节点对应的交易分组生成临时区块;若获取到所述临时区块的前序区块的信息,则根据所述前序区块的信息和所述临时区块生成提案区块;将所述提案区块广播至所述区块链网络中进行共识处理。

根据本申请实施例的一个方面,提供了一种区块链的共识装置,包括:分组单元,配置为根据区块链网络中的共识节点数量对本地交易池中的交易信息进行分组,得到与所述区块链网络中的各个共识节点相对应的交易分组;第一生成单元,配置为根据当前共识节点对应的交易分组生成临时区块;第二生成单元,配置为若获取到所述临时区块的前序区块的信息,则根据所述前序区块的信息和所述临时区块生成提案区块;共识单元,配置为将所述提案区块广播至所述区块链网络中进行共识处理。

在本申请的一些实施例中,基于前述方案,所述分组单元配置为:计算所述本地交易池中的交易信息所对应的交易哈希;根据所述交易哈希与所述共识节点数量进行取余运算,并根据所述取余运算的结果对所述交易信息进行分组。

在本申请的一些实施例中,基于前述方案,所述第一生成单元配置为:在所述当前共识节点作为提案节点之前,根据所述当前共识节点对应的交易分组生成临时区块;所述第二生成单元配置为:在所述当前共识节点接收到其它共识节点发送的所述前序区块时,确定获取到所述临时区块的前序区块的信息。

在本申请的一些实施例中,基于前述方案,所述第二生成单元配置为:若所述当前共识节点作为提案节点时的出块数量为多个,则在所述当前共识节点生成一个提案区块之后,将生成的提案区块作为所述前序区块,并确定获取到所述临时区块的前序区块的信息。

在本申请的一些实施例中,基于前述方案,所述区块链的共识装置还包括:检测单元,配置为在所述本地交易池中,检测其它共识节点对应的交易分组中所包含的交易信息的数量;所述第一生成单元还配置为:若检测到指定共识节点对应的交易分组中所包含的交易信息的数量超过设定阈值,则对所述指定共识节点对应的交易分组中所包含的交易信息进行打包,生成所述临时区块。

在本申请的一些实施例中,基于前述方案,所述第一生成单元对所述指定共识节点对应的交易分组中所包含的交易信息进行打包的过程,包括:从所述指定共识节点对应的交易分组中选择交易信息打包为至少一个临时区块,直至所述指定共识节点对应的交易分组中所包含的交易信息的数量小于所述设定阈值。

在本申请的一些实施例中,基于前述方案,所述第一生成单元对所述指定共识节点对应的交易分组中所包含的交易信息进行打包的过程,包括:从所述指定共识节点对应的交易分组中选择交易信息打包为至少一个临时区块,直至所述指定共识节点对应的交易分组中所包含的交易信息的数量为0。

在本申请的一些实施例中,基于前述方案,所述区块链的共识装置还包括:检测单元,配置为检测其它共识节点广播的提案区块中是否包含有所述当前共识节点所对应交易分组中的交易信息;清除单元,配置为若所述其它共识节点广播的提案区块中包含有所述当前共识节点所对应交易分组中的交易信息,则清除所述当前共识节点生成的所有临时区块。

在本申请的一些实施例中,基于前述方案,所述分组单元还配置为:在清除所述当前共识节点生成的所有临时区块之后,重新对所述当前共识节点的本地交易池中的交易信息进行分组,以使所述第一生成单元根据当前共识节点对应的交易分组生成所述临时区块。

在本申请的一些实施例中,基于前述方案,所述第一生成单元配置为:根据每个区块容纳的交易信息的数量,从所述当前共识节点对应的交易分组中选择相应数量的交易信息进行打包,以生成所述临时区块;其中,所述临时区块中的区块高度字段、区块哈希字段和前序区块哈希字段为空值。

在本申请的一些实施例中,基于前述方案,所述第二生成单元配置为:根据所述前序区块的信息确定所述前序区块哈希值、下一区块的区块高度和所述下一区块的区块哈希值;根据所述前序区块哈希值更新所述临时区块中的前序区块哈希字段、根据所述下一区块的区块高度更新所述临时区块中的区块高度字段,并根据所述下一区块的区块哈希值更新所述临时区块中的区块哈希字段,以生成所述提案区块。

在本申请的一些实施例中,基于前述方案,所述第一生成单元还配置为:在生成所述临时区块之后、且在生成所述提案区块之前,根据区块链账本中记录的交易信息对所述临时区块中包含的交易信息进行验重处理,并对所述临时区块中的交易信息列表进行序列化处理。

根据本申请实施例的一个方面,提供了一种计算机可读介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现如上述实施例中所述的区块链的共识方法。

根据本申请实施例的一个方面,提供了一种电子设备,包括:一个或多个处理器;存储装置,用于存储一个或多个计算机程序,当所述一个或多个计算机程序被所述一个或多个处理器执行时,使得所述电子设备实现如上述实施例中所述的区块链的共识方法。

根据本申请实施例的一个方面,提供了一种计算机程序产品,该计算机程序产品包括计算机程序,该计算机程序存储在计算机可读存储介质中。电子设备的处理器从计算机可读存储介质读取并执行该计算机程序,使得该电子设备执行上述各种可选实施例中提供的区块链的共识方法。

在本申请的一些实施例所提供的技术方案中,通过根据区块链网络中的共识节点数量对本地交易池中的交易信息进行分组,得到与各个共识节点相对应的交易分组,然后根据当前共识节点对应的交易分组生成临时区块,以在获取到临时区块的前序区块的信息之后,根据前序区块的信息和临时区块生成提案区块,使得可以提前对共识节点本地交易池中的交易信息进行分组,且每个共识节点都可以根据分组结果提前对交易信息进行打包,进而可以在通过分组避免对交易信息进行重复打包的前提下,提高了区块链的出块速率,有利于提升区块链系统的共识性能。

应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本申请。

附图说明

图1示出了一种区块链网络的结构示意图;

图2示出了区块链中各区块的连接关系示意图;

图3示出了一种共识算法的流程示意图;

图4示出了交易信息进入区块链网络之后的一种处理流程示意图;

图5示出了交易信息进入区块链网络之后的一种处理流程示意图;

图6示出了可以应用本申请实施例的技术方案的示例性系统架构的示意图;

图7示出了根据本申请的一个实施例的区块链的共识方法的流程图;

图8示出了根据本申请的一个实施例的区块链的共识方法的流程图;

图9示出了根据本申请的一个实施例的区块链的共识装置的框图;

图10示出了适于用来实现本申请实施例的电子设备的计算机系统的结构示意图。

具体实施方式

现在参考附图以更全面的方式描述示例实施方式。然而,示例的实施方式能够以各种形式实施,且不应被理解为仅限于这些范例;相反,提供这些实施方式的目的是使得本申请更加全面和完整,并将示例实施方式的构思全面地传达给本领域的技术人员。

此外,本申请所描述的特征、结构或特性可以以任何合适的方式结合在一个或更多实施例中。在下面的描述中,有许多具体细节从而可以充分理解本申请的实施例。然而,本领域技术人员应意识到,在实施本申请的技术方案时可以不需用到实施例中的所有细节特征,可以省略一个或更多特定细节,或者可以采用其它的方法、元件、装置、步骤等。

附图中所示的方框图仅仅是功能实体,不一定必须与物理上独立的实体相对应。即,可以采用软件形式来实现这些功能实体,或在一个或多个硬件模块或集成电路中实现这些功能实体,或在不同网络和/或处理器装置和/或微控制器装置中实现这些功能实体。

附图中所示的流程图仅是示例性说明,不是必须包括所有的内容和操作/步骤,也不是必须按所描述的顺序执行。例如,有的操作/步骤还可以分解,而有的操作/步骤可以合并或部分合并,因此实际执行的顺序有可能根据实际情况改变。

需要说明的是:在本文中提及的“多个”是指两个或两个以上。“和/或”描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。字符“/”一般表示前后关联对象是一种“或”的关系。

本申请实施例的技术方案涉及区块链技术,具体而言,区块链(Blockchain)是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。区块链本质上是一个去中心化的数据库,是一串使用密码学方法相关联产生的数据块(即区块),每一个数据块中包含了一批次网络交易的信息,用于验证其信息的有效性(防伪)和生成下一个区块。

区块链是由区块链网络中的节点共同维护的。比如,在图1所示的区块链网络中,可以包括多个节点101,多个节点101可以是形成区块链网络的各个客户端。每个节点101在进行正常工作可以接收到输入信息,并基于接收到的输入信息维护该区块链网络内的共享数据。为了保证区块链网络内的信息互通,区块链网络中的每个节点之间可以存在信息连接,节点之间可以通过上述信息连接进行信息传输。例如,当区块链网络中的任意节点接收到输入信息时,区块链网络中的其它节点便根据共识算法获取该输入信息,将该输入信息作为共享数据进行存储,使得区块链网络中全部节点上存储的数据均一致。

对于区块链网络中的每个节点,均具有与其对应的节点标识,而且区块链网络中的每个节点均可以存储有其它节点的节点标识,以便后续根据其它节点的节点标识,将生成的区块广播至区块链网络中的其它节点。每个节点中可维护一个节点标识列表,将节点名称和节点标识对应存储至该节点标识列表中。其中,节点标识可为IP(InternetProtocol,网络之间互联的协议)地址以及其它任一种能够用于标识该节点的信息。

区块链网络中的每个节点均存储一条相同的区块链。区块链由多个区块组成,参见图2所示,区块链由多个区块组成,这些区块按照创建时间戳由小到大的顺序连接成链式结构,每个区块包括区块头和区块主体,区块头中存储有前序区块哈希及本区块的默克尔树(Merkle)根,区块体中包含本区块的完整交易数据,并以Merkle树的形式组织在一起。从区块链的结构可以看出,区块链中每个区块中存储的区块数据均与父区块(即前序区块)中存储的区块数据存在关联,保证了区块中输入信息的安全性。

区块链网络中各个节点可以是服务器,也可以是终端设备。服务器可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计算(Cloud Computing)、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、CDN(Content Delivery Network,内容分发网络)、以及大数据和人工智能平台等基础云计算服务的云服务器。终端设备可以是智能手机、平板电脑、笔记本电脑、台式计算机、智能音箱、智能手表、智能家居、车载终端、飞行器等,但并不局限于此。各个节点之间可以通过有线或无线通信方式进行直接或间接地连接,本申请在此不做限制。

在区块链技术中还有一项关键的技术,即共识机制,共识机制是保证区块链系统正常运行的基础。所谓共识即是达成一致的意思,区块链系统中的每个节点设备各自存储有一份分布式账本(即区块链),区块链系统的共识过程就是让各个节点设备之间的分布式账本保持一致的过程。其中,区块链系统中的全部或部分节点设备可参与到区块链系统的共识过程中,区块链系统的共识过程通常是基于共识算法来实现,参与共识的各个节点设备通过运行共识算法来执行共识过程的相应流程。可选的共识算法比如可以有PoW(Proofof Work,工作量证明机制)、PoS(Proof of Stake,权益证明)、DPoS(Delegated Proof ofStake,委托权益证明)、BFT(Byzantine Fault Tolerance,拜占庭容错系统)、PBFT(Practical Byzantine Fault Tolerance,实用拜占庭容错系统)、TBFT(Tendermint BFT)等。

通常,在区块链的某个区块高度需要进行一轮或多轮共识过程,才能在参与共识的各个节点设备之间达成一致。参与共识的节点称之为共识节点,共识节点间通过特定的共识算法保障整个区块链系统的数据一致性。在区块链中的共识节点中,包含了提案节点和验证节点,提案节点负责提出区块,验证节点需要根据相应的共识算法对提案节点提出的区块进行验证,确保提案节点提出的区块是正确有效的。

区块高度用于表示连接在区块链上的区块数量,区块高度是区块的标志符,可用来指示区块在区块链中的位置,比如区块链中创始区块的区块高度默认为0,创始区块之后的第一个区块的区块高度为1(该第一个区块可以简称为区块1),创始区块之后的第二个区块的区块高度为2(该第二个区块可以简称为区块2),以此类推。

举例来说,某条区块链的当前区块的区块高度为300(简称为区块300),这表示已经有300个区块被堆叠在创始区块之上了,即从创始区块到区块300之间形成的区块链上的区块数量为301个。在区块链的某个区块高度进行的共识过程是指在区块链处于该某个区块高度时,对区块链系统中待上链的区块进行共识的过程,如果该待上链的区块共识成功,则该区块被添加至区块链上,区块链的区块高度则+1。例如:在区块链的区块高度10的共识过程就是指在区块链处于区块高度10时,对区块链系统中待上链的区块进行共识的过程,如果该区块共识成功,则该区块被添加至区块链上而使得区块链的区块高度由10变为11。

通常而言,如图3所示,一轮共识过程按照执行顺序可依次分为三个共识阶段,即提案阶段(proposal阶段)、预投票阶段(prevote阶段)和预提交阶段(precommit阶段)。参与同一轮共识过程的多个节点设备中包括提案节点和非提案节点两种类型。所谓提案节点是指由参与共识的多个节点设备通过选举产生的一个节点设备,作为提案节点的节点设备既负责在本轮共识过程的提案阶段根据请求(request)生成待共识的区块,并将该待共识的区块广播给参与共识的其它节点设备进行共识处理;同时也负责对该待共识的区块进行共识处理。而非提案节点则只对待共识的区块进行共识处理。

共识处理包括预投票处理和预提交处理,预投票处理发生在预投票阶段(prevote阶段),而预提交处理发生在预提交阶段(precommit阶段)。预投票处理是指是否同意对待共识的区块进行预投票的过程,如果同意对待共识的区块进行预投票,表示同意将该区块添加至区块链上。预提交处理是指是否同意对待共识的区块进行预提交的过程,如果同意对待共识的区块进行预提交,表示确认同意将该区块添加至区块链。在同一区块高度进行的多轮共识过程中,对于不同轮次的共识过程,参与共识的节点设备可能会发生变化,即每轮参与共识过程的节点设备可能会发生变化,并且提案节点可能会发生变化,待共识的区块也可能会发生变化。

以下结合图4和图5对交易信息进入区块链网络之后的处理流程进行说明:

如图4所示,客户端产生的交易信息可能被发送到任意一个共识节点,接收到该交易信息的共识节点会将交易信息广播给其它共识节点,各个共识节点在收到交易信息后会将其放入本地交易池中。当提案节点发起的提案区块在区块链网络中共识成功且提交到区块链上之后,各个共识节点会将已提交区块中的交易信息从自己的本地交易池中删除,之后由提案节点从本地交易池中取出交易信息再次打包成新区块在区块链网络中进行共识处理。

共识节点在接收到交易信息之后,之所以要将交易信息广播给区块链网络中的其它共识节点,一方面是如果收到交易信息的共识节点出现故障未能将交易信息打包到区块中,那么其它共识节点还可以处理这个交易信息;另一方面也可以使其它的共识节点对接收到的交易信息进行排序,确保先收到的交易信息能够尽快得到处理。但是,这样一来,不同的共识节点可能会收集到同样的交易信息,那么提案节点在打包区块时就必须等前面的区块确定后才能出新的块,防止不同的共识节点重复打包相同的交易信息。

具体地,比如在图5所示的处理示意图中,交易信息在创建之后会提交到共识节点的交易池中。共识节点在收到交易信息后,会进行交易有效性验证,比如交易信息是否重复、交易信息的签名是否有效等,如果验证通过,那么会将验证通过的交易信息放入本地交易池中,而验证未通过(即无效的交易信息)的交易信息会被拒绝放入交易池中。

同时,接收到交易信息的共识节点会将交易信息广播到其它的共识节点,这样每个共识节点的本地交易池中都存储有相同的交易信息。在共识过程中,提案节点会从本地交易池中取出尚未打包的交易,将其打包到块中,生成新创建的区块,然后将新创新的区块广播到区块链网络中进行共识处理,如果区块共识成功且提交到区块链上,那么可以将共识成功的区块中所包含的交易信息(如图5中所示的交易501)从本地交易池中移除。

通过图4和图5的介绍可知,由于区块链系统中的所有共识节点都是对等的,且都可以打包任意交易信息至待共识的区块中,为了保证不重复打包某些交易信息,通常需要在确定前一个区块之后再打包下一个区块,以此将已打包至区块中的交易信息过滤掉,避免对重复的交易信息进行打包。但是,这种串行的打包处理机制导致出块速率较慢,影响了区块链系统的共识性能。

基于上述技术问题,本申请实施例的技术方案提出了一种新的区块链的共识方案,具体如图6所示,假设区块链网络中包含有4个共识节点(即图6中所示的节点1、节点2、节点3和节点4),对于任意一个共识节点1(此处以节点1为例进行说明),其可以根据区块链网络中的共识节点数量对本地交易池中的交易信息进行分组,得到与各个共识节点相对应的交易分组,比如图6中所示的节点1的交易分组、节点2的交易分组、节点3的交易分组和节点4的交易分组,每个节点对应的交易分组由该节点在作为提案节点时进行打包来生成区块,这样也避免了对相同的交易进行重复打包的问题。

进一步地,节点1可以根据节点1对应的交易分组中所包含的交易信息提前生成临时区块(如图6中所示的临时块N、临时块N+1和临时块N+2),并且也可以对临时区块中包含的交易信息提前进行验重处理,也可以提前进行序列化交易列表处理。如果节点1获取到了前序区块的信息,那么节点1可以根据前序区块的信息和临时区块生成提案区块,然后将生成的提案区块广播至区块链网络中进行共识处理。

比如,在生成临时区块时,临时区块中的区块高度字段、区块哈希字段和前序区块哈希字段为空值。当节点1获取到前序区块的信息之后,可以根据前序区块的信息确定前序区块哈希值、下一区块的区块高度和下一区块的区块哈希值,然后根据前序区块哈希值更新临时区块中的前序区块哈希字段、根据下一区块的区块高度更新临时区块中的区块高度字段,并根据下一区块的区块哈希值更新临时区块中的区块哈希字段,以此来生成提案区块。

可见,本申请实施例的技术方案通过对交易分组避免了对交易信息进行重复打包的问题,并且可以提高区块链的出块速率,有利于提升区块链系统的共识性能。

以下对本申请实施例的技术方案的实现细节进行详细阐述:

图7示出了根据本申请的一个实施例的区块链的共识方法的流程图,该区块链的共识方法可以由区块链网络中的共识节点来执行,该共识节点可以是区块链网络中的任意一个共识节点,也可以是全部共识节点。参照图7所示,该区块链的共识方法至少包括步骤S710至步骤S740,详细介绍如下:

在步骤S710中,根据区块链网络中的共识节点数量对本地交易池中的交易信息进行分组,得到与区块链网络中的各个共识节点相对应的交易分组。

在一些可选的实施例中,对本地交易池中的交易信息进行分组是为了确定各个共识节点作为提案节点时能够打包至区块中的交易信息,各个共识节点通过对本地交易池中的交易信息进行分组,使得各个共识节点都只需关注自己要打包的那部分交易信息,进而可以避免不同的共识节点对相同的交易信息进行重复打包的问题。

在一些可选的实施例中,在对交易信息进行分组时,可以按照交易信息的唯一标识来进行分组,即可以通过交易信息的唯一标识来保证各个共识节点的分组结果是一致的。可选地,该唯一标识可以是交易信息的交易哈希,那么在根据区块链网络中的共识节点数量对本地交易池中的交易信息进行分组时,可以计算本地交易池中的交易信息所对应的交易哈希,然后根据交易哈希与共识节点数量进行取余运算,并根据取余运算的结果对交易信息进行分组。

具体而言,比如区块链网络中有4个共识节点(即节点1、节点2、节点3和节点4),那么可以将某个交易信息的交易哈希对4进行取余运算,然后根据取余运算的结果来对该交易信息进行分组。例如,若取余运算的结果是0,那么将该交易信息分到节点1对应的交易分组中;若取余运算的结果是1,那么将该交易信息分到节点2对应的交易分组中;若取余运算的结果是2,那么将该交易信息分到节点3对应的交易分组中;若取余运算的结果是3,那么将该交易信息分到节点4对应的交易分组中。

在步骤S720中,根据当前共识节点对应的交易分组生成临时区块。

在一些可选的实施例中,当前共识节点即为执行图7所示实施例的技术方案的共识节点。当前共识节点可以提前根据所对应的交易分组来生成临时区块,比如当前共识节点可以在作为提案节点之前,就先根据当前共识节点对应的交易分组生成临时区块,并且还可以根据区块链账本中记录的交易信息对临时区块中包含的交易信息进行验重处理,并对临时区块中的交易信息列表进行序列化处理,这样可以在作为提案节点之前就先进行交易打包、交易验重和交易信息列表序列化处理,进而在成为提案节点之后根据临时区块迅速生成提案区块,极大缩短了出块时间,提高了出块效率。

在步骤S730中,若获取到临时区块的前序区块的信息,则根据前序区块的信息和临时区块生成提案区块。

在一些可选的实施例中,当前共识节点在接收到其它共识节点发送的前序区块时,就可以确定获取到了临时区块的前序区块的信息。具体而言,如果其它共识节点发起了针对某个待共识区块的共识处理过程,那么在当前共识节点接收到该待共识区块之后,如果当前共识节点是下一轮共识过程中的提案节点,那么就可以将该待共识区块作为前序区块,进而可以根据前序区块的信息和当前共识节点提前生成的临时区块来生成提案区块,这样可以在当前共识节点成为提案节点之前就先生成了提案区块,进而可以提高区块链系统的出库效率。

在一些可选的实施例中,如果当前共识节点作为提案节点时的出块数量为多个,则在当前共识节点生成一个提案区块之后,将生成的提案区块作为前序区块,并确定获取到临时区块的前序区块的信息。具体而言,如果当前共识节点在作为提案节点时的出块数量为3个,那么当提案节点在生成第一个提案区块之后,那么就可以将这个提案区块作为前序区块,进而可以根据该前序区块的信息和预先生成的临时区块来生成下一个提案区块;类似地,当提案节点在生成第二个提案区块之后,那么就可以将这第二个提案区块作为前序区块,进而可以根据该前序区块的信息和预先生成的临时区块来生成再下一个提案区块。

在本申请的一个实施例中,由于临时区块是预先生成的,因此区块高度等信息并不确定,因此在生成临时区块时,可以根据每个区块容纳的交易信息的数量,从当前共识节点对应的交易分组中选择相应数量的交易信息进行打包,以生成临时区块。在这种情况下,临时区块中的区块高度字段、区块哈希字段和前序区块哈希字段为空值。

基于此,在获得了前序区块的信息之后,可以根据前序区块的信息来补全临时区块中的信息,以此生成提案区块。具体而言,可以根据前序区块的信息确定前序区块哈希值、下一区块的区块高度和下一区块的区块哈希值,然后根据前序区块哈希值更新临时区块中的前序区块哈希字段、根据下一区块的区块高度更新临时区块中的区块高度字段,并根据下一区块的区块哈希值更新临时区块中的区块哈希字段,以生成提案区块。

在步骤S740中,将提案区块广播至区块链网络中进行共识处理。

在一些可选的实施例中,当提案区块被广播至区块链网络中之后,可以参照前述实施例中所提到的共识过程来进行共识处理,比如一个共识过程可以包括提案阶段、预投票阶段和预提交阶段,一个提案区块经过这些过程之后被提交到区块链中。

图7所示实施例的技术方案可以提前对共识节点本地交易池中的交易信息进行分组,且每个共识节点都可以根据分组结果提前对交易信息进行打包,进而可以在通过分组避免对交易信息进行重复打包的前提下,提高了区块链的出块速率,有利于提升区块链系统的共识性能。

图8示出了根据本申请的一个实施例的区块链的共识方法的流程图,该区块链的共识方法可以由区块链网络中的共识节点来执行,该共识节点可以是区块链网络中的任意一个共识节点,也可以是全部共识节点。参照图8所示,该区块链的共识方法在包括图7中所示的步骤S710至步骤S740之外,还可以包括步骤S810至步骤S830,详细介绍如下:

步骤S810,在本地交易池中,检测其它共识节点对应的交易分组中所包含的交易信息的数量。

在一些可选的实施例中,由于本地交易池中的交易信息会根据提案区块是否上链来进行清理,比如如果某个提案区块上链成功,那么该提案区块所包含的交易信息会从本地交易池中删除。因此,如果在本地交易池中,某个共识节点对应的交易分组中所包含的交易信息的数量比较多,那么说明这个共识节点对应的交易分组中的交易信息可能并没有被共识成功,一个主要原因可能是由于该共识节点出现了异常(比如宕机、网络断线等)而没有生成提案区块进行共识。因此在本申请的实施例中,可以通过检测其它共识节点对应的交易分组中所包含的交易信息的数量来确定其它共识节点是否异常。

步骤S820,判断指定共识节点对应的交易分组中所包含的交易信息的数量是否超过设定阈值,若是,则执行步骤S830。

可选地,如果指定共识节点对应的交易分组中所包含的交易信息的数量没有超过设定阈值,那么说明指定共识节点是正常的,进而指定共识节点执行图7所示的流程即可。

步骤S830,若检测到指定共识节点对应的交易分组中所包含的交易信息的数量超过设定阈值,则对指定共识节点对应的交易分组中所包含的交易信息进行打包,生成临时区块。

如前所述,如果指定共识节点对应的交易分组中所包含的交易信息的数量超过设定阈值,那么说明指定共识节点对应的交易分组中的交易信息可能并没有被共识成功,即指定共识节点可能出现了异常(比如宕机、网络断线等)。在这种情况,当前共识节点可以对指定共识节点对应的交易分组中所包含的交易信息进行打包来生成临时区块,以避免由于指定共识节点异常导致指定共识节点对应的交易分组中所包含的交易信息长时间不能上链处理。

在一些可选的实施例中,当前共识节点对指定共识节点对应的交易分组中所包含的交易信息进行打包的过程可以是:从指定共识节点对应的交易分组中选择交易信息打包为至少一个临时区块,直至指定共识节点对应的交易分组中所包含的交易信息的数量小于设定阈值。比如,指定共识节点对应的交易分组中包含有60条交易信息,而一个区块容纳的交易信息数量为20个,设定阈值为50个,那么可以从该指定共识节点对应的交易分组中选择出20个交易信息生成1个临时区块,此时该指定共识节点对应的交易分组中的交易信息数量小于了设定阈值50。

在一些可选的实施例中,当前共识节点对指定共识节点对应的交易分组中所包含的交易信息进行打包的过程可以是:从指定共识节点对应的交易分组中选择交易信息打包为至少一个临时区块,直至指定共识节点对应的交易分组中所包含的交易信息的数量为0。比如,指定共识节点对应的交易分组中包含有60条交易信息,而一个区块容纳的交易信息数量为20个,设定阈值为50个,那么可以从该指定共识节点对应的交易分组中分别选择出20个交易信息来生成3个临时区块,此时该指定共识节点对应的交易分组中的交易信息数量为0。该实施例的技术方案可以确保对该指定共识节点对应的交易分组中的交易信息及时进行共识处理,避免延误了交易信息的共识处理时机。

需要说明的是,在执行步骤S830之后,可以跳转到步骤S730,即对于已经生成的临时区块,如果获取到临时区块的前序区块的信息,则根据前序区块的信息和临时区块生成提案区块,进而对提案区块进行共识处理。

在本申请的一个实施例中,当前共识节点还可以检测其它共识节点广播的提案区块中是否包含有当前共识节点所对应交易分组中的交易信息,如果其它共识节点广播的提案区块中包含有当前共识节点所对应交易分组中的交易信息,则清除当前共识节点生成的所有临时区块。具体而言,如果其它共识节点广播的提案区块中包含有当前共识节点所对应交易分组中的交易信息,那么说明当前共识节点所对应的交易分组中的交易信息可能被其它共识节点打包处理了,在这种情况下,当前共识节点所对应的交易分组中的交易信息已经不准确了,为了避免对重复的交易信息进行打包,可以清除当前共识节点生成的所有临时区块。

在一些可选的实施例中,当前共识节点在清除当前共识节点生成的所有临时区块之后,可以重新对当前共识节点的本地交易池中的交易信息进行分组,并根据当前共识节点对应的交易分组生成临时区块,即重新执行图7所示的流程。

可见,本申请实施例的技术方案使得共识节点可以提前并行打包交易信息,并且可以提前进行交易重复性验证、交易列表序列化等工作,从而将相关技术中的串行打包流程优化为半并行打包流程,大大提升了区块链系统的共识性能。

在一个具体的应用场景中,当客户端产生一系列交易信息之后,可以提交到区块链的共识节点中,区块键共识节点收到交易信息后,进行交易有效性验证,如交易信息是否重复、签名是否有效等,验证通过的交易信息将放入交易池中,无效交易会被拒绝。

然后,交易池中的交易信息会根据交易hash分配到不同的交易分组,具体可以是计算每个交易信息的交易hash,然后计算交易分组,即组号=交易hash%节点数;然后将分组号与节点编号一一对应起来。

进一步地,共识节点预先将逻辑上归属于本节点的交易打包为临时区块,并提前进行序列化处理。具体地,本节点默认在生成区块时只打包本交易组的交易信息,共识节点可以根据交易数量,提前打包好多个区块(区块高度、区块hash、前序区块哈希preHash可以暂时设置为空值,仅在确定前序区块之后再根据前序区块设置这些值),同时提前与区块链账本层交互进行交易验重操作,及提前进行序列化交易列表操作。由于交易验重操作会涉及多次数据库查询导致消耗不少时间,而当交易信息较多时序列化交易列表也比较耗时,因此提前进行这两项有利于节省时间,提升系统性能。

在本申请的一个实施例中,如果共识节点只打包逻辑上属于自己分组的交易信息,那么当某些共识节点出现故障不再出块时,落于故障节点对应分组的交易信息将可能长久得不到处理。为了解决该问题,共识节点可以检查其它逻辑组的交易数量,如果交易数量大于阀值(可根据实际需要进行配置),则可以打包部分属于其它节点分组的交易信息。可选地,在打包属于其它节点分组的交易信息时,可以确保打包的临时区块中的交易信息仅来自于同一个逻辑组,即打包的临时区块中的交易信息都来自于同一个节点分组。

在本申请的一个实施例中,当共识节点收到其它节点出的块时,如果发现其它节点打包了逻辑上属于自己分组的交易信息,那么可以清除原来预先打包的所有临时区块,这是由于逻辑上属于当前共识节点的部分交易已被其它节点打包了,所以当前共识节点打包的临时区块中的部分交易信息可能已经出块了,这就导致临时区块可能已经失效。而当异常节点恢复正常,变换为出块节点时,可以重新进行交易逻辑分组,这样能保证交易不会重复打包。

在生成临时区块之后,等到提案阶段可以将已打包的临时区块的信息补充完整,然后广播到区块链中进行共识处理,在共识完成之后,提交区块上链,并将提交上链的区块从临时区块列表中清除,同时也将提交上链的区块中所包含的交易信息从本地交易池中删除。

综上,本申请实施例的技术方案可以提前对共识节点本地交易池中的交易信息进行分组,且每个共识节点都可以根据分组结果提前对交易信息进行打包,进而可以在通过分组避免对交易信息进行重复打包的前提下,提高了区块链的出块速率,有利于提升区块链系统的共识性能。

以下介绍本申请的装置实施例,可以用于执行本申请上述实施例中的区块链的共识方法。对于本申请装置实施例中未披露的细节,请参照本申请上述的区块链的共识方法的实施例。

图9示出了根据本申请的一个实施例的区块链的共识装置的框图。

参照图9所示,根据本申请的一个实施例的区块链的共识装置900,包括:分组单元902、第一生成单元904、第二生成单元906和共识单元908。

其中,分组单元902配置为根据区块链网络中的共识节点数量对本地交易池中的交易信息进行分组,得到与所述区块链网络中的各个共识节点相对应的交易分组;第一生成单元904配置为根据当前共识节点对应的交易分组生成临时区块;第二生成单元906配置为若获取到所述临时区块的前序区块的信息,则根据所述前序区块的信息和所述临时区块生成提案区块;共识单元908配置为将所述提案区块广播至所述区块链网络中进行共识处理。

在本申请的一些实施例中,基于前述方案,所述分组单元902配置为:计算所述本地交易池中的交易信息所对应的交易哈希;根据所述交易哈希与所述共识节点数量进行取余运算,并根据所述取余运算的结果对所述交易信息进行分组。

在本申请的一些实施例中,基于前述方案,所述第一生成单元904配置为:在所述当前共识节点作为提案节点之前,根据所述当前共识节点对应的交易分组生成临时区块;所述第二生成单元906配置为:在所述当前共识节点接收到其它共识节点发送的所述前序区块时,确定获取到所述临时区块的前序区块的信息。

在本申请的一些实施例中,基于前述方案,所述第二生成单元906配置为:若所述当前共识节点作为提案节点时的出块数量为多个,则在所述当前共识节点生成一个提案区块之后,将生成的提案区块作为所述前序区块,并确定获取到所述临时区块的前序区块的信息。

在本申请的一些实施例中,基于前述方案,所述区块链的共识装置900还包括:检测单元,配置为在所述本地交易池中,检测其它共识节点对应的交易分组中所包含的交易信息的数量;所述第一生成单元904还配置为:若检测到指定共识节点对应的交易分组中所包含的交易信息的数量超过设定阈值,则对所述指定共识节点对应的交易分组中所包含的交易信息进行打包,生成所述临时区块。

在本申请的一些实施例中,基于前述方案,所述第一生成单元904对所述指定共识节点对应的交易分组中所包含的交易信息进行打包的过程,包括:从所述指定共识节点对应的交易分组中选择交易信息打包为至少一个临时区块,直至所述指定共识节点对应的交易分组中所包含的交易信息的数量小于所述设定阈值。

在本申请的一些实施例中,基于前述方案,所述第一生成单元904对所述指定共识节点对应的交易分组中所包含的交易信息进行打包的过程,包括:从所述指定共识节点对应的交易分组中选择交易信息打包为至少一个临时区块,直至所述指定共识节点对应的交易分组中所包含的交易信息的数量为0。

在本申请的一些实施例中,基于前述方案,所述区块链的共识装置900还包括:检测单元,配置为检测其它共识节点广播的提案区块中是否包含有所述当前共识节点所对应交易分组中的交易信息;清除单元,配置为若所述其它共识节点广播的提案区块中包含有所述当前共识节点所对应交易分组中的交易信息,则清除所述当前共识节点生成的所有临时区块。

在本申请的一些实施例中,基于前述方案,所述分组单元902还配置为:在清除所述当前共识节点生成的所有临时区块之后,重新对所述当前共识节点的本地交易池中的交易信息进行分组,以使所述第一生成单元904根据当前共识节点对应的交易分组生成所述临时区块。

在本申请的一些实施例中,基于前述方案,所述第一生成单元904配置为:根据每个区块容纳的交易信息的数量,从所述当前共识节点对应的交易分组中选择相应数量的交易信息进行打包,以生成所述临时区块;其中,所述临时区块中的区块高度字段、区块哈希字段和前序区块哈希字段为空值。

在本申请的一些实施例中,基于前述方案,所述第二生成单元906配置为:根据所述前序区块的信息确定所述前序区块哈希值、下一区块的区块高度和所述下一区块的区块哈希值;根据所述前序区块哈希值更新所述临时区块中的前序区块哈希字段、根据所述下一区块的区块高度更新所述临时区块中的区块高度字段,并根据所述下一区块的区块哈希值更新所述临时区块中的区块哈希字段,以生成所述提案区块。

在本申请的一些实施例中,基于前述方案,所述第一生成单元904还配置为:在生成所述临时区块之后、且在生成所述提案区块之前,根据区块链账本中记录的交易信息对所述临时区块中包含的交易信息进行验重处理,并对所述临时区块中的交易信息列表进行序列化处理。

图10示出了适于用来实现本申请实施例的电子设备的计算机系统的结构示意图。

需要说明的是,图10示出的电子设备的计算机系统1000仅是一个示例,不应对本申请实施例的功能和使用范围带来任何限制。

如图10所示,计算机系统1000包括中央处理单元(Central Processing Unit,CPU)1001,其可以根据存储在只读存储器(Read-Only Memory,ROM)1002中的程序或者从存储部分1008加载到随机访问存储器(Random Access Memory,RAM)1003中的程序而执行各种适当的动作和处理,例如执行上述实施例中所述的方法。在RAM 1003中,还存储有系统操作所需的各种程序和数据。CPU 1001、ROM 1002以及RAM 1003通过总线1004彼此相连。输入/输出(Input/Output,I/O)接口1005也连接至总线1004。

以下部件连接至I/O接口1005:包括键盘、鼠标等的输入部分1006;包括诸如阴极射线管(Cathode Ray Tube,CRT)、液晶显示器(Liquid Crystal Display,LCD)等以及扬声器等的输出部分1007;包括硬盘等的存储部分1008;以及包括诸如LAN(Local AreaNetwork,局域网)卡、调制解调器等的网络接口卡的通信部分1009。通信部分1009经由诸如因特网的网络执行通信处理。驱动器1010也根据需要连接至I/O接口1005。可拆卸介质1011,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器1010上,以便于从其上读出的计算机程序根据需要被安装入存储部分1008。

特别地,根据本申请的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本申请的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的计算机程序。在这样的实施例中,该计算机程序可以通过通信部分1009从网络上被下载和安装,和/或从可拆卸介质1011被安装。在该计算机程序被中央处理单元(CPU)1001执行时,执行本申请的系统中限定的各种功能。

需要说明的是,本申请实施例所示的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(Erasable Programmable Read Only Memory,EPROM)、闪存、光纤、便携式紧凑磁盘只读存储器(Compact Disc Read-Only Memory,CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本申请中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本申请中,计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的计算机程序。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的计算机程序可以用任何适当的介质传输,包括但不限于:无线、有线等等,或者上述的任意合适的组合。

附图中的流程图和框图,图示了按照本申请各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。其中,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机程序的组合来实现。

描述于本申请实施例中所涉及到的单元可以通过软件的方式实现,也可以通过硬件的方式来实现,所描述的单元也可以设置在处理器中。其中,这些单元的名称在某种情况下并不构成对该单元本身的限定。

作为另一方面,本申请还提供了一种计算机可读介质,该计算机可读介质可以是上述实施例中描述的电子设备中所包含的;也可以是单独存在,而未装配入该电子设备中。上述计算机可读介质承载有一个或者多个计算机程序,当上述一个或者多个计算机程序被一个该电子设备执行时,使得该电子设备实现上述实施例中所述的方法。

应当注意,尽管在上文详细描述中提及了用于动作执行的设备的若干模块或者单元,但是这种划分并非强制性的。实际上,根据本申请的实施方式,上文描述的两个或更多模块或者单元的特征和功能可以在一个模块或者单元中具体化。反之,上文描述的一个模块或者单元的特征和功能可以进一步划分为由多个模块或者单元来具体化。

通过以上的实施方式的描述,本领域的技术人员易于理解,这里描述的示例实施方式可以通过软件实现,也可以通过软件结合必要的硬件的方式来实现。因此,根据本申请实施方式的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个非易失性存储介质(可以是CD-ROM,U盘,移动硬盘等)中或网络上,包括若干指令以使得一台计算设备(可以是个人计算机、服务器、触控终端、或者网络设备等)执行根据本申请实施方式的方法。

本领域技术人员在考虑说明书及实践这里公开的实施方式后,将容易想到本申请的其它实施方案。本申请旨在涵盖本申请的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本申请的一般性原理并包括本申请未公开的本技术领域中的公知常识或惯用技术手段。

应当理解的是,本申请并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本申请的范围仅由所附的权利要求来限制。

相关技术
  • 双接收端功率可配置的非接触式供电系统及功率配置方法
  • 一种发射功率配置、随机接入功率控制方法、装置和设备
  • 一种充电功率可配置的多口快充适配器及其配置方法
  • 充电功率可配置的多口快充适配器
技术分类

06120116550933