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

区块链系统的共识投票处理方法、装置、设备以及介质

文献发布时间:2023-06-19 19:30:30


区块链系统的共识投票处理方法、装置、设备以及介质

技术领域

本申请涉及网络媒体技术领域,尤其涉及一种区块链系统的共识投票处理方法、装置、设备以及介质。

背景技术

区块链系统是一个分布式的系统,共识机制是保证区块链系统正常运行的基础。区块链系统中的共识可以理解为达成一致的意思,区块链系统中的每个节点设备各自存储有一份分布式账本(即区块链);区块链系统的过程久石让各个节点设备之间的分布式账本保持一致的过程。

区块链系统的共识过程通常是基于共识算法来实现的,如可以通过BFT(Byzantine Fault Tolerance,拜占庭容错)算法进行共识,该算法的每轮共识都是基于单个区块进行投票,即区块链系统中每生成一个新区块,都需要区块链系统中的节点设备对其进行投票,且每个参与区块共识的节点设备均需要将投票信息广播给其余节点设备,只有该区块高度的区块达成共识后,才能进入下一轮共识过程,造成区块链系统中的共识效率过低。

发明内容

本申请实施例提供一种区块链系统的共识投票处理方法、装置、设备以及介质,可以提高区块链系统的共识效率。

本申请实施例一方面提供了一种区块链系统的共识投票处理方法,该方法由区块链系统中的目标节点设备执行,包括:

在区块链系统的共识周期中,接收待共识区块i的预投票信息;待共识区块i属于目标节点设备对应的待共识区块链,待共识区块链是由目标节点设备所接收到的N个待共识区块确定的,i和N均为正整数且i小于或等于N;

若目标节点设备的投票映射表中不包含待共识区块i的预投票信息,则根据待共识区块i与投票映射表中的预投票信息所属的待共识区块,在待共识区块链中的链式位置关系,确定待共识区块i在投票映射表中的插入位置;投票映射表包括目标节点设备所接收到的预投票信息;

在投票映射表中的插入位置,添加待共识区块i的预投票信息,得到更新后的投票映射表;

根据更新后的投票映射表,对N个待共识区块分别对应的预投票数进行更新,得到N个待共识区块分别对应的目标预投票数,根据目标预投票数,确定N个待共识区块在共识周期中达成共识的目标区块。

本申请实施例一方面提供了一种区块链系统的共识投票处理装置,该装置应用于区块链系统中的目标节点设备,包括:

接收模块,用于在区块链系统的共识周期中,接收待共识区块i的预投票信息;待共识区块i属于目标节点设备对应的待共识区块链,待共识区块链是由目标节点设备所接收到的N个待共识区块确定的,i和N均为正整数且i小于或等于N;

位置确定模块,用于若目标节点设备的投票映射表中不包含待共识区块i的预投票信息,则根据待共识区块i与投票映射表中的预投票信息所属的待共识区块,在待共识区块链中的链式位置关系,确定待共识区块i在投票映射表中的插入位置;投票映射表包括目标节点设备所接收到的预投票信息;

添加模块,用于在投票映射表中的插入位置,添加待共识区块i的预投票信息,得到更新后的投票映射表;

投票统计模块,用于根据更新后的投票映射表,对N个待共识区块分别对应的预投票数进行更新,得到N个待共识区块分别对应的目标预投票数,根据目标预投票数,确定N个待共识区块在共识周期中达成共识的目标区块。

其中,共识周期包括提案阶段;

该装置还包括:

区块获取模块,用于获取共识周期的提案阶段中所创建的N个待共识区块,获取N个待共识区块分别包含的当前区块哈希和前继区块哈希;

区块串连模块,用于当N个待共识区块中的待共识区块j所包含的前继区块哈希为待共识区块i所包含的当前区块哈希时,对待共识区块i和待共识区块j进行串连,生成包含N个待共识区块的待共识区块链;j为小于或等于N的正整数。

其中,位置确定模块包括:

投票区块集合确定单元,用于若目标节点设备的投票映射表中不包含待共识区块i的预投票信息,则将投票映射表中的预投票信息所属的待共识区块确定为投票区块集合;

区块排序单元,用于获取待共识区块i对应的区块高度H,按照投票区块集合中的区块高度的降序排列顺序,对投票区块集合中的待共识区块进行遍历;H为正整数;

第一位置确定单元,用于当投票区块集合中包含区块高度大于区块高度H的待共识区块时,根据投票区块集合中所包含的区块高度大于区块高度H的待共识区块,确定待共识区块i在投票映射表中的插入位置;

第二位置确定单元,用于当投票区块集合中不包含区块高度大于区块高度H的待共识区块时,将投票映射表的末尾位置,确定为待共识区块i在投票映射表中的插入位置。

其中,第一位置确定单元具体用于:

当投票区块集合中包含区块高度大于区块高度H的待共识区块时,在投票区块集合中获取区块高度小于区块高度H的待共识区块k,以及区块高度大于区块高度H的待共识区块j;待共识区块k和待共识区块j在投票区块集合中具有相邻的排列顺序,j和k均为小于或等于N的正整数;

在投票映射表中,将待共识区块k与待共识区块j之间的位置,确定为待共识区块i对应的插入位置。

其中,添加模块包括:

第一集合创建单元,用于当插入位置为待共识区块k和待共识区块j之间的位置时,为待共识区块i创建前序区块集合和后序区块集合,将待共识区块k添加至待共识区块i的前序区块集合,将待共识区块j添加至待共识区块i的后序区块集合;

第一键值对构建单元,用于将待共识区块i的当前区块哈希作为关键字,将待共识区块i的前序区块集合、待共识区块i的后序区块集合,以及待共识区块i的预投票信息作为数值结果;

第一映射表更新单元,用于根据关键字和数值结果,确定待共识区块i对应的投票映射数据,在投票映射表的插入位置添加投票映射数据,得到更新后的投票映射表;更新后的投票映射表中的待共识区块k的后序区块集合包括待共识区块i,且待共识区块j的前序区块集合包括待共识区块i。

其中,添加模块包括:

第二集合创建单元,用于当插入位置为投票映射表的末尾位置时,为待共识区块i创建前序区块集合和后序区块集合,将投票区块集合中具有最大区块高度的待共识区块添加至待共识区块i的前序区块集合,确定待共识区块i的后序区块集合为空;

第二键值对构建单元,用于将待共识区块i的当前区块哈希作为关键字,将待共识区块i的前序区块集合、待共识区块i的后序区块集合,以及待共识区块i的预投票信息作为数值结果;

第二映射表更新单元,用于根据关键字和数值结果,确定待共识区块i对应的投票映射数据,将投票映射数据添加至投票映射表的末位位置,得到更新后的投票映射表;更新后的投票映射表中具有最大区块高度的待共识区块的后序区块集合包括待共识区块i。

其中,该装置还包括:

已记录提示模块,用于若目标节点设备的投票映射表中包含待共识区块i的预投票信息,则生成已记录提示信息;已记录提示信息用于指示投票映射表继续保持不变。

其中,投票统计模块包括:

区块划分单元,用于将更新后的投票映射表中的预投票信息所属的待共识区块确定为第一待共识区块,将N个待共识区块中除第一待共识区块之外的待共识区块确定为第二待共识区块;第一待共识区块包括待共识区块i,第一待共识区块的数量为一个或多个;

预投票数统计单元,用于在更新后的投票映射表中获取每个第一待共识区块分别对应的后序区块集合,根据每个后序区块集合中的区块数量,重新统计每个第一待共识区块分别对应的目标预投票数;

上述预投票数统计单元,还用于将第二待共识区块对应的目标预投票数确定为空数值。

其中,共识周期包括预投票阶段和预提交阶段,目标预投票数为N个待共识区块在预投票阶段所获得的预投票数;

投票统计模块包括:

预提交总数确定单元,用于若N个待共识区块中的待共识区块i在预投票阶段所获得的目标预投票数大于数量阈值,则根据预提交阶段中的预提交信息,确定待共识区块i在预提交阶段所获得的预提交总数;

共识通过单元,用于若待共识区块i在预提交阶段所获得的预提交总数大于提交阈值,则确定待共识区块i在共识周期中达成共识,将待共识区块i确定为目标区块。

其中,该装置还包括:

共识未通过模块,用于若待共识区块i在预提交阶段所获得的预提交总数小于或等于提交阈值,则确定待共识区块i在共识周期中未达成共识。

其中,该装置还包括:

记账模块,用于将目标区块添加至区块链系统中的目标区块链,从待共识区块链中删除目标区块,得到更新后的待共识区块链。

其中,该装置还包括:

候选区块确定模块,用于在更新后的待共识区块链中确定目标节点设备对应的未投票区块集合,在未投票区块集合中,将最大的目标预投票数所对应的待共识区块确定为候选区块;

区块验证模块,用于在共识周期的预投票阶段中,对候选区块进行有效性验证,得到候选区块对应的验证结果;

预投票模块,用于当验证结果为验证通过结果时,对更新后的待共识区块链中,区块高度小于候选区块的区块高度的待共识区块以及候选区块进行投票,生成候选区块对应的预投票信息;

广播模块,用于将候选区块对应的预投票信息广播至区块链系统中除目标节点设备之外的剩余节点设备;剩余节点设备和目标节点设备属于区块链系统中的共识委员会。

本申请实施例一方面提供了一种计算机设备,包括存储器和处理器,存储器与处理器相连,存储器用于存储计算机程序,处理器用于调用计算机程序,以使得该计算机设备执行本申请实施例中上述一方面提供的方法。

本申请实施例一方面提供了一种计算机可读存储介质,计算机可读存储介质中存储有计算机程序,计算机程序适于由处理器加载并执行,以使得具有处理器的计算机设备执行本申请实施例中上述一方面提供的方法。

根据本申请的一个方面,提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行上述一方面提供的方法。

本申请实施例中,目标节点设备可以在区块链系统的共识周期中,接收待共识区块i的预投票信息,该待共识区块i属于目标节点设备对应的待共识区块链,该待共识区块链是由目标节点设备所接收到的N个待共识区块确定的,i和N均为正整数且i小于或等于N;若目标节点设备的投票映射表中不包含待共识区块i的预投票信息,则根据待共识区块i与投票映射表中的预投票信息所属的待共识区块,在待共识区块链中的链式位置关系,确定待共识区块i在投票映射表中的插入位置,该投票映射表包括目标节点设备所接收到的预投票信息;在投票映射表中的插入位置,添加待共识区块i的预投票信息,得到更新后的投票映射表,进而可以根据更新后的投票映射表,统计N各待共识区块分别对应的目标预投票数,该目标预投票数可以用于确定各个待共识区块在共识周期中的共识结果。可见,在区块链系统的共识周期中,可以将区块链式结构特性整合到共识过程中,可以将接收到的待共识区块按照区块的链式结构进行串连,生成待共识区块链;同时可以根据接收到的预投票信息生成投票映射表,根据投票映射表可以统计出预投票所投的待共识区块,即统计出每个待共识区块分别对应的目标预投票数,在确保链的安全性的基础上,可以提高区块链的共识效率。

附图说明

为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1是本申请实施例提供的一种区块链网络的架构示意图;

图2是本申请实施例提供的一种区块链的结构示意图;

图3是本申请实施例提供的一种区块链系统的共识委员会的组成示意图;

图4是本申请实施例提供的一种区块链系统的共识处理示意图;

图5是本申请实施例提供的一种区块链系统的共识投票处理方法的流程示意图;

图6是本申请实施例提供的一种区块链系统的共识投票处理方法的流程示意图;

图7是本申请实施例提供的一种预投票信息的处理流程示意图;

图8是本申请实施例提供的一种区块链系统的共识投票处理装置的结构示意图;

图9是本申请实施例提供的一种计算机设备的结构示意图。

具体实施方式

下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。

本申请实施例中涉及区块链技术。区块链是一套去中心化、具备分布式存储特点的基础架构,具体是一种按照时间顺序将数据区块用类似链表的方式组成的数据结构,能够安全存储有先后关系的、能在系统内进行验证的数据,并以密码学方式保证数据不可篡改和不可伪造。

请参见图1,图1是本申请实施例提供的一种区块链网络的架构示意图。区块链网络可以由多个节点设备组成,本申请对区块链网络中所包含的节点设备的数量不做限定。图1以6个节点设备为例进行说明,区块链网络中的各个节点设备以P2P(Peer-to-Peer,对等式网络)方式组网,节点设备与节点设备之间按照P2P协议相互通信;各个节点设备共同遵循广播机制、共识机制(包括PoW(Proof Of Work,工作量证明)机制、POS(Proof OfStake,权益证明)机制等核心机制),共同保证区块链上的数据的不可篡改、不可伪造性,同时实现区块链的去中心化、去信任化等特性。

其中,区块链网络中的节点设备可以包括但不限于:PC(Personal Computer,个人计算机)、智能手机、平板电脑、笔记本电脑、掌上电脑、移动互联网设备(mobile internetdevice,MID)、可穿戴设备(例如智能手表、智能手环等)以及移动计算机等,还可以为服务器。

区块链网络中的节点设备共同维护的区块链可以由一系列区块构成,区块也可以称为数据块,一个区块被创建后需要在区块链网络中执行共识处理,当该区块共识成功后,该区块才被允许添加到区块链上,区块链中的区块可以按照创建时间戳由小到大的顺序连接成链式结构。区块链是一种分布式账本,区块链上的各个区块内包含的信息数据是该分布式账本的账本数据。

请参见图2,图2是本申请实施例提供的一种区块链的结构示意图。如图2所示,区块M-1、区块M和区块M+1按照顺序连接成链式结构,M为正整数,上述M-1、M以及M+1都可以认为是区块在区块链中的区块高度,区块高度可以用于表示连接在区块链上上网区块数量,区块高度可以认为是区块的标志符,可以用于指示区块在区块链中的位置;区块链中的创世区块的区块高度默认为0,创世区块之后的第一个区块的区块高度为1(第一个区块可以称为区块1),创世区块之后的第二个区块的区块高度为2(第二个区块可以称为区块2),以此类推。其中,区块链中的每个区块都可以分为区块头和区块体两部分,如区块M的区块头可以包含当前区块M的摘要值、前一区块M-1的摘要值以及本区块M的默克尔(Merkle)根,区块M的区块体可以包含当前区块M的完整信息数据;当然,区块体中的完整交易数据可以采用Merkle树的形式组织在一起。

其中,区块体中的信息数据可以是指请求发布至区块链网络中的原始数据,例如可以是借贷数据、交易数据、用户信息等。Merkle树是区块链技术的重要组成部分,区块链中通常不会保存明文的原始数据,原始数据需要被执行散列运算(也可以称为哈希运算),以散列值(或者可以称为哈希值)的方式被存储。默克尔树可以用于将多个原始数据经散列运算形成的散列值按照二叉树结构组织起来,保存在区块的区块体中。区块的区块头中所包含的本区块的摘要值以及前一区块的摘要值可以称为哈希值。

本申请实施例还涉及共识机制。区块链系统是一个分布式的系统,区块链系统可以认为是一个具有多个层级结构的系统,区块链网络可以位于区块链系统中的其中一个层级上,共识机制是区块链系统正常运行的基础。区块链系统中共识可以认为是达成一致的意思,区块链系统中的每个节点设备可以各自存储有一份分布式账本(即区块链),区块链系统的共识过程就是让各个节点设备之间的分布式账本保持一致的过程。区块链系统中的全部或部分节点设备可参与到区块链系统的共识过程中,这些参与共识的节点设备共同组成区块链系统的共识委员会,并且每个参与共识的节点设备均可以作为共识委员会中的成员。

换言之,区块链系统的共识委员会包括参与共识的多个节点设备,而区块链系统的共识过程就是由共识委员会中的节点设备来执行的。区块链系统中的共识过程通常是基于共识算法来实现的,该共识算法可以包括但不限于:PoW、PoS、DPoS(Delegate Proof ofStake,委托权益证明)、PBFT(Practical Byzantine Fault Tolerance,实用拜占庭容错算法)、PBFT(Byzantine Fault Tolerance,拜占庭容错算法)等;共识委员会中的各个节点设备通过运行共识算法来执行共识过程的相应流程。其中,拜占庭容错算法是一类分布式计算领域的容错技术。拜占庭假设是对现实世界的模型化,由于硬件错误、网络拥塞或中断以及遭到恶意攻击等原因,计算机和网络可能出现不可预料的行为。拜占庭容错算法被设计用来处理这些异常行为,并满足所要解决的问题的规范要求。

其中,区块链系统中的所生成的每一个区块,都需要区块链系统的共识委员会中的节点设备来执行共识处理,区块链系统中的一个共识周期按照执行顺序可依次分为三个共识阶段,包括提案阶段、预投票阶段和预提交阶段。共识委员会中参与同一个共识周期的多个节点设备中包括提案节点和非提案节点两种类型。其中,提案节点是指由共识委员会中的多个节点设备通过选举产生的一个节点设备,作为提案节点的节点设备既负责在本次共识周期的提案阶段产生待共识的区块(待共识的区块可以简称为待共识区块),并将该待共识区块广播给共识委员会中的其他节点设备进行共识处理;同时也负责对该待共识区块进行共识处理。而非提案节点则只对待共识区块进行共识处理。

其中,该待共识区块可以是由提案节点创建的新区块,提案节点所生成的新区块在未记入至分布式账本之前都可以称为待共识区块,即待共识区块可以是指还未执行共识处理或正在执行共识处理的区块。共识处理包括预投票处理和预提交处理,预投票处理发生在预投票阶段,而预提交处理发生在预提交阶段。预投票处理是指是否同意对待共识区块进行预投票的过程,如果同意对待共识区块进行预投票,表示同意将该区块添加至区块链(分布式账本,为方便描述,本申请实施例中可以将其称为目标区块链)上。预提交处理是指是否同意对待共识区块进行预提交的过程,如果同意对待共识区块进行预提交,表示确认同意将该区块添加至目标区块链。在不同的共识周期中,参与共识的节点设备可能会发生变化,即每个共识周期的共识委员会的成员可能会发生变化;不同的待共识区块可以由不同的提案节点所创建。

请参见图3,图3是本申请实施例提供的一种区块链系统的共识委员会的组成示意图。如图3所示,区块链系统的共识委员会可以包括节点设备A、节点设备B、节点设备C、节点设备D、节点设备E,在区块链系统的某个共识周期中,当节点设备A为提案节点时,节点设备B、节点设备C、节点设备D、节点设备E为非提案节点。在共识周期的提案阶段,节点设备A(即提案节点)产生待共识区块X,该待共识区块X可以为节点设备A所创建的区块。节点设备A可以将区块X作为即将进行共识的区块,并将区块X广播给节点设备B、节点设备C、节点设备D、节点设备E。

在共识周期的预投票阶段,由于网络故障、设备故障或其他原因,会存在部分节点设备无法在第一时间内接收到节点设备A广播的区块X的情况,例如设节点设备B未在第一时间内接收到节点设备A广播的区块X,节点设备C、节点设备D以及节点设备E均在第一时间内接收到节点设备A广播的区块X;那么在预投票阶段,节点设备A、节点设备C、节点设备D以及节点设备E均可以将区块X作为待共识区块,并对区块X进行预投票处理得到各自的预投票信息;此处的预投票信息中包含被执行预投票处理的区块标识,例如,节点设备C对该区块X进行预投票处理生成该节点设备C的预投票信息,该预投票信息中包括区块X的标识(如区块X的哈希值),且该预投票信息表示节点设备C同意对该区块X进行预投票,即同意将该区块X添加至目标区块链,该区块X获得节点设备C的预投票。可以理解的是,如果未生成节点设备C的预投票信息,表示节点设备C未对区块X进行预投票处理;或者如果节点设备C的预投票信息中未包括区块X的标识,表示节点设备C不同意对该区块X进行预投票,即不同意将该区块X添加至目标区块链上。而节点设备B由于未在第一时间内接到区块X,因此节点设备B未对区块X进行预投票处理。其中,上述第一时间可以根据实际需要进行设定,例如为1分钟、3分钟等等。

节点设备A、节点设备B、节点设备C、节点设备D、节点设备E可以在区块链系统中各自广播自己的预投票信息。共识委员会中的各个节点设备可以接收其余节点设备的预投票信息,并通过接收到的预投票信息可以统计区块X在预投票阶段所获得的预投票数,并确认该预投票数是否超过数量阈值。此处的数量阈值可以根据实际情况设定,例如数量阈值可以为共识委员会中节点设备的数量的50%,或者为共识委员会中节点设备的数量的2/3。例如,假设数量阈值为3,若节点设备C统计区块X在预投票阶段所获得的预投票数为4,确认区块X获得的预投票数超过了数量阈值3。

在共识周期的预提交阶段,节点设备A、节点设备C、节点设备D以及节点设备E在该共识周期中对区块X进行了预投票处理,所以在该共识周期的预提交阶段,可以对该区块X进行预提交处理得到各自的预提交信息,此处的预提交信息中包含被执行预提交处理的区块标识。例如,节点设备C对该区块X进行预提交处理生成节点设备C的预提交信息,该预提交信息中包括区块X的标识,且该预提交信息表示节点设备C同意对该区块X进行预提交,即表示确认同意将该区块X添加至区块链,该区块X获得节点设备C的预提交;可以理解的是,如果未生成节点设备C的预提交信息,表示节点设备C未对区块X进行预提交处理;或者如果节点设备C的预提交信息中未包括区块X的标识,表示节点设备C不同意对该区块X进行预提交,即确认不同意将该区块X添加至区块链上。

节点设备A、节点设备B、节点设备C、节点设备D、节点设备E可以在区块链系统中各自广播自己的预提交信息。共识委员会中的各个节点设备可以接收其余节点设备的预提交信息,并通过接收到的预提交信息可以统计区块X在预提交阶段所获得的预提交数(即预提交总数),并确认该预提交数是否超过提交阈值。此处的提交阈值可以根据实际情况设定,例如提交阈值可以为共识委员会中节点设备的数量的50%,或者为共识委员会中节点设备的数量的2/3。节点设备A、节点设备C、节点设备D、节点设备E均对区块X进行了预提交处理,且节点设备A、节点设备C、节点设备D、节点设备E的预提交信息中都可以包含区块X的标识。例如,假设提交阈值为3,若节点设备C统计区块X在预提交阶段所获得的预提交数为4,确认区块X获得的预提交数超过了数量阈值3,且节点设备C统计区块X在预投票阶段所获得的预投票数同样为4,可以确定该区块X共识成功,可以将区块X添加至目标区块链。若节点设备C统计区块X在预提交阶段所获得的预提交数为3(不超过提交阈值),则可以确定区块X共识不成功。换言之,若区块X所获得的预投票数超过数量阈值,同时所获得的预提交数超过提交阈值,则区块X共识成功,可以被添加至区块链上;否则共识失败,不能被添加至区块链上。

本申请实施例中,为了有效提高区块的共识效率,可以将区块链的链式结构引入到共识处理中,共识委员会中的各个节点设备可以收到一个或多个待共识区块,各个节点设备均可以将收到的待共识区块按照链式结构进行串连,形成待共识区块链,此处的待共识区块链与上述目标区块链具有相同的链式结构,只是待共识区块链中的区块为还未进行共识处理或正在进行共识处理的区块,即上述待共识区块,目标区块链为分布式账本,该目标区块链中的区块为为已经共识成功的区块。当待共识区块链中的区块1共识成功后,可以将区块1添加至目标区块链,并将区块1从待共识区块链中删除。在共识周期的预投票阶段,共识委员会中的各个节点设备不再是对单个待共识区块进行预投票,而是对各自认为有效的最高待共识区块进行预投票,并将预投票信息按照待共识区块链的链式结构特征传递给最高待共识区块的所有前序区块。换言之,本申请实施例中的共识周期仍然可以包括提案阶段、预投票阶段以及预提交阶段,只是在预投票阶段中各个参与共识的阶段设备可以对多个待共识区块(最高待共识区块以及该最高待共识区块的前序区块)进行预投票处理,且得到的预投票信息中可以包括多个待共识区块的标识,如多个区块的区块哈希。共识委员会中的各个节点设备在接收到任意一个待共识区块的预投票信息后,可以基于链式结构递归计算出最高待共识区块以及所有前序区块的预投票数,通过该方式可以保证链的安全性,并提高共识效率。

其中,共识委员会中参与共识的每个节点设备都可以存储有一个待共识区块,由于网络故障、设备故障或其他原因,共识委员会中的各个节点设备所收到的待共识区块可能会存在差异,那么不同的节点设备的待共识区块链也有可能不一致。上述最高待共识区块可以是指每个参与共识的节点设备在各自的待共识区块链中,验证通过的具有最高区块高度的待共识区块,该最高待共识区块的前序区块可以是指待共识区块链中区块高度低于最高待共识区块的区块高度的待共识区块。需要说明的是,待共识区块链中的待共识区块的区块高度可以用于表示待共识区块链中的待共识区块的数量,即待共识区块的区块高度是重新确定的,与目标区块链的区块高度没有关系;例如,待共识区块链中的第一个待共识区块的区块高度为1(第一个待共识区块可以简称为待共识区块1),待共识区块1的区块头中包括目标区块链中的最高区块的区块哈希,待共识区块链中的第二待共识区块的区块高度为2(第二个待共识区块可以简称为待共识区块2),待共识区块2的区块头中包括待共识区块1的区块哈希,以此类推。或者,待共识区块链中的待共识区块的区块高度可以是在基于目标区块链的基础上所确定的临时区块高度,即待共识区块的区块高度是基于目标区块链的区块高度来确定的。例如,目标区块链中的最高区块的区块高度为100(即目标区块链由创世区块和100个区块构成)时,待共识区块链中的待共识区块1的区块高度为101,待共识区块链中的待共识区块2的区块高度为102,并以此类推。

请参见图4,图4是本申请实施例提供的一种区块链系统的共识处理示意图。如图4所示的节点设备1为区块链系统的共识委员会中参与共识的任意一个节点设备,该节点设备1可以维护两个组件,分别为块链式关系组件和有向无环图(Directed Acyclic Graph,DAG)组件;该块链式关系组件可以用于保存该节点设备1所收到的所有待共识区块,且所收到的所有待共识区块按照链式结构串连,即用于存储节点设备1的待共识区块链;有向无环图组件可以包含投票映射表,该投票映射表可以是指预投票信息映射表,投票映射表可以采用键值对的结构,如以区块哈希为关键字,预投票信息为值生成键值对。需要说明的是,节点设备1一开始未收到任何待共识区块时,块链式关系组件中的待共识区块链为空,有向无环图组件中的投票映射表为空。

如图4所示,假设此时节点设备1的块链式关系组件收到了10个待共识区块,分别为区块A、区块B、区块C、区块D、区块E1、区块F1、区块G1、区块E2、区块F2、区块G2,上述10个待共识区块按照链式结构进行串连后可以生成待共识区块链10a,上述10个待共识区块可以在提案阶段所创建的新区块;其中待共识区块链10a从区块D之后出现了分叉,区块E1和区块E2在待共识区块链10a中具有相同的区块高度,同理,区块F1和区块F2在待共识区块链10a中具有相同的区块高度,区块G1和区块G2在待共识区块链10a中具有相同的区块高度。此时节点设备1的有向无环图组件收到了区块B、区块D、区块F1以及区块G2分别对应的预投票信息,根据区块B、区块D、区块F1以及区块G2在待共识区块链10a中的链式位置关系,可以生成投票映射表10b,该投票映射表10b包含区块B、区块D、区块F1以及区块G2分别对应的预投票信息。

当节点设备1接收到区块C的预投票信息时,可以对有向无环图组件的投票映射表10b中的预投票信息进行遍历处理,若投票映射表10b中包含区块C的区块哈希,则表示投票映射表10b中已经记录了区块C的预投票信息,无需进行重复记录。若投票映射表10b中不包含区块C的区块哈希,则表示投票映射表10b中还未记录区块C的预投票信息,可以对投票映射表10b中的区块哈希(关键字)进行遍历处理,对投票映射表10b中的每一个区块哈希,查找该区块哈希所对应的待共识区块的区块高度是否大于区块C的区块高度,区块高度的对比可以通过块链式关系组件中的待共识区块链10a来确定。例如,投票映射表10b中,区块G2、区块F1以及区块D的区块高度均大于区块C的区块高度,区块B的区块高度小于区块C的区块高度,可以确定区块C在投票映射表10b中的位置为区块B和区块D之间,即可以根据区块C的区块哈希以及区块C的预投票信息生成键值对,并将该键值对添加至投票映射表10b,形成新的投票映射表10c,即更新后的投票映射表。

通过投票映射表10c,可以对各个待共识节点的预投票数进行更新,得到最新的预投票数,如此时区块B的预投票数为5,区块C的预投票数为4,区块D的预投票数为3,区块F1的预投票数为1,区块G1的预投票数为1。需要说明的是,在投票映射表中添加了区块C的预投票信息后,实质上只需更新区块C以及投票映射表中区块高度小于区块C的区块高度的区块B的预投票数;如在未添加区块C的预投票信息之前,区块D的预投票数为3,区块F1的预投票数为1,区块G1的预投票数为1,与添加了区块C的预投票信息之后的预投票数是一致的;换言之,添加了新的预投票信息之后只对其本身和区块高度比其小的待共识区块。其中,由于节点设备1还未收到区块A、区块E1、区块E2、区块F2、区块G1的预投票信息,因此无法统计这些区块的预投票数。

进一步地,当某个待共识区块的预投票数大于数量阈值时,节点设备1可以生成该待共识区块在预提交阶段中的预提交信息,该预提交信息表示节点设备1确认将该待共识区块添加至目标区块链。例如,假设数量阈值为4,则节点设备可以确定区块B的预投票数超过了数量阈值,可以生成区块B在预提交阶段中的预提交信息,该预提交信息可以包括区块B的标识(例如,区块B的区块哈希),并将该预提交信息广播给共识委员会中的其余节点设备。本申请实施例中,通过在区块链系统的共识周期中引入区块链的链式结构,通过投票映射表来统计各个待共识区块的预投票数,在保证链的安全性的基础上,可以提高区块链的共识效率。

请参见图5,图5是本申请实施例提供的一种区块链系统的共识投票处理方法的流程示意图。可以理解地,该区块链系统的共识投票处理方法由目标节点设备执行,该目标节点设备可以为区块链系统的共识委员会中的任意一个节点设备;如图5所示,该区块链系统的共识投票处理方法可以包括以下步骤S101-步骤S104:

步骤S101,在区块链系统的共识周期中,接收待共识区块i的预投票信息;待共识区块i属于目标节点设备对应的待共识区块链,待共识区块链是由目标节点设备所接收到的N个待共识区块确定的,i和N均为正整数且i小于或等于N。

具体的,本申请实施例以区块链系统的共识委员会中参与共识处理的各个节点设备在共识周期中所执行的操作是类似的,为便于理解,本申请实施例以共识委员会中的任意一个节点设备为例进行说明,并将该节点设备确定为目标节点设备。在区块链系统的共识周期中,目标节点设备可以收到一个或多个待共识区块,该一个或多个待共识区块可以是指在共识周期的提案阶段中所生成的新区块,区块链系统中所生成的区块在未添加至目标区块链之前都可以称为待共识区块;其中,当目标节点设备为提案节点时,该目标节点设备可以创建待共识区块,当目标节点设备为非提案节点时,该目标节点设备可以接收提案节点所广播的待共识区块。在共识周期的预投票阶段中,目标节点设备可以接收各个待共识区块分别对应的预投票信息,如目标节点设备可以在区块链系统的共识周期中收到N个待共识区块,这N个待共识区块可以按照区块链的链式结构进行串连,形成待共识区块链(例如,上述图4所对应实施例中的待共识区块链10a),目标节点设备可能在不同的时间收到上述N个待共识区块的预投票信息,当目标节点设备接收到待共识区块链中的任意一个待共识区块(例如,待共识区块i)的预投票信息时,需要对该预投票信息进行后续共识处理。其中,i和N均为正整数,且i小于或等于N,如N可以取值为1,2,3,……。

步骤S102,若目标节点设备的投票映射表中不包含待共识区块i的预投票信息,则根据待共识区块i与投票映射表中的预投票信息所属的待共识区块,在待共识区块链中的链式位置关系,确定待共识区块i在投票映射表中的插入位置;投票映射表包括目标节点设备所接收到的预投票信息。

具体的,目标节点设备在接收到待共识区块i的预投票信息后,可以在该目标节点设备的投票映射表中查找是否存在该待共识区块i的预投票信息,若投票映射表中包含待共识区块i的预投票信息,则表明目标节点设备已经收到过待共识区块i的预投票信息,投票映射表中已经记录了该待共识区块i的预投票信息和区块哈希,因此不需要在投票映射表中进行重复记录,可以生成已记录提示信息,该已记录提示信息可以用于指示投票映射表继续保持不变,无需进行更新。若投票映射表中不包含待共识区块i的预投票信息,则表明目标节点设备还未收到过待共识节点i的预投票信息,可以根据待共识区块i和投票映射表中所包含的预投票信息所属的待共识区块,在待共识区块链中的链式位置关系,确定待共识区块i在投票映射表中的插入位置。其中,目标节点设备每接收到一个待共识区块的预投票信息,都可以将其添加到投票映射表中,也就是说,目标节点设备可以根据收到的预投票信息生成投票映射表,并将投票映射表存储在有向无环图组件中,即投票映射表可以包括目标节点设备所接收到的预投票信息。

举例来说,目标节点设备在收到待共识区块i的预投票信息之前,已经收到了待共识区块1、待共识区块2、待共识区块5、待共识区块6的预投票信息,此时目标节点设备的有向无环图组件的投票映射表中包含待共识区块1、待共识区块2、待共识区块5以及待共识区块6分别对应的预投票信息。其中,上述待共识区块1、待共识区块2、待共识区块5、待共识区块6以及待共识区块i均为目标节点设备所收到的待共识区块,即待共识区块1、待共识区块2、待共识区块5、待共识区块6以及待共识区块i均属于块链式关系组件中的待共识区块链。若在目标节点设备的待共识区块链中,待共识区块2的区块高度小于待共识区块i的区块高度,待共识区块5的区块高度大于待共识区块i的区块高度,则可以将投票映射表中待共识区块2和待共识区块5之间的位置,确定为待共识区块i在投票映射表中的插入位置。若在目标节点设备的待共识区块链中,待共识区块1、待共识区块2、待共识区块5、待共识区块6的区块高度均小于待共识区块i的区块高度,则可以将投票映射表中的末尾位置确定为待共识区块i在投票映射表中的插入位置。

步骤S103,在投票映射表中的插入位置,添加待共识区块i的预投票信息,得到更新后的投票映射表。

具体的,在确定了待共识区块i在投票映射表中的插入位置后,可以在投票映射表的插入位置处,添加待共识区块i的预投票信息,即对投票映射表进行更新,得到更新后的投票映射表。其中,投票映射表可以认为是一个有向无环图,添加了待共识区块i的预投票信息后,可以认为是在有向无环图中插入了一个点;投票映射表中的预投票信息的顺序,与预投票信息所对应的待共识区块在待共识区块链中的顺序保持一致。例如,待共识区块i在投票映射表中的插入位置为投票映射表的末尾位置时,可以在投票映射表的末尾位置加入待共识区块i的预投票信息。

步骤S104,根据更新后的投票映射表,对N个待共识区块分别对应的预投票数进行更新,得到N个待共识区块分别对应的目标预投票数,根据目标预投票数,确定N个待共识区块在共识周期中达成共识的目标区块。

具体的,在更新完投票映射表后,目标节点设备可以根据更新后的投票映射表,重新统计待共识区块链中的N个待共识区块分别对应的目标预投票数。进一步地,目标节点设备可以根据更新后的投票映射表,计算更新后的投票映射表记录的受影响的待共识区块的预投票数,也就是计算更新后的投票映射表中的待共识区块i以及区块高度小于待共识区块i的区块高度的待共识区块的预投票数,得到最新的目标预投票数。

区块链系统中的共识周期可以包括预投票阶段和预提交阶段,目标预投票数可以是指N个待共识区块在共识周期的预投票阶段所获得的预投票数;若N个待共识区块中的待共识区块i在预投票阶段所获得的目标预投票数大于数量阈值,则根据预提交阶段中的预提交信息,确定待共识区块i在预提交阶段所获得的预提交总数;若待共识区块i在预提交阶段所获得的预提交总数大于提交阈值,则确定待共识区块i在共识周期中达成共识,即待共识区块i在该共识周期中共识成功,此时的待共识区块i可以确定为目标区块,该目标区块可以添加至区块链系统中的目标区块链,并从待共识区块链中删除目标区块,得到更新后的待共识区块链。可选的,若待共识区块i在预提交阶段所获得的预提交总数小于或等于提交阈值,则确定待共识区块i在共识周期中未达成共识,即待共识区块i在该共识周期中共识未成功。可以理解的是,待共识区块链所包含的N个待共识区块中,任意一个待共识区块的目标预投票数大于数量阈值,都可以对该待共识区块进行预提交处理,生成该待共识区块在共识周期的预提交阶段中的预提交信息,目标节点设备可以根据预提交阶段中所收到的预提交信息,确定该待共识区块在预提交阶段所获得的预提交总数,当预提交总数大于提交阈值时,可以确定该待共识区块共识成功,可以将其添加至目标区块链,添加至目标区块链的待共识区块可以从待共识区块链中删除,也就是说,目标区块链中所包含的区块与待共识区块链中所包含的待共识区块是不重复的。待共识区块链可以基于待共识区块的成功上链或者接收到的新的待共识区块,对待共识区块链进行更新,得到更新后的待共识区块链。

可选的,目标节点设备作为区块链系统的共识委员会中的节点设备,该目标节点设备可以参与上述N个待共识区块的共识处理过程。由于N个待共识区块在区块链系统中所生成的时间可能是不一样的,目标节点设备接收到N个待共识区块的时间也可能存在不同,因此目标节点设备对N个待共识区块的预投票处理同样会存在时间先后顺序。目标节点设备可以对待共识区块链中,其认为有效的最高待共识区块进行投票,并按照待共识区块链的链式结构特性,传递给待共识区块链中区块高度小于该最高待共识区块的区块高度的待共识区块;其中,目标节点设备所认为的有效的最高待共识区块可以是指待共识区块链的未达成共识的待共识区块中,具有最大的目标预投票数的待共识区块。

可选的,在更新后的待共识区块链中确定目标节点设备对应的未投票区块集合,该未投票区块集合中所包含的待共识区块可以是指目标节点设备还未进行投票的待共识区块;在未投票区块集合中,将最大的目标预投票数所对应的待共识区块确定为候选区块,在共识周期的预投票阶段中,对候选区块进行有效性验证,得到候选区块对应的验证结果;当候选区块的验证结果为验证通过结果时,对更新后的待共识区块链中,区块高度小于候选区块的区块高度的待共识区块以及候选区块进行投票,生成候选区块对应的预投票信息,进而可以将候选区块对应的预投票信息广播至区块链系统中除目标节点设备之外的剩余节点设备,此时的剩余节点设备和目标节点设备均属于区块链系统中的共识委员会。

本申请实施例中,在区块链系统的共识周期中,可以将区块链式结构特性整合到共识过程中,可以将接收到的待共识区块按照区块的链式结构进行串连,生成待共识区块链;同时可以根据接收到的预投票信息生成投票映射表,根据投票映射表可以统计出预投票所投的待共识区块,即统计出每个待共识区块分别对应的目标预投票数,在确保链的安全性的基础上,可以提高区块链的共识效率。

请参见图6,图6是本申请实施例提供的一种区块链系统的共识投票处理方法的流程示意图。可以理解地,该区块链系统的共识投票处理方法由目标节点设备执行,该目标节点设备可以为区块链系统的共识委员会中的任意一个节点设备;如图6所示,该区块链系统的共识投票处理方法可以包括以下步骤S201-步骤S216:

步骤S201,获取共识周期的提案阶段中所创建的N个待共识区块,获取N个待共识区块分别包含的当前区块哈希和前继区块哈希,N为正整数。

具体的,在共识周期的提案阶段中,区块链系统中的一个或多个提案节点可以创建N个待共识区块,提案节点可以将创建的待共识区块广播给共识委员会中的其余节点设备;也就是说,目标节点设备可以获取共识周期的提案阶段中所创建的N个待共识区块,每接收到一个待共识区块,目标节点设备都可以获取该待共识区块的区块头中所包含的当前区块哈希和前继区块哈希,该当前区块哈希可以是指该待共识区块的区块哈希,前继区块哈希可以是指该待共识区块的前一个待共识区块的区块哈希。

步骤S202,当N个待共识区块中的待共识区块j所包含的前继区块哈希为待共识区块i所包含的当前区块哈希时,对待共识区块i和待共识区块j进行串连,生成包含N个待共识区块的待共识区块链,i和j为小于或等于N的正整数。

具体的,当目标节点设备接收到两个待共识区块(例如,待共识区块i和待共识区块j),且待共识区块j的区块头所包含的前继区块哈希为待共识区块i的区块头所包含的当前哈希值时,对待共识区块i和待共识区块j按照区块链的链式结构进行串连;目标节点设备接收到N个待共识区块后,可以对N个待共识区块按照链式结构进行串连,生成包含N个待共识区块的待共识区块链;其中,i和j可以均为小于或等于N的正整数。

步骤S203,在区块链系统的共识周期中,接收待共识区块i的预投票信息。

其中,上述步骤S203的具体实现方式可以参见上述图5所对应实施例中的步骤S101,此处不再进行赘述。

步骤S204,投票映射表中是否包含待共识区块i的预投票信息。

步骤S205,生成已记录提示信息。

具体的,当投票映射表中包含待共识区块i的预投票信息时,可以生成已记录提示信息,表明目标节点设备的投票映射表中已经记录了待共识区块i的预投票信息,该已记录提示信息用于指示投票映射表可以继续保持不变。

步骤S206,将投票映射表中的预投票信息所属的待共识区块确定为投票区块集合;获取待共识区块i对应的区块高度H,按照投票区块集合中的区块高度的降序排列顺序,对投票区块集合中的待共识区块进行遍历;H为正整数。

具体的,当投票映射表中不包含待共识区块i的预投票信息时,目标节点设备可以将投票映射表中所包含的预投票信息所属的待共识区块确定为投票区块集合,即目标节点设备的有向无环图组件中存储了哪些待共识节点的预投票信息,这些待共识节点就可以添加至投票区块集合。可选的,目标节点设备还可以将投票区块集合中的待共识区块的区块哈希构成区块哈希集合(hash set),目标节点设备所存储的目标区块链的最新区块所对应的区块哈希可以记为base hash(基本哈希),最新区块的区块高度可以记为base height(基本高度);目标节点设备在接收到待共识区块之前,有向无环图组件中的投票映射表为空,区块哈希集合(hash set)只有目标区块链的最新区块哈希,当前节点所认为的目标区块链的最新区块哈希base hash等于目标区块链的最新区块的区块哈希,区块高度baseheight等于目标区块链的最新区块的区块高度。

步骤S207,投票区块集合中是否包含区块高度大于区块高度H的待共识区块。

步骤S208,在投票映射表中,将待共识区块k与待共识区块j之间的位置,确定为待共识区块i对应的插入位置;待共识区块k的区块高度小于区块高度H,待共识区块j的区块高度大于区块高度H,且待共识区块k和待共识区块j在投票映射表中具有相邻的排列顺序。

具体的,目标节点设备可以对投票区块集合中的待共识区块所对应的区块哈希(即待共识区块的区块头所包含的当前区块哈希,或者投票映射表中的区块哈希(如键值对中的关键字))进行遍历处理,对于投票区块集合中的每一个待共识区块,查找该待共识区块是否是待共识区块i的后续区块,即查找每一个待共识区块的区块高度是否大于待共识区块i的区块高度(待共识区块i的区块高度可以记为区块高度H),若投票区块集合中包含区块高度大于区块高度H的待共识区块,则目标节点设备可以在投票映射表中找到具有相邻的排列顺序待共识区块k和待共识区块j,并且待共识区块k的区块高度小于待共识区块i的区块高度H,待共识区块j的区块高度大于待共识区块i的区块高度H,并将待共识区块k与待共识区块j之间的位置,确定为待共识区块i对应的插入位置,此时的待共识区块k和待共识区块j属于投票区块集合。

步骤S209,为待共识区块i创建前序区块集合和后序区块集合,将待共识区块k添加至待共识区块i的前序区块集合,将待共识区块j添加至待共识区块i的后序区块集合。

具体的,目标节点设备可以为待共识节点i创建前序区块集合和后序区块集合,并将待共识区块k添加至待共识区块i的前序区块集合,将待共识区块j添加至待共识区块i的后序区块集合。其中,每个待共识区块的前序区块集合中可以仅包含投票映射表中区块高度仅小于当前待共识区块的待共识区块,后序区块集合可以仅包含投票映射表中区块高度仅大于当前待共识区块的待共识区块;如图4所示的投票映射表10c,区块B的前序区块集合为(区块A),区块B的后序区块集合为(区块C),以此类推,区块D的前序区块集合为(区块C),区块D的后序区块集合为(区块F1,区块G2)。

可选的,每个待共识区块的前序区块集合中可以包含投票映射表中区块高度小于当前待共识区块的所有待共识区块,后序区块集合可以包含投票映射表中区块高度大于当前待共识区块的所有待共识区块;如图4所示的投票映射表10c,区块B的前序区块集合为(区块A),区块B的后序区块集合为(区块C,区块D,区块F1,区块G2),以此类推,区块D的前序区块集合为(区块B,区块C),区块D的后序区块集合为(区块F1,区块G2);简单来说,前序区块集合中的待共识区块的区块高度小于当前待共识区块的区块高度,后序区块集合中的待共识区块的区块高度大于当前待共识区块的区块高度。

步骤S210,将待共识区块i的当前区块哈希作为关键字,将待共识区块i的前序区块集合、待共识区块i的后序区块集合,以及待共识区块i的预投票信息作为数值结果。

步骤S211,根据关键字和数值结果,确定待共识区块i对应的投票映射数据,在投票映射表的插入位置添加投票映射数据,得到更新后的投票映射表;更新后的投票映射表中的待共识区块k的后序区块集合包括待共识区块i,且待共识区块j的前序区块集合包括待共识区块i。

具体的,目标节点设备在确定了待共识区块i的预投票信息在投票映射表中的插入位置(待共识区块k与待共识区块j之间的位置)后,可以将待共识区块i的区块哈希(即当前区块哈希)作为关键字,将待共识区块i对应的前序区块集合、后序区块集合以及预投票信息作为数值结果,创建键值对,该键值对可以作为该待共识区块i对应的投票映射数据;与此同时,投票映射表中区块高度小于区块高度H的待共识区块(例如,待共识区块k)的后序区块集合可以添加待共识区块i,区块高度大于区块高度H的待共识区块(例如,待共识区块j)的前序区块集合可以添加待共识区块i;将待共识区块i的投票映射数据添加至投票映射表中,可以得到更新后的投票映射表。换言之,相比于更新之前的投票映射表,更新后的投票映射表中不仅增加了待共识区块i对应的投票映射数据,还对原来的待共识区块的前序区块集合或后序区块集合进行了更新。

步骤S212,将投票映射表的末尾位置,确定为待共识区块i在投票映射表中的插入位置。

具体的,若投票区块集合中不包含区块高度大于区块高度H的待共识区块,则表明待共识区块i在当前收到预投票信息的所有待共识区块中,为区块高度最大的待共识区块,因此可以将投票映射表的末尾位置,确定为待共识区块i在投票映射表中的插入位置。

步骤S213,为待共识区块i创建前序区块集合和后序区块集合,将投票区块集合中具有最大区块高度的待共识区块添加至待共识区块i的前序区块集合,确定待共识区块i的后序区块集合为空。

具体的,当待共识区块i在投票映射表中的插入位置为投票映射表的末尾位置时,目标节点设备仍然需要为该待共识区块i创建前序区块集合和后序区块集合,此时该待共识区块i的前序区块集合可以包括投票映射表中区块高度小于区块高度H的所有待共识区块,或者可以包括投票映射表中区块高度仅小于区块高度H,且与待共识区块i相邻的待共识区块;由于投票映射表中不存在区块高度大于区块高度H的待共识区块,因此该待共识区块i的后序区块集合暂时为空。

步骤S214,将待共识区块i的当前区块哈希作为关键字,将待共识区块i的前序区块集合、待共识区块i的后序区块集合,以及待共识区块i的预投票信息作为数值结果。

步骤S215,根据关键字和数值结果,确定待共识区块i对应的投票映射数据,将投票映射数据添加至投票映射表的末位位置,得到更新后的投票映射表;更新后的投票映射表中具有最大区块高度的待共识区块的后序区块集合包括待共识区块i。

具体的,当待共识区块i在投票映射表中的插入位置为投票映射表的末尾位置时,目标节点设备同样需要创建该待共识区块i的投票映射数据,还可以在投票映射表包含的待共识区块的后序区块集合中添加待共识区块i,将待共识区块i的投票映射数据添加至投票映射表,可以得到更新后的投票映射表,投票映射数据的构建方式与前述步骤S210和步骤S211的描述类似,此处不再进行赘述。

步骤S216,根据更新后的投票映射表,对N个待共识区块分别对应的预投票数进行更新,得到N个待共识区块分别对应的目标预投票数,根据目标预投票数,确定N个待共识区块在共识周期中达成共识的目标区块。

具体的,目标节点设备在更新了投票映射表后,可以根据投票映射表中所包含的待共识区块,以及待共识区块的后序区块集合中的待共识区块的数量,可以统计得到各个待共识区块的分别对应的目标预投票数。其中,对于待共识区块链中的N个待共识区块,可以按照更新后的投票映射表中是否包含待共识节点的预投票信息,将N个待共识区块划分为第一待共识区块和第二待共识区块,例如,目标节点设备将更新后的投票映射表中的预投票信息所属的待共识区块确定为第一待共识区块,将N个待共识区块中除第一待共识区块之外的待共识区块确定为第二待共识区块,此处的第一待共识区块包括待共识区块i,第一待共识区块的数量为一个或多个,第二待共识区块的数量同样可以为一个或多个;在更新后的投票映射表中获取每个第一待共识区块分别对应的后序区块集合,根据每个后序区块集合中的区块数量,重新统计每个第一待共识区块分别对应的目标预投票数,而目标节点设备按时还未收到第二待共识区块的预投票信息,因此第二待共识区块对应的目标预投票数暂时为空数值,即零。如图4所示的投票映射表10c,当区块B的后序区块集合为(区块C),区块C的后序区块集合为(区块D),区块D的后序区块集合为(区块F1,区块G2),可以统计得到区块B的目标预投票数为5。

目标节点设备统计到各个待共识区块分别对应的目标预投票数后,可以比较各个待共识区块的目标预投票数与数量阈值之间的大小关系,基于目标预投票数与数量阈值之间的关系,继续执行后续共识处理流程,后续共识处理流程可以参见上述图5所对应实施例中对步骤S104的描述,此处不再进行赘述。

请参见图7,图7是本申请实施例提供的一种预投票信息的处理流程示意图。如图7所示的节点设备2为区块链系统的共识委员会中参与共识的任意一个节点设备,如上述目标节点设备;假设此时节点设备2的块链式关系组件收到了10个待共识区块,分别为区块A、区块B、区块C、区块D、区块E1、区块F1、区块G1、区块E2、区块F2、区块G2,上述10个待共识区块按照链式结构进行串连后可以生成待共识区块链20a。此时节点设备2的有向无环图组件已收到了区块B、区块C以及区块F1分别对应的预投票信息,根据区块B、区块C以及区块F1在待共识区块链20a中的链式位置关系,可以生成投票映射表20b,该投票映射表20b包含区块B、区块C以及区块F1分别对应的预投票信息。

当节点设备2在t1时刻接收到区块D的预投票信息,在t2时刻接收到区块G2的预投票信息,且t1时刻早于t2时刻时,表示节点设备2先后接收到区块D和区块G2分别对应的预投票信息,节点设备2可以按照接收到预投票信息的先后顺序先对区块D的预投票信息进行处理,后对区块G2的预投票信息进行处理。其中,节点设备2对区块D的预投票信息的处理流程可以为:节点设备2可以在有向无环图组件的投票映射表20b中是否记录了区块D的预投票信息,若投票映射表20b中记录了区块D的预投票信息,则返回已记录提示信息;若投票映射表20b中没有记录区块D的预投票信息,则按照区块哈希集合(hash set)进行遍历处理,对于区块哈希集合(hash set)中的每一个区块哈希,如区块哈希hash1,查找该区块哈希hash1是否为区块D的后序区块的区块哈希,即该区块哈希hash1所对应的待共识区块的区块高度是否大于区块D的区块高度,如果该区块哈希hash1是区块D的后序区块的区块哈希,则记录下来;若该区块哈希hash1不是区块D的后序区块的区块哈希,则继续查找区块哈希hash2是否为区块D的后序区块的区块哈希(此处区块哈希hash1所对应的待共识区块的区块高度大于区块hash2所对应的待共识区块的区块高度),并以此类推,直至区块哈希集合(hash set)中的区块哈希全部遍历完,并返回记录结果。

其中,若返回已记录提示信息,表明节点设备2已经收到过共识委员会中的节点设备对区块D的预投票信息。若返回的记录结果为空,则表明区块D的预投票信息在有向无环图组件的投票映射表20b所保存的预投票信息没有指向区块D的,即按照区块高度来说区块D的区块高度是最高的(此处仅针对节点设备2收到了预投票信息的待共识区块),则基于区块D从待共识区块链20a所包含的所有待共识区块,即块链式关系组件中的每一个待共识区块直至最新区块哈希base hash和区块高度base height,检查是否存在于投票映射表20b中。若该待共识区块存在于投票映射表20b中,则将区块D或者区块D的区块哈希添加到该待共识区块(可以记为ancestry)的后序区块集合中。遍历完待共识区块链20a中的待共识区块后,可以创建区块D的前序区块集合和后序区块集合,区块D的前序区块集合可以包括ancestry的信息,后序区块集合为空,随后可以将区块D的预投票信息和区块哈希写入投票映射表20b中,以得到更新后的投票映射表。

若返回的记录结果不为空,说明投票映射表20b中存在待共识区块为区块D的后序区块(例如,区块F1),也存在待共识区块为区块D的前序区块(例如,区块C),这是需要将区块D写入区块C和区块F1的中间,生成更新后的投票映射表,如图7所示的投票映射表20c。

得到更新后的投票映射表20c后,可以计算投票映射表20c中所记录的待共识区块的预投票数,具体为区块高度小于区块D的区块高度的待共识区块的预投票数。

进一步地,按照上述操作流程,可以对区块G2的预投票信息进行处理,最终得到投票映射表20d,再一次更新各个待共识区块对应的预投票数。节点设备2每接收到一个待共识区块的预投票信息,均需要执行上述操作流程,以对有向无环图组件中的预投票数进行实时更新。当然,当某个待共识区块在共识周期中达成共识,并正式写入目标区块链中后,可以从待共识区块连20a中删除该待共识区块,与此同时,还可以从有向无环图组件的投票映射表中删除该共识区块的投票映射数据。

本申请实施例中,在区块链系统的共识周期中,可以将区块链式结构特性整合到共识过程中,可以将接收到的待共识区块按照区块的链式结构进行串连,生成待共识区块链;同时可以根据接收到的预投票信息生成投票映射表,根据投票映射表可以统计出预投票所投的待共识区块,即统计出每个待共识区块分别对应的目标预投票数,在确保链的安全性的基础上,可以提高区块链的共识效率。

请参见图8,图8是本申请实施例提供的一种区块链系统的共识投票处理装置的结构示意图。可以理解地,该区块链系统的共识投票处理装置1可以应用在区块链系统中的目标节点设备上;如图8所示,该区块链系统的共识投票处理装置1可以包括:接收模块11,位置确定模块12,添加模块13,投票统计模块14;

接收模块11,用于在区块链系统的共识周期中,接收待共识区块i的预投票信息;待共识区块i属于目标节点设备对应的待共识区块链,待共识区块链是由目标节点设备所接收到的N个待共识区块确定的,i和N均为正整数且i小于或等于N;

位置确定模块12,用于若目标节点设备的投票映射表中不包含待共识区块i的预投票信息,则根据待共识区块i与投票映射表中的预投票信息所属的待共识区块,在待共识区块链中的链式位置关系,确定待共识区块i在投票映射表中的插入位置;投票映射表包括目标节点设备所接收到的预投票信息;

添加模块13,用于在投票映射表中的插入位置,添加待共识区块i的预投票信息,得到更新后的投票映射表;

投票统计模块14,用于根据更新后的投票映射表,对N个待共识区块分别对应的预投票数进行更新,得到N个待共识区块分别对应的目标预投票数,根据目标预投票数,确定N个待共识区块在共识周期中达成共识的目标区块。

其中,接收模块11,位置确定模块12,添加模块13,投票统计模块14的具体功能实现方式可以参见上述图5所对应实施例中的步骤S101-步骤S104,这里不再进行赘述。

在一个或多个实施例中,共识周期包括提案阶段;

该区块链系统的共识投票处理装置1还可以包括:区块获取模块15,区块串连模块16;

区块获取模块15,用于获取共识周期的提案阶段中所创建的N个待共识区块,获取N个待共识区块分别包含的当前区块哈希和前继区块哈希;

区块串连模块16,用于当N个待共识区块中的待共识区块j所包含的前继区块哈希为待共识区块i所包含的当前区块哈希时,对待共识区块i和待共识区块j进行串连,生成包含N个待共识区块的待共识区块链;j为小于或等于N的正整数。

其中,区块获取模块15,区块串连模块16的具体功能实现方式可以参见上述图6所对应实施例中的步骤S201-步骤S202,这里不再进行赘述。

在一个或多个实施例中,位置确定模块12可以包括:投票区块集合确定单元121,区块排序单元122,第一位置确定单元123,第二位置确定单元124;

投票区块集合确定单元121,用于若目标节点设备的投票映射表中不包含待共识区块i的预投票信息,则将投票映射表中的预投票信息所属的待共识区块确定为投票区块集合;

区块排序单元122,用于获取待共识区块i对应的区块高度H,按照投票区块集合中的区块高度的降序排列顺序,对投票区块集合中的待共识区块进行遍历;H为正整数;

第一位置确定单元123,用于当投票区块集合中包含区块高度大于区块高度H的待共识区块时,根据投票区块集合中所包含的区块高度大于区块高度H的待共识区块,确定待共识区块i在投票映射表中的插入位置;

第二位置确定单元124,用于当投票区块集合中不包含区块高度大于区块高度H的待共识区块时,将投票映射表的末尾位置,确定为待共识区块i在投票映射表中的插入位置。

其中,第一位置确定单元123具体用于:

当投票区块集合中包含区块高度大于区块高度H的待共识区块时,在投票区块集合中获取区块高度小于区块高度H的待共识区块k,以及区块高度大于区块高度H的待共识区块j;待共识区块k和待共识区块j在投票区块集合中具有相邻的排列顺序,j和k均为小于或等于N的正整数;

在投票映射表中,将待共识区块k与待共识区块j之间的位置,确定为待共识区块i对应的插入位置。

其中,投票区块集合确定单元121,区块排序单元122,第一位置确定单元123,第二位置确定单元124的具体功能实现方式可以参见上述图6所对应实施例中的步骤S204-步骤S208、步骤S212,这里不再进行赘述。

在一个或多个实施例中,添加模块13可以包括:第一集合创建单元131,第一键值对构建单元132,第一映射表更新单元133,第二集合创建单元134,第二键值对构建单元135,第二映射表更新单元136;

第一集合创建单元131,用于当插入位置为待共识区块k和待共识区块j之间的位置时,为待共识区块i创建前序区块集合和后序区块集合,将待共识区块k添加至待共识区块i的前序区块集合,将待共识区块j添加至待共识区块i的后序区块集合;

第一键值对构建单元132,用于将待共识区块i的当前区块哈希作为关键字,将待共识区块i的前序区块集合、待共识区块i的后序区块集合,以及待共识区块i的预投票信息作为数值结果;

第一映射表更新单元133,用于根据关键字和数值结果,确定待共识区块i对应的投票映射数据,在投票映射表的插入位置添加投票映射数据,得到更新后的投票映射表;更新后的投票映射表中的待共识区块k的后序区块集合包括待共识区块i,且待共识区块j的前序区块集合包括待共识区块i。

第二集合创建单元134,用于当插入位置为投票映射表的末尾位置时,为待共识区块i创建前序区块集合和后序区块集合,将投票区块集合中具有最大区块高度的待共识区块添加至待共识区块i的前序区块集合,确定待共识区块i的后序区块集合为空;

第二键值对构建单元135,用于将待共识区块i的当前区块哈希作为关键字,将待共识区块i的前序区块集合、待共识区块i的后序区块集合,以及待共识区块i的预投票信息作为数值结果;

第二映射表更新单元136,用于根据关键字和数值结果,确定待共识区块i对应的投票映射数据,将投票映射数据添加至投票映射表的末位位置,得到更新后的投票映射表;更新后的投票映射表中具有最大区块高度的待共识区块的后序区块集合包括待共识区块i。

其中,第一集合创建单元131,第一键值对构建单元132,第一映射表更新单元133,第二集合创建单元134,第二键值对构建单元135,第二映射表更新单元136的具体功能实现方式可以参见上述图6所对应实施例中的步骤S209-步骤S211、步骤S213-步骤S215,这里不再进行赘述。其中,当第一集合创建单元131,第一键值对构建单元132,第一映射表更新单元133在执行相应的操作时,第二集合创建单元134,第二键值对构建单元135,第二映射表更新单元136均暂停执行操作;当第二集合创建单元134,第二键值对构建单元135,第二映射表更新单元136在执行相应的操作时,第一集合创建单元131,第一键值对构建单元132,第一映射表更新单元133均暂停执行操作;其中,上述第一集合创建单元131和第二集合创建单元134可以合并为一个集合创建单元,上述第一键值对构建单元132和第二键值对构建单元135可以合并为一个键值对构建单元,上述第二集合创建单元134和第二映射表更新单元136可以合并为一个映射表更新单元。

在一个或多个实施例中,该区块链系统的共识投票处理装置1还可以包括:已记录提示模块17;

已记录提示模块17,用于若目标节点设备的投票映射表中包含待共识区块i的预投票信息,则生成已记录提示信息;已记录提示信息用于指示投票映射表继续保持不变。

其中,已记录提示模块17的具体功能实现方式可以参见上述图6所对应实施例中的步骤S205,这里不再进行赘述。

在一个或多个实施例中,投票统计模块14可以包括:区块划分单元141,预投票数统计单元142;

区块划分单元141,用于将更新后的投票映射表中的预投票信息所属的待共识区块确定为第一待共识区块,将N个待共识区块中除第一待共识区块之外的待共识区块确定为第二待共识区块;第一待共识区块包括待共识区块i,第一待共识区块的数量为一个或多个;

预投票数统计单元142,用于在更新后的投票映射表中获取每个第一待共识区块分别对应的后序区块集合,根据每个后序区块集合中的区块数量,重新统计每个第一待共识区块分别对应的目标预投票数;

上述预投票数统计单元142,还用于将第二待共识区块对应的目标预投票数确定为空数值。

可选的,共识周期包括预投票阶段和预提交阶段,目标预投票数为N个待共识区块在预投票阶段所获得的预投票数;

投票统计模块14可以包括:预提交总数确定单元143,共识通过单元144;

预提交总数确定单元143,用于若N个待共识区块中的待共识区块i在预投票阶段所获得的目标预投票数大于数量阈值,则根据预提交阶段中的预提交信息,确定待共识区块i在预提交阶段所获得的预提交总数;

共识通过单元144,用于若待共识区块i在预提交阶段所获得的预提交总数大于提交阈值,则确定待共识区块i在共识周期中达成共识,将待共识区块i确定为目标区块。

其中,区块划分单元141,预投票数统计单元142的具体功能实现方式可以参见上述图5所对应实施例中的步骤S104,预提交总数确定单元143,共识通过单元144的具体功能实现方式可以参见上述图6所对应实施例中的步骤S216,这里不再进行赘述。

在一个或多个实施例中,该区块链系统的共识投票处理装置1还可以包括:共识未通过模块18,记账模块19,候选区块确定模块20,区块验证模块21,预投票模块22,广播模块23;

共识未通过模块18,用于若待共识区块i在预提交阶段所获得的预提交总数小于或等于提交阈值,则确定待共识区块i在共识周期中未达成共识。

记账模块19,用于将目标区块添加至区块链系统中的目标区块链,从待共识区块链中删除目标区块,得到更新后的待共识区块链。

候选区块确定模块20,用于在更新后的待共识区块链中确定目标节点设备对应的未投票区块集合,在未投票区块集合中,将最大的目标预投票数所对应的待共识区块确定为候选区块;

区块验证模块21,用于在共识周期的预投票阶段中,对候选区块进行有效性验证,得到候选区块对应的验证结果;

预投票模块22,用于当验证结果为验证通过结果时,对更新后的待共识区块链中,区块高度小于候选区块的区块高度的待共识区块以及候选区块进行投票,生成候选区块对应的预投票信息;

广播模块23,用于将候选区块对应的预投票信息广播至区块链系统中除目标节点设备之外的剩余节点设备;剩余节点设备和目标节点设备属于区块链系统中的共识委员会。

其中,共识未通过模块18,记账模块19,候选区块确定模块20,区块验证模块21,预投票模块22,广播模块23的具体功能实现方式可以参见上述图5所对应实施例中的步骤S104,这里不再进行赘述。

本申请实施例中,在区块链系统的共识周期中,可以将区块链式结构特性整合到共识过程中,可以将接收到的待共识区块按照区块的链式结构进行串连,生成待共识区块链;同时可以根据接收到的预投票信息生成投票映射表,根据投票映射表可以统计出预投票所投的待共识区块,即统计出每个待共识区块分别对应的目标预投票数,在确保链的安全性的基础上,可以提高区块链的共识效率。

请参见图9,图9是本申请实施例提供的一种计算机设备的结构示意图。如图9所示,该计算机设备1000可以为用户终端,例如,上述图1所对应实施例中的用户终端10a,还可以为服务器,例如,上述图1所对应实施例中的服务器10d,这里将不对其进行限制。为便于理解,本申请以计算机设备为用户终端为例,该计算机设备1000可以包括:处理器1001,网络接口1004和存储器1005,此外,该计算机设备1000还可以包括:用户接口1003,和至少一个通信总线1002。其中,通信总线1002用于实现这些组件之间的连接通信。其中,用户接口1003还可以包括标准的有线接口、无线接口。网络接口1004可选的可以包括标准的有线接口、无线接口(如WI-FI接口)。存储器1004可以是高速RAM存储器,也可以是非不稳定的存储器(non-volatile memory),例如至少一个磁盘存储器。存储器1005可选的还可以是至少一个位于远离前述处理器1001的存储装置。如图9所示,作为一种计算机可读存储介质的存储器1005中可以包括操作系统、网络通信模块、用户接口模块以及设备控制应用程序。

其中,该计算机设备1000中的网络接口1004还可以提供网络通讯功能,且可选用户接口1003还可以包括显示屏(Display)、键盘(Keyboard)。在图9所示的计算机设备1000中,网络接口1004可提供网络通讯功能;而用户接口1003主要用于为用户提供输入的接口;而处理器1001可以用于调用存储器1005中存储的设备控制应用程序,以实现:

在区块链系统的共识周期中,接收待共识区块i的预投票信息;待共识区块i属于目标节点设备对应的待共识区块链,待共识区块链是由目标节点设备所接收到的N个待共识区块确定的,i和N均为正整数且i小于或等于N;

若目标节点设备的投票映射表中不包含待共识区块i的预投票信息,则根据待共识区块i与投票映射表中的预投票信息所属的待共识区块,在待共识区块链中的链式位置关系,确定待共识区块i在投票映射表中的插入位置;投票映射表包括目标节点设备所接收到的预投票信息;

在投票映射表中的插入位置,添加待共识区块i的预投票信息,得到更新后的投票映射表;

根据更新后的投票映射表,对N个待共识区块分别对应的预投票数进行更新,得到N个待共识区块分别对应的目标预投票数,根据目标预投票数,确定N个待共识区块在共识周期中达成共识的目标区块。

应当理解,本申请实施例中所描述的计算机设备1000可执行前文图5和图6任一个所对应实施例中对区块链系统的共识投票处理方法的描述,也可执行前文图8所对应实施例中对区块链系统的共识投票处理装置1的描述,在此不再赘述。另外,对采用相同方法的有益效果描述,也不再进行赘述。

此外,这里需要指出的是:本申请实施例还提供了一种计算机可读存储介质,且计算机可读存储介质中存储有前文提及的区块链系统的共识投票处理装置1所执行的计算机程序,且计算机程序包括程序指令,当处理器执行程序指令时,能够执行前文图5和图6任一个所对应实施例中对区块链系统的共识投票处理方法的描述,因此,这里将不再进行赘述。另外,对采用相同方法的有益效果描述,也不再进行赘述。对于本申请所涉及的计算机可读存储介质实施例中未披露的技术细节,请参照本申请方法实施例的描述。作为示例,程序指令可被部署在一个计算设备上执行,或者在位于一个地点的多个计算设备上执行,又或者,在分布在多个地点且通过通信网络互连的多个计算设备上执行,分布在多个地点且通过通信网络互连的多个计算设备可以组成区块链系统。

此外,需要说明的是:本申请实施例还提供了一种计算机程序产品或计算机程序,该计算机程序产品或者计算机程序可以包括计算机指令,该计算机指令可以存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器可以执行该计算机指令,使得该计算机设备执行前文图5和图6任一个所对应实施例中对区块链系统的共识投票处理方法的描述,因此,这里将不再进行赘述。另外,对采用相同方法的有益效果描述,也不再进行赘述。对于本申请所涉及的计算机程序产品或者计算机程序实施例中未披露的技术细节,请参照本申请方法实施例的描述。

需要说明的是,对于前述的各个方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本申请并不受所描述的动作顺序的限制,因为依据本申请,某一些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本申请所必须的。

本申请实施例方法中的步骤可以根据实际需要进行顺序调整、合并和删减。

本申请实施例装置中的模块可以根据实际需要进行合并、划分和删减。

本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,计算机程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,存储介质可为磁碟、光盘、只读存储器(Read-Only Memory,ROM)或随机存储器(Random Access Memory,RAM)等。

以上所揭露的仅为本申请较佳实施例而已,当然不能以此来限定本申请之权利范围,因此依本申请权利要求所作的等同变化,仍属本申请所涵盖的范围。

技术分类

06120115931729