首页> 中国专利> 联盟链中的共识方法、共识节点和系统

联盟链中的共识方法、共识节点和系统

摘要

本说明书公开了一种联盟链中的共识方法、共识节点和系统,该方法包括:联盟链中的目标共识节点在生成指定数量的区块时,在所述联盟链中广播检查点checkpoint消息,所述checkpoint消息中携带有所述指定数量的区块中块高度最大的区块号;所述目标共识节点接收联盟链中其它共识节点发送的checkpoint消息;如果所述目标共识节点接收到至少2f+1个其它共识节点发送的checkpoint消息,以及其中携带的区块号大于目标共识节点的最大区块号,且其中携带的区块号一致,则所述目标共识节点从接收到的checkpoint消息中最大区块号所属的共识节点拉取区块。

著录项

  • 公开/公告号CN112988470A

    专利类型发明专利

  • 公开/公告日2021-06-18

    原文格式PDF

  • 申请/专利号CN202110457184.4

  • 发明设计人 陈盛龙;

    申请日2021-04-27

  • 分类号G06F11/14(20060101);

  • 代理机构11315 北京国昊天诚知识产权代理有限公司;

  • 代理人许振新

  • 地址 310000 浙江省杭州市西湖区西溪路556号8层B段801-11

  • 入库时间 2023-06-19 11:29:13

说明书

技术领域

本文件涉及计算机技术领域,尤其涉及一种联盟链中的共识方法、共识节点和系统。

背景技术

目前,实用拜占庭容错算法(Practical Byzantine Fault Tolerance,PBFT)主要包括两个部分,即包括Normal Case Phase和View Change Phase这两个部分。其中,NormalCase Phase部分包括request(请求阶段)、pre-prepare(预准备阶段)、prepare(准备阶段)、commit(提交阶段)和reply(响应阶段)这几个阶段来完成共识。

如果在此过程中,主节点作恶,比如欺骗其中一部分共识节点不执行任何操作,另一部分共识节点执行共识操作。那么一段时间后,就会有一部分共识节点中的生成的区块的块高度低于另一部分共识节点中生成的区块的块高度。而当这两者生成的区块的块高度之间的差值大于一定的数值时,块高度较高的区块对应的共识节点则会停滞不前,进而导致整个系统的停滞。

发明内容

本说明书实施例提供了一种联盟链中的共识方法、共识节点和系统。

为解决上述技术问题,本说明书实施例是这样实现的:

第一方面,提出了一种联盟链中的共识方法,包括:

联盟链中的目标共识节点在生成指定数量的区块时,在所述联盟链中广播检查点checkpoint消息,所述checkpoint消息中携带有所述指定数量的区块中块高度最大的区块号;

所述目标共识节点接收联盟链中其它共识节点发送的checkpoint消息;

如果所述目标共识节点接收到至少2f+1个其它共识节点发送的checkpoint消息,以及其中携带的区块号大于目标共识节点的最大区块号,且其中携带的区块号一致,则所述目标共识节点从接收到的checkpoint消息中最大区块号所属的共识节点拉取区块。

第二方面,提出了一种联盟链系统,包括共识节点,其中:

所述共识节点在生成指定数量的区块时,在所述联盟链中广播检查点checkpoint消息,所述checkpoint消息中携带有所述指定数量的区块中块高度最大的区块号;

所述共识节点接收联盟链中其它共识节点发送的checkpoint消息;

如果所述共识节点接收到至少2f+1个其它共识节点发送的checkpoint消息,以及其中携带的区块号大于目标共识节点的最大区块号,且其中携带的区块号一致,则所述目标共识节点从接收到的checkpoint消息中最大区块号所属的共识节点拉取区块。

第三方面,提出了一种联盟链中的共识节点,包括:

广播模块,在生成指定数量的区块时,在所述联盟链中广播检查点checkpoint消息,所述checkpoint消息中携带有所述指定数量的区块中块高度最大的区块号;

接收模块,接收联盟链中其它共识节点发送的checkpoint消息;

拉块模块,如果接收到至少2f+1个其它共识节点发送的checkpoint消息,以及其中携带的区块号大于目标共识节点的最大区块号,且其中携带的区块号一致,则所述目标共识节点从接收到的checkpoint消息中最大区块号所属的共识节点拉取区块。

第四方面,提出了一种电子设备,包括:

处理器;以及

被安排成存储计算机可执行指令的存储器,所述可执行指令在被执行时使所述处理器执行以下操作:

在生成指定数量的区块时,在所述联盟链中广播检查点checkpoint消息,所述checkpoint消息中携带有所述指定数量的区块中块高度最大的区块号;

接收联盟链中其它共识节点发送的checkpoint消息;

如果接收到至少2f+1个其它共识节点发送的checkpoint消息,以及其中携带的区块号大于目标共识节点的最大区块号,且其中携带的区块号一致,则所述目标共识节点从接收到的checkpoint消息中最大区块号所属的共识节点拉取区块。

第五方面,提出了一种计算机可读存储介质,所述计算机可读存储介质存储一个或多个程序,所述一个或多个程序当被包括多个应用程序的电子设备执行时,使得所述电子设备执行以下操作:

在生成指定数量的区块时,在所述联盟链中广播检查点checkpoint消息,所述checkpoint消息中携带有所述指定数量的区块中块高度最大的区块号;

接收联盟链中其它共识节点发送的checkpoint消息;

如果接收到至少2f+1个其它共识节点发送的checkpoint消息,以及其中携带的区块号大于目标共识节点的最大区块号,且其中携带的区块号一致,则所述目标共识节点从接收到的checkpoint消息中最大区块号所属的共识节点拉取区块。

本说明书实施例采用上述技术方案至少可以达到下述技术效果:

采用本说明书实施例提供的共识方法,联盟链中的目标共识节点在生成指定数量的区块时,在联盟链中广播checkpoint消息,checkpoint消息中携带有指定数量的区块中块高度最大的区块号;目标共识节点接收联盟链中其它共识节点发送的checkpoint消息;如果目标共识节点接收到至少2f+1个其它共识节点发送的checkpoint消息,以及其中携带的区块号大于目标共识节点的最大区块号,且其中携带的区块号一致,则目标共识节点从接收到的checkpoint消息中最大区块号所属的共识节点拉取区块。在此过程中,如果联盟链中的共识主节点作恶,导致联盟链中的部分共识节点的共识进程落后于其他共识节点的共识进程,也可以通过接收到其他共识节点广播的checkpoint消息中携带的块高度确定其落后于其他共识节点,并基于接收到的checkpoint消息中携带的块高度,从广播该checkpoint消息的共识节点处同步最新的区块。从而保持与共识信息处理快的共识节点同步,实现对共识主节点作恶的容错。

附图说明

此处所说明的附图用来提供对本说明书的进一步理解,构成本说明书的一部分,本说明书的示意性实施例及其说明用于解释本说明书,并不构成对本说明书的不当限定。在附图中:

图1为本说明书一个实施例提供的一种联盟链中的共识方法的实现流程示意图;

图2为本说明书一个实施例提供的一种联盟链系统的结构示意图;

图3为本说明书一个实施例提供的一种联盟链中的共识节点的结构示意图;

图4为本说明书一个实施例提供的一种电子设备的结构示意图。

具体实施方式

为使本文件的目的、技术方案和优点更加清楚,下面将结合本说明书具体实施例及相应的附图对本说明书技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本文件一部分实施例,而不是全部的实施例。基于本说明书中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本文件保护的范围。

以下结合附图,详细说明本说明书各实施例提供的技术方案。

在联盟链中使用PBFT算法进行共识的过程中,每个Replica(副本,即联盟链中所有参与共识的共识节点)在发出一个消息或者接收到其它共识节点发来的消息(包括pre-prepare、prepare、commit消息)时,都会在本共识节点的内存的消息日志(Message Log)中做记录。随着联盟链中共识操作的不断进行,联盟链中各共识节点的Message Log会占用越来越大的内存空间。因此,为了节省联盟链中各共识节点的内存空间,可以进行垃圾处理,即在各个共识节点执行完propose(提议)时,清空各共识节点的Message Log,释放各共识节点的内存空间。

一种垃圾处理的方式是,联盟链中某个共识节点在执行完一条propose(也就是最新生成一个区块),就可以在联盟链中广播消息,以针对是否可以清除本共识节点的Message Log在全网达成一致。联盟链中的共识节点在接收到这类广播消息后也可以在联盟链中广播消息,以针对是否可以清除本共识节点的Message Log在全网达成一致。如果联盟链中的共识节点接收到Quorum(2f+1)个不同共识节点针对这类广播消息的确认反馈,这些共识节点就可以删除本共识节点Message Log中的最新生成的区块所对应的消息记录。

另一种垃圾处理的方式是,联盟链中某个共识节点在执行完k条propose(也就是新生成k个区块),就可以在联盟链中广播消息,以针对是否可以清除本共识节点的MessageLog在全网达成一致。联盟链中的各个共识节点接收到这类广播消息后也可以在联盟链中广播消息,以针对是否可以清除本共识节点的Message Log在全网达成一致。如果联盟链中的共识节点接收到Quorum(2f+1)个不同共识节点的确认反馈,这些共识节点就可以删除本共识节点Message Log中最新生成的k个区块所对应的消息记录。

其中,k即本说明书实施例中checkpoint消息指示删除的k条propose(即最新生成的k个区块)对应的消息记录,上面清除本共识节点的Message Log即为本说明书实施例中的checkpoint消息,格式为,其中,n是共识节点当前期望保留的最小的一个区块的序列编号,d是期望保留的消息摘要,i是发出checkpoint消息的共识节点的编号。

上述联盟链中的共识节点在联盟链中广播发出的checkpoint消息和接收到的checkpoint消息的摘要都被记录到本共识节点的Message Log中。如果联盟链中的共识节点i收到其他不同共识节点发送的Quorum-1个合法的checkpoint消息,加上共识节点i本身发出的checkpoint消息,那么共识节点i针对的checkpoint消息便达到了Quorum(2f+1)个。此时,共识节点i可以清除本共识节点Message Log中区块号为n之前的所有区块对应的消息记录(包括区块号为n之前的区块对应的pre-prepare、prepare、commit消息以及checkpoint消息)。

上述区块号n即为共识节点i当前的stable checkpoint状态中已达成共识的最大区块号,即表明共识节点i对区块号n之前的区块的执行结果已达成共识。区块号为n的区块对应的消息记录仍然保留在共识节点i的Message Log中。由于联盟链系统中每个共识节点的处理通常是不同步的,共识消息处理快的共识节点可能会逐步拉开与共识消息处理慢的共识节点的距离。因此,可以通过设置高低水位可以限制消息处理的速度:H=h+L,其中,H是高水位,L是低水位,h是设定值,h一般取stable checkpoint的n值。这样便可以控制处理快的共识节点的处理速度,当它处理的共识消息的n值达到高水位H后会等待,直到状态为stable checkpoint的共识节点中的区块号n发生变化,才继续处理。

因此,如果共识主节点作恶,就会使得联盟链中的一部分共识节点执行对共识消息的处理,另一部分共识节点不执行对共识消息的处理。那么,一段时间后,状态为stablecheckpoint的共识节点中的区块号n则会一直不发生变化,联盟链中的共识节点就不能处理下一个propose,那么限制消息处理的速度的高低水位也就不会发生任何变化,进而就会导致联盟链中的共识节点都停滞不前。

针对此,本说明书一个或多个实施例提供的一种联盟链中的共识方法的实现流程示意图如图1所示,包括:

步骤110,联盟链中的目标共识节点在生成指定数量的区块时,在联盟链中广播检查点checkpoint消息,checkpoint消息中携带有指定数量的区块中块高度最大的区块号。

其中,目标共识节点为联盟链中的任意一个共识节点,包括共识主节点和共识备份节点。目标共识节点在生成指定数量的区块时,在联盟链中广播checkpoint消息的目的在于:就是否可以清除块高度最大的区块号之前的区块对应的消息记录在联盟链网络中达成一致。其中,块高度最大的区块号之前的区块对应的消息记录在各个共识节点的MessageLog中。

应理解,为了验证checkpoint消息的发送方的合法性,进而验证checkpoint消息的合法性,避免checkpoint消息被一些非法作恶的共识节点利用。本说明书实施例中的目标共识节点在联盟链中广播的checkpoint消息中还可以包括:目标共识节点对checkpoint消息的签名。

其中,该指定数量为正整数。

当指定数量为1时,联盟链中的共识节点每生成一个区块,都可以在联盟链中广播checkpoint消息,就是否删除该区块之前的区块对应的消息记录在联盟链中达成一致。

应理解,当指定数量为1时,联盟链中的共识节点每生成一个区块都要在联盟中广播一次,这样就会导致联盟链中的广播消息记录很庞大。为了减少联盟链中的广播消息,本说明书实施例可以设置指定数量为大于1的正整数。具体地,当指定数量为大于1的正整数k时,联盟链中的共识节点每生成k个区块,都在联盟链中广播checkpoint消息,就是否删除该k个区块中块高度最大的区块之前的区块对应的消息记录在联盟链中达成一致。

步骤120,目标共识节点接收联盟链中其它共识节点发送的checkpoint消息。

其中,其它共识节点为联盟链中除目标共识节点以外的任意一个共识节点,包括共识主节点和共识备份节点。目标共识节点可以发送checkpoint消息,也可以接收其他共识节点发送的checkpoint消息。同时,其它共识节点可以发送checkpoint消息,也可以接收其他共识节点(包括目标共识节点)发送的checkpoint消息。

联盟链中的其它共识节点本身在生成指定数量的区块时,也可以在联盟链中广播checkpoint消息,checkpoint消息用于指示该共识节点也已经生成指定数量的区块。其它共识节点在联盟链中广播checkpoint消息的同时,也可以接收到目标共识节点等联盟链中的其它共识节点发送的checkpoint消息。

步骤130,如果目标共识节点接收到至少2f+1个其它共识节点发送的checkpoint消息,以及其中携带的区块号大于目标共识节点的最大区块号,且其中携带的区块号一致,则目标共识节点从接收到的checkpoint消息中最大区块号所属的共识节点拉取区块。

可选地,为了避免checkpoint消息被一些作恶节点利用,进而删除共识节点中的重要消息记录,本说明书实施例中的目标共识节点在接收到其它共识节点发送的checkpoint消息后,可对接收到的其它共识节点的checkpoint消息的签名进行校验。并在校验通过的情况下,目标共识节点从接收到的其它共识节点的checkpoint消息中获取块高度最大的区块号。具体地,如果目标共识节点接收到至少2f+1个其它共识节点发送的checkpoint消息,以及其中携带的区块号大于目标共识节点的最大区块号,且其中携带的区块号一致,则目标共识节点从接收到的checkpoint消息中最大区块号所属的共识节点拉取区块,包括:

目标共识节点对接收到的其它共识节点发送的checkpoint消息的签名进行验证;

如果目标共识节点接收到至少2f+1个通过验证的其它共识节点发送的checkpoint消息,以及其中携带的区块号大于目标共识节点的最大区块号,且其中携带的区块号一致,则目标共识节点从接收到的checkpoint消息中最大区块号所属的共识节点拉取区块。

应理解,目标共识节点可以接收到联盟链中的多个共识节点发送的多个checkpoint消息,这多个checkpoint消息中携带的区块号可能不完全一样。为了实现目标共识节点与联盟链中的其它共识节点的区块同步,目标共识节点可从接收到的其它共识节点的checkpoint消息中获取块高度最大的区块号,作为从其它共识节点追块的依据。

可选地,目标共识节点中生成的区块落后于其它共识节点生成的区块的数量可能不止一个。为了实现目标共识节点与其它共识节点中区块的同步性,本说明书实施例中的目标共识节点,可从接收到的其它共识节点的checkpoint消息中获取块高度最大的区块号所属的共识节点拉取区块号在目标共识节点的最大区块号之后的区块。具体地,目标共识节点从接收到的checkpoint消息中最大区块号所属的共识节点拉取区块,包括:

目标共识节点基于接收到的checkpoint消息中最大区块号,从接收到的checkpoint消息中最大区块号所属的共识节点拉取区块号在最大区块号之后的区块。

应理解,目标共识节点会接收到联盟链中的多个共识节点发送的checkpoint消息。为了提高区块同步的效率,目标共识节点可从多个其它共识节点的checkpoint消息中携带的区块号中,获取块高度最大的区块号,作为目标区块号实现与共识消息处理较快的共识节点的区块同步。

可选地,当指定数量为1时,由于联盟链中的共识节点每生成一个区块就会向联盟链中的其它共识节点发送携带自身生成的块高度最大的区块号的checkpoint消息。这就使得联盟链中共识节点最多会落后于其他共识节点一个区块。具体地,当指定数量为1时,目标共识节点从接收到的checkpoint消息中最大区块号所属的共识节点拉取区块,包括:

目标共识节点基于接收到的checkpoint消息中最大区块号,从接收到的checkpoint消息中最大区块号所属的共识节点拉取最大区块号对应的区块。

可选地,当指定数量为大于1的正整数k时,目标共识节点落后于联盟链中的其它共识节点的区块数量可能不止一个。此时,可根据落后的区块数量,从其他共识节点处拉取落后的区块,以实现与其他共识节点的区块同步。具体地,当指定数量为大于1的正整数k时,目标共识节点从接收到的checkpoint消息中最大区块号所属的共识节点拉取区块,包括:

目标共识节点确定接收到的checkpoint消息中最大区块号与目标共识节点生成的块高度最大的区块号之间的差值;

如果接收到的checkpoint消息中最大区块号与目标共识节点生成的块高度最大的区块号之间的差值为1,则目标共识节点从接收到的checkpoint消息中最大区块号所属的共识节点拉取接收到的checkpoint消息中最大区块号对应的区块;

如果接收到的checkpoint消息中最大区块号与目标共识节点生成的块高度最大的区块号之间的差值大于1,则目标共识节点从接收到的checkpoint消息中最大区块号所属的共识节点拉取接收到的checkpoint消息中最大区块号对应的区块、以及接收到的checkpoint消息中最大区块号与目标共识节点生成的块高度最大的区块号之间的区块。

应理解,联盟链中的共识节点在收到Quorum(即2f+1)个携带的n(块高度最大的区块号)均大于本共识节点中最大区块号、并且签名验证通过后,才可以进行拉块操作。而因为联盟链中的每个共识节点在标记节点状态为stable checkpoint状态之前,往往会把其接收到的2f+1个来自其他共识节点的checkpoint消息(包含的签名通过验证且携带的n一致)持久化到本地磁盘中。本说明书实施例基于这一点,可以在共识节点本地存在2f+1个有效的checkpoint消息(包含的签名通过验证且携带的n均大于本共识节点中最大区块号)时,将携带有该2f+1个有效的checkpoint消息的消息列表广播给联盟链中的其它共识节点。以便联盟链中的其它共识节点能够快速验证这2f+1个有效的checkpoint消息之后,进行追块操作。

具体地,目标共识节点接收联盟链中其它共识节点发送的checkpoint消息之后,所述方法还包括:

目标共识节点若确定接收到的至少2f个其它共识节点发送的checkpoint消息中的最大区块号、与目标共识节点生成的块高度最大区块号一致,则目标共识节点将至少2f个其它共识节点的checkpoint消息和本共识节点的checkpoint消息进行打包,得到携带有至少2f+1个共识节点的验证checkpoint消息的消息列表;

目标共识节点将消息列表在联盟链中广播,以使得其它共识节点在确定消息列表中携带的至少2f+1个共识节点的checkpoint消息均通过验证,且消息列表中携带的块高度最大的区块号大于其它共识节点生成的块高度最大区块号时,基于消息列表中携带的块高度最大的区块号,从消息列表中携带的块高度最大的区块号所属的共识节点拉取区块。

可选地,为了提高客户端处业务处理的可靠性,本说明书实施例中的共识节点可在节点状态为stable checkpoint时,向客户端回包,即向客户端发送reply消息。客户端此时才可以根据该reply消息进行交易执行操作,比如扣款等操作。具体地,目标共识节点接收联盟链中其它共识节点发送的checkpoint消息之后,所述方法还包括:

如果目标共识节点在预设时间段内接收到联盟链中的其它2f个共识节点发送的checkpoint消息,且联盟链中的其它2f个共识节点发送的checkpoint消息中携带的区块号、均与目标共识节点发出的checkpoint消息中携带的区块号一致,则目标共识节点将目标共识节点的状态更新为stable checkpoint;

目标共识节点基于目标共识节点的stable checkpoint状态,向客户端发送reply消息。

采用本说明书实施例提供的共识方法,联盟链中的目标共识节点在生成指定数量的区块时,在联盟链中广播checkpoint消息,checkpoint消息中携带有指定数量的区块中块高度最大的区块号;目标共识节点接收联盟链中其它共识节点发送的checkpoint消息;如果目标共识节点接收到至少2f+1个其它共识节点发送的checkpoint消息,以及其中携带的区块号大于目标共识节点的最大区块号,且其中携带的区块号一致,则目标共识节点从接收到的checkpoint消息中最大区块号所属的共识节点拉取区块。在此过程中,如果联盟链中的共识主节点作恶,导致联盟链中的部分共识节点的共识进程落后于其他共识节点的共识进程,也可以通过接收到其他共识节点广播的checkpoint消息中携带的块高度确定其落后于其他共识节点,并基于接收到的checkpoint消息中携带的块高度,从广播该checkpoint消息的共识节点处同步最新的区块。从而保持与共识信息处理快的共识节点同步,实现对共识主节点作恶的容错。

图2是本说明书实施例提供的联盟链系统200的结构示意图。请参考图2,在一种软件实施方式中,联盟链系统200可包括共识节点210,其中:

所述共识节点210在生成指定数量的区块时,在所述联盟链中广播检查点checkpoint消息,所述checkpoint消息中携带有所述指定数量的区块中块高度最大的区块号;

所述共识节点210接收联盟链中其它共识节点发送的checkpoint消息;

如果所述共识节点210接收到至少2f+1个其它共识节点发送的checkpoint消息,以及其中携带的区块号大于目标共识节点的最大区块号,且其中携带的区块号一致,则所述目标共识节点从接收到的checkpoint消息中最大区块号所属的共识节点拉取区块。

可选地,在一种实施方式中,共识节点接收联盟链中其它共识节点发送的checkpoint消息之后,所述共识节点210,还用于:

若确定接收到的至少2f个其它共识节点发送的checkpoint消息中的最大区块号、与所述目标共识节点生成的块高度最大区块号一致,则将所述至少2f个其它共识节点的checkpoint消息和本共识节点的checkpoint消息进行打包,得到携带有至少2f+1个共识节点的验证checkpoint消息的消息列表;

将所述消息列表在所述联盟链中广播,以使得其它共识节点在确定所述消息列表中携带的所述至少2f+1个共识节点的checkpoint消息均通过验证,且所述消息列表中携带的块高度最大的区块号大于所述其它共识节点生成的块高度最大区块号时,基于所述消息列表中携带的块高度最大的区块号,从所述消息列表中携带的块高度最大的区块号所属的共识节点拉取区块。

可选地,在一种实施方式中,所述共识节点210,用于:

基于所述接收到的checkpoint消息中最大区块号,从所述接收到的checkpoint消息中最大区块号所属的共识节点拉取区块号在所述最大区块号之后的区块。

可选地,在一种实施方式中,所述共识节点在联盟链中广播的checkpoint消息中还包括:

所述共识节点对所述checkpoint消息的签名。

可选地,在一种实施方式中,所述共识节点210,用于:

对接收到的其它共识节点发送的checkpoint消息的签名进行验证;

接收到至少2f+1个通过验证的其它共识节点发送的checkpoint消息,且其中携带的区块号大于目标共识节点的最大区块号,则所述目标共识节点从接收到的checkpoint消息中最大区块号所属的共识节点拉取区块。

可选地,在一种实施方式中,所述指定数量为正整数。

可选地,在一种实施方式中,当所述指定数量为1时,所述共识节点210,用于:

基于接收到的checkpoint消息中最大区块号,从所述接收到的checkpoint消息中最大区块号所属的共识节点拉取所述最大区块号对应的区块。

可选地,在一种实施方式中,当所述指定数量为大于1的正整数k时,所述共识节点210,用于:

确定所述最大区块号与所述目标共识节点生成的块高度最大的区块号之间的差值;

如果所述最大区块号与所述目标共识节点生成的块高度最大的区块号之间的差值为1,则从所述最大区块号所属的共识节点拉取所述最大区块号对应的区块;

如果所述最大区块号与所述目标共识节点生成的块高度最大的区块号之间的差值大于1,则从所述最大区块号所属的共识节点拉取所述最大区块号对应的区块、以及所述最大区块号与所述目标共识节点生成的块高度最大的区块号之间的区块。

可选地,在一种实施方式中,所述共识节点接收联盟链中其它共识节点发送的checkpoint消息之后,所述共识节点210,还用于:

如果在预设时间段内接收到所述联盟链中的其它2f个共识节点发送的checkpoint消息,且所述联盟链中的其它2f个共识节点发送的checkpoint消息中携带的区块号、均与所述目标共识节点发出的checkpoint消息中携带的区块号一致,则将所述目标共识节点的状态更新为stable checkpoint;

基于所述目标共识节点的stable checkpoint状态,向客户端发送reply消息。

联盟链系统200能够实现图1的方法实施例的方法,具体可参考图1所示实施例的联盟链中的共识方法,不再赘述。

图3是本说明书一个实施例提供的一种联盟链中的共识节点300的结构示意图,包括:

广播模块310,在生成指定数量的区块时,在所述联盟链中广播检查点checkpoint消息,所述checkpoint消息中携带有所述指定数量的区块中块高度最大的区块号;

接收模块320,接收联盟链中其它共识节点发送的checkpoint消息;

拉块模块330,如果接收到至少2f+1个其它共识节点发送的checkpoint消息,以及其中携带的区块号大于目标共识节点的最大区块号,且其中携带的区块号一致,则所述目标共识节点从接收到的checkpoint消息中最大区块号所属的共识节点拉取区块。

可选地,在一种实施方式中,所述接收模块320,接收联盟链中其它共识节点发送的checkpoint消息之后,所述共识节点还包括:

打包模块,若确定接收到的至少2f个其它共识节点发送的checkpoint消息中的最大区块号、与所述共识节点生成的块高度最大区块号一致,则将所述至少2f个其它共识节点的checkpoint消息和本共识节点的checkpoint消息进行打包,得到携带有至少2f+1个共识节点的验证checkpoint消息的消息列表;

第一广播模块,将所述消息列表在所述联盟链中广播,以使得其它共识节点在确定所述消息列表中携带的所述至少2f+1个共识节点的checkpoint消息均通过验证,且所述消息列表中携带的块高度最大的区块号大于所述其它共识节点生成的块高度最大区块号时,基于所述消息列表中携带的块高度最大的区块号,从所述消息列表中携带的块高度最大的区块号所属的共识节点拉取区块。

可选地,在一种实施方式中,所述拉块模块330,用于:

基于所述接收到的checkpoint消息中最大区块号,从所述接收到的checkpoint消息中最大区块号所属的共识节点拉取区块号在所述最大区块号之后的区块。

可选地,在一种实施方式中,所述checkpoint消息中还包括:

共识节点对所述checkpoint消息的签名。

可选地,在一种实施方式中,所述拉块模块330,用于:

对接收到的其它共识节点发送的checkpoint消息的签名进行验证;

如果接收到至少2f+1个通过验证的其它共识节点发送的checkpoint消息,且其中携带的区块号大于目标共识节点的最大区块号,则从接收到的checkpoint消息中最大区块号所属的共识节点拉取区块。

可选地,在一种实施方式中,所述指定数量为正整数。

可选地,在一种实施方式中,当所述指定数量为1时,所述拉块模块330,用于:

基于接收到的checkpoint消息中最大区块号,从所述接收到的checkpoint消息中最大区块号所属的共识节点拉取所述最大区块号对应的区块。

可选地,在一种实施方式中,当所述指定数量为大于1的正整数k时,所述拉块模块330,用于:

确定所述最大区块号与所述目标共识节点生成的块高度最大的区块号之间的差值;

如果所述最大区块号与所述目标共识节点生成的块高度最大的区块号之间的差值为1,则从所述最大区块号所属的共识节点拉取所述最大区块号对应的区块;

如果所述最大区块号与所述共识节点生成的块高度最大的区块号之间的差值大于1,则从所述最大区块号所属的共识节点拉取所述最大区块号对应的区块、以及所述最大区块号与所述共识节点生成的块高度最大的区块号之间的区块。

可选地,在一种实施方式中,接收模块320,接收联盟链中其它共识节点发送的checkpoint消息之后,所述共识节点还包括:

状态更新模块,如果在预设时间段内接收到所述联盟链中的其它2f个共识节点发送的checkpoint消息,且所述联盟链中的其它2f个共识节点发送的checkpoint消息中携带的区块号、均与其发出的checkpoint消息中携带的区块号一致,则将所述节点的状态更新为stable checkpoint;

消息发送模块,基于所述stable checkpoint状态,向客户端发送reply消息。

联盟链中的共识节点300能够实现图1的方法实施例的方法,具体可参考图1所示实施例的联盟链中的共识方法,不再赘述。

图4是本说明书的一个实施例提供的电子设备的结构示意图。请参考图4,在硬件层面,该电子设备包括处理器,可选地还包括内部总线、网络接口、存储器。其中,存储器可能包含内存,例如高速随机存取存储器(Random-Access Memory,RAM),也可能还包括非易失性存储器(non-volatile memory),例如至少1个磁盘存储器等。当然,该电子设备还可能包括其他业务所需要的硬件。

处理器、网络接口和存储器可以通过内部总线相互连接,该内部总线可以是ISA(Industry Standard Architecture,工业标准体系结构)总线、PCI(PeripheralComponent Interconnect,外设部件互连标准)总线或EISA(Extended Industry StandardArchitecture,扩展工业标准结构)总线等。所述总线可以分为地址总线、数据总线、控制总线等。为便于表示,图4中仅用一个双向箭头表示,但并不表示仅有一根总线或一种类型的总线。

存储器,用于存放程序。具体地,程序可以包括程序代码,所述程序代码包括计算机操作指令。存储器可以包括内存和非易失性存储器,并向处理器提供指令和数据。

处理器从非易失性存储器中读取对应的计算机程序到内存中然后运行,在逻辑层面上形成联盟链中的共识装置。处理器,执行存储器所存放的程序,并具体用于执行以下操作:

在生成指定数量的区块时,在所述联盟链中广播检查点checkpoint消息,所述checkpoint消息中携带有所述指定数量的区块中块高度最大的区块号;

接收联盟链中其它共识节点发送的checkpoint消息;

如果接收到至少2f+1个其它共识节点发送的checkpoint消息,以及其中携带的区块号大于目标共识节点的最大区块号,且其中携带的区块号一致,则所述目标共识节点从接收到的checkpoint消息中最大区块号所属的共识节点拉取区块。

上述如本说明书图1所示实施例揭示的联盟链中的共识方法可以应用于处理器中,或者由处理器实现。处理器可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器可以是通用处理器,包括中央处理器(Central Processing Unit,CPU)、网络处理器(Network Processor,NP)等;还可以是数字信号处理器(Digital SignalProcessor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本说明书一个或多个实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本说明书一个或多个实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器,处理器读取存储器中的信息,结合其硬件完成上述方法的步骤。

该电子设备还可执行图1的联盟链中的共识方法,本说明书在此不再赘述。

当然,除了软件实现方式之外,本说明书的电子设备并不排除其他实现方式,比如逻辑器件抑或软硬件结合的方式等等,也就是说以下处理流程的执行主体并不限定于各个逻辑单元,也可以是硬件或逻辑器件。

本说明书实施例还提出了一种计算机可读存储介质,该计算机可读存储介质存储一个或多个程序,该一个或多个程序包括指令,该指令当被包括多个应用程序的便携式电子设备执行时,能够使该便携式电子设备执行图1所示实施例的方法,并具体用于执行以下操作:

在生成指定数量的区块时,在所述联盟链中广播检查点checkpoint消息,所述checkpoint消息中携带有所述指定数量的区块中块高度最大的区块号;

接收联盟链中其它共识节点发送的checkpoint消息;

如果接收到至少2f+1个其它共识节点发送的checkpoint消息,以及其中携带的区块号大于目标共识节点的最大区块号,且其中携带的区块号一致,则所述目标共识节点从接收到的checkpoint消息中最大区块号所属的共识节点拉取区块。

总之,以上所述仅为本说明书的较佳实施例而已,并非用于限定本说明书的保护范围。凡在本说明书一个或多个实施例的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本说明书一个或多个实施例的保护范围之内。

上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机。具体的,计算机例如可以为个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任何设备的组合。

计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。

还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。

本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号