技术领域
[0001] 本文件涉及数据处理技术领域,尤其涉及一种区块链的共识方法、共识节点及电子设备。
相关背景技术
[0002] 基于区块链的特性,在复制和容错RAFT的共识协议中,每轮共识提议的提议数据是由领导者节点打包并同步传输给区块链的各追随者节点。假设区块链的共识节点数量为N(领导者节点和追随者节点均属于共识节点),针对一轮共识提议,领导者节点需要发送N‑1份提议数据,这对于领导者节点的网络带宽产生了极大开销。
[0003] 随着未来区块链业务的爆发性增长,要获得更高的吞吐量,就需要单位时间内达成更多数据的共识,对领导者节点来讲负担更大,导致共识效率反而下降。为此,当前亟需一种能够降低领导者节点发起共识提议所开销的带宽的技术方案。
具体实施方式
[0054] 为了使本技术领域的人员更好地理解本说明书中的技术方案,下面将结合本说明书实施例中的附图,对本说明书实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本说明书一部分实施例,而不是全部的实施例。基于本说明书中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都应当属于本说明书保护的范围。
[0055] 如前所述,现有的RAFT协议共识中,每轮共识提议的提议数据是由领导者节点打包并同步传输给区块链的各追随者节点。假设区块链的共识节点数量为N,针对一轮共识提议,领导者节点需要发送N‑1份提议数据,这对于领导者节点的网络带宽产生了极大开销。随着未来区块链业务的爆发性增长,要获得更高的吞吐量,就需要单位时间内达成更多数据的共识,对领导者节点来讲负担更大,导致共识效率反而下降。有鉴于此,本文件旨在提出一种以较小的领导者节点带宽开销就能实现区块链共识的技术方案,以适应未来区块链业务增长的需求。
[0056] 图1是本说明书实施例区块链的共识方法的流程图。图1所示的方法可以由下文相对应的装置执行,包括如下步骤:
[0057] S102,区块链的领导者节点对领导者节点的交易池中的第一交易集执行可靠广播传输RBC协议,以使用纠删码算法将第一交易集拆分成与区块链的共识节点相对应的N个数据块,并基于Rval消息向区块链的各追随者节点发送对应的数据块,其中,第一交易集拆分成的数据块对应有基于纠删码算法计算得到的默克尔树证明,N为区块链的共识节点数量。
[0058] 纠删码(erasure coding,EC)是一种数据容错保护方法,它将数据分割成片段,把冗余数据块扩展、编码,并将其存储在不同的位置,比如磁盘、存储节点或者其它地理位置。从数据函数角度来说,纠删码提供的保护可以用下面公式:x=k+y来表示。变量x”代表原始数据或符号的值。变量“y”代表故障后添加的提供保护的额外或冗余符号的值。变量“x”代表纠删码过程后创建的符号的总值。举个例子来说,在一个EC 10/16的配置中,会有6个额外的符号(变量m)被添加到10个原始符号(变量k)中。这16个数据片段(变量n)可以遍布16个驱动器、节点或地理位置中,而原始文件可以从10个验证片段中重建。也就是说,即使有6个驱动器、节点或者地理位置丢失或不可用,而原始文件还是可以恢复。可以看出,纠删码仅需要数据量较少的冗余就能实现数据的还原。
[0059] 在本说明书实施例中,领导者节点执行RBC协议是为了使用纠删码技术将自身交易池中需要共识的第一交易集(后续作为提议数据)同步给区块链汇总的追随者节点。基于纠删码技术,领导者节点在将自身交易池中的交易集拆分成与各共识节点相对应数据块后,只需向每个追随者节点发送该其追随者节点自身所对应的数据块。也就是说,本次同步过程中,领导者节点发送的数据量只是一份第一交易集的数据量。
[0060] S104,追随者节点执行RBC协议,以通过Echo消息将从Rval消息接收到的相对应的数据块转发至其他追随者节点,并在接收到N‑2f个Echo消息后,基于纠删码算法将已接收到的数据块还原成第一交易集,其中,f为区块链的共识节点容错数。
[0061] 应理解,本说明书实施例的领导者节点在执行RBC协议,只通过Rval消息向追随者节点提供该追随者节点所对应的数据块。为了使追随者节点获得完整的第一交易集,本步骤中,区块链的各追随者节点还需要通过RBC协议的Echo消息将身对应的数据块转发至其他追随者节点。当任意追随者节点接收到N‑2f个Echo消息后(表示以收集到了基于纠删码算法足以还原回第一交易集的数据块),尝试还原第一交集以实现第一交集的数据同步。
[0062] 可以看出,在基于RBC协议以使用纠删码算法传输第一交易集的过程中,追随者节点也消耗网络带宽辅助领导者节点转发自身对应的数据块,从而分担了领导者节点侧的传输压力。
[0063] S106,领导者节点在对第一交易集执行完RBC协议后,对第一交易集的所有数据块的默克尔树证明执行复制和容错RAFT协议,以发起针对第一交易集的所有数据块的默克尔树证明的共识提议。
[0064] 应理解,第一交易集的所有数据块的默克尔树证明的共识提议。是领导者节点执行RBC协议所产生的,属于RBC协议的执行结果。默克尔树证明具体指默克尔树的根哈希值,数据块可以由数据量较小的默克尔树证明进行表示。也就是在本步骤中,领导者节点对第一交易集的所有数据块的默克尔树证明执行RAFT协议时,可以节省RAFT协议传输的数据量。
[0065] S108,追随者节点基于RAFT协议响应上述共识提议,以完成针对第一交易集的所有数据块的默克尔树证明的共识。
[0066] 应理解,本说明书实施例中,RAFT协议的共识对象由传统的交易集数据更换为默克尔树证明,但共识原理并没有改变,因此可以使用传统的RAFT协议逻辑来完成共识。
[0067] S110,在第一交易集的所有数据块的默克尔树证明完成共识后,领导者节点和追随者节点从各自的第一交易集中匹配出达成共识的默克尔树证明所对应的交易,以对匹配出的交易执行写块操作。
[0068] 相较于传统的RAFT协议,由于共识对象由交易集数据更换为默克尔树证明,因此RAFT协议结果所确定的是达成共识的默克尔树证明,需要领导者节点和追随者节点从各自确定交易集中再匹配出相对应的交易,再对匹配出的交易(也理解为达成共识的交易)执行写块操作。
[0069] 这里应理解是,追随者节点侧的第一交易集是通过领导者节点执行RBC协议所同步得到的,而领导者节点侧的第一交易集则本身来源于目标共识节点的交易池。
[0070] 本说明书实施例的方法通过RBC协议和RAFT协议实现共识。在RBC协议阶段,领导者节点利用RBC协议的纠删码传输机制,将作为提议数据的交易集拆分成与追随者节点相对应的数据块,并将拆分成的数据块发送至对应的追随者节点,再由追随者节点相互转发从而分摊了提议数据的传输,以较小的领导者节点的网络带宽和存储空间开销,实现了传输容错性。在RAFT协议阶段,领导者节点以RBC协议结果的数据块的默克尔树证明作为共识对象发起共识提议,从而将达成共识的默克尔树证明匹配回相对应的交易完成写块操作,由于默克尔树证明的数据量相对较小,可以有效减小RAFT协议的执行时间,进而提高共识效率。
[0071] 下面对本说明书实施例的共识方法进行详细介绍。
[0072] 本说明书实施例的方法中,区块链的共识节点基于RBC协议+RAFT协议实现交易的共识上链。这里,设置区块链的共识节点数量为N,拜占庭的共识节点容错数量为f,N>=3f+1。
[0073] RAFT协议把共识节点分为三种,分别是Leader(领导者)、Follower(追随者)、Candidate(候选者):
[0074] Leader:负责日志的同步管理,处理来自客户端的请求,与Follower保持心跳(heartBeat)的联系;
[0075] Follower:刚启动时所有共识节点为Follower状态;响应Leader的日志同步请求;响应Candidate的请求,把请求到Follower的事务转发给Leader;
[0076] Candidate:负责选举投票,RAFT刚启动时由一个节点从Follower转为Candidate发起选举,选举出Leader后从Candidate转为Leader状态。
[0077] 此外,RAFT协议将时间划分成为任意不同长度的任期(Term)。任期用连续的数字进行表示。每一个任期的开始都是一次选举(election),一个或多个Candidate会试图成为Leader。如果一个Candidate赢得了选举,它就会在该任期的剩余时间担任Leader。
[0078] 对应的共识流程如下:
[0079] RBC协议阶段:
[0080] 领导者节点从领导者节点的交易池中选取若干个待共识的交易,构成第一交易集。
[0081] 领导者节点使用纠删码算法按照共识顺序,将第一交易集拆分成与区块链的共识节点一一对应的N个有序的数据块。这里,每个数据块均包含有第一交易集中至少一个交易,并对应有纠删码算法计算得到的默克尔树证明(根哈希)。
[0082] 为便于理解,假设区块链设置有包含领导者节点在内的6个共识节点(其余均为追随者节点),第一交易集中的交易为20个,即tx1至tx20,则第一交易集可以被拆分成6个数据块,即root hash 1至root hash 6。对应地,默克尔树证明和交易的对应关系如下:
[0083] root hash 1:{tx1,tx2,tx3,tx4}
[0084] root hash 2:{tx5,tx6,tx7}
[0085] root hash 3:{tx8,tx9,tx10}
[0086] root hash 4:{tx11,tx12,tx13}
[0087] root hsh 5:{tx14,tx15,tx16}
[0088] root hash 6:{tx17,tx18,tx19,tx20}
[0089] 之后,领导者节点Rval消息向区块链的各追随者节点发送对应的数据块。
[0090] 这里将共识节点1作为领导者节点。如果共识节点2对应有默克尔树证明为root hash 2的数据块,则共识节点1向共识节点2发送的Rval消息携带有默克尔树证明root hash 2;同理,共识节点3对应有默克尔树证明为root hash 3的数据块,则共识节点1向共识节点3发送的Rval消息携带有默克尔树证明root hash 3;……共识节点6对应有默克尔树证明为root hash 6的数据块,则共识节点1向共识节点6发送的Rval消息携带有默克尔树证明root hash 6。
[0091] 之后,追随者节点在接收到领导者节点的Rval消息后,将Rval消息中的默克尔树证明通过Echo消息转发至其他追随者节点。
[0092] 比如,共识节点2向共识节点1、3、4、5、6发送携带有root hash 2的Echo消息;共识节点3向共识节点1、2、4、5、6发送携带有root hash 3的Echo消息……;共识节点6向共识节点1、2、3、4、5发送携带有root hash 6的Echo消息。
[0093] 任意追随者节点在接收到N‑2f个Echo消息后,尝试使用纠删码算法将已接收到的数据块(领导者节点发送的Rval消息中的数据块和其他追随者节点发送的Echo消息中的数据块)还原回第一交易集,并重构第一交易集的默克尔树,以校验重构的默克尔树与接收到的默克尔树证明是否一致。如果一致,则向区块链广播Ready消息。
[0094] 此外,在上述基础之上,任意追随者节点如果从Echo消息和Rval消息中获得数据块不足以还原第一交易集,,也可以向其他追随者节点获取其他追随者节点所接收到的Rval消息中的数据块,以尝试还原第一交易集。
[0095] 之后,针对每个共识节点,当收到f+1个相同的且来自于不同节点的Ready消息时,判断自己是否广播过Ready消息,没有则广播Ready消息;当收到2f+1个来自于不同共识节点的Ready消息时,意味着收到正确的第一交易集,即,领导者节点将自身交易池中的第一交易集正确同步给追随者节点。
[0096] 这里,领导者节点本地维护一个共识执行队列,用于存放待共识的默克尔树证明。领导者节点在将第一交易集拆分成N个数据块后,按照将第一交易集拆分成的N个数据块按序添加至领导者节点的共识执行队列中。
[0097] 在RBC协议阶段结束后,领导者节点从共识执行队列中按序选取默克尔树证明作为共识对象,以发起RAFT协议的共识提议。应理解,如果共识执行队列中的默克尔树证明超出一次共识提议所支持的最大默克尔树证明数量,则领导者节点可以选择发起至少两轮共识提议,来对共识执行队列中的默克尔树证明进行共识。
[0098] RAFT协议阶段:
[0099] 首先,领导者节点将第一交易集的各数据块的默克尔树证明作为提议数据,发起共识提议。共识过程包括:
[0100] 领导者节点将第一交易集的各数据块的默克尔树证明以Log日志的形式分发尝试复制到追随者节点上保存起来。此外,Log日志中还包含了命令,对应的Terms时期号和该Log日志的索引Index。这些Log日志中的附加信息辅助追随者判定日志的合法性和之后的数据同步安全逻辑。
[0101] 日志被复制到追随者节点上不代表这Log日志所包含的命令就生效了,复制完的Log日志还需要经过一个确认提交(commit)的过程。当Leader确认Log日志已经被多数共识节点成功复制后,该Log日志所包含的指令就可以正式提交生效了。
[0102] 在领导者节点认为数据可靠性有保障的时候(条件是在过半数的节点上完成复制),Leader再通知其它共识节点(包括自己)将这条指令在各自的状态机中进行提交(即在状态机中执行)。只要保证每个共识节点的状态机转换逻辑是一致的,执行的指令也是一致的(包括顺序),那么就可以保证所有RAFT节点之间的状态一致性,从而实现共识。
[0103] 在领导者节点的共识执行队列中的所有的默克尔树证明完成共识后,领导者节点和追随者节点从各自的第一交易集中匹配出达成共识的默克尔树证明所对应的交易,以对匹配出的交易执行写块操作。
[0104] 为方便理解,假设root hash 1和root hash 5的默克尔树证明达成共识,则领导者节点和追随者节点对root hash 1对应的交易{tx1,tx2,tx3,tx4}和root hsh 5对应的交易{tx14,tx15,tx16}执行写块操作,也就是交易{tx1,tx2,tx3,tx4 tx14,tx15,tx16}完成上链。
[0105] 以上是对一轮RBC协议+RAFT协议的介绍。应理解,当第一交易集的所有数据块的默克尔树证明完成共识后,若区块链未更换RAFT协议的任期(即未更换领导者节点),则领导者节点还可以继续对领导者节点的交易池中第二交易集执行新一轮的RBC协议(第二交易集为领导者节点的交易池中尚未被领导者节点执行过RBC协议的交易集),并后续针对第二交易集拆分而成的各数据块的默克尔树证明发起RAFT协议的共识提议,以完成第二交易集的上链。
[0106] 此外,在上述基础之上,领导者节点可以对领导者节点本地的共识执行队列进行数据持久化,如果领导者节点发生宕机,则可以在重启后基于领导者节点的持久化数据,将领导者节点的共识执行队列恢复至重启前的状态。
[0107] 以上是对本说明书实施例的方法的介绍。应理解,在不脱离本文上述原理基础之上,还可以进行适当的变化,这些变化也应视为本说明书实施例的保护范围。
[0108] 与上述图1所示共识方法相对应地,本说明书实施例还提供一种区块链的共识节点。
[0109] 图2是本说明书实施例共识节点200的结构图,包括:
[0110] 第一RBC执行模块210,领导者节点对所述领导者节点的交易池中的第一交易集执行可靠广播传输RBC协议,以使用纠删码算法将所述第一交易集拆分成与所述区块链的共识节点相对应的N个数据块,并基于Rval消息向所述区块链的各追随者节点发送对应的数据块,使得追随者节点执行所述RBC协议,通过Echo消息将从Rval消息接收到的相对应的数据块转发至其他追随者节点,并在接收到N‑2f个Echo消息后,基于所述纠删码算法将已接收到的数据块还原成所述第一交易集,其中,所述第一交易集拆分成的数据块对应有基于所述纠删码算法计算得到的默克尔树证明,N为所述区块链的共识节点数量,f为所述区块链的共识节点容错数;
[0111] 第一RAFT执行模块220,所述领导者节点在对所述第一交易集执行完所述RBC协议后,对所述第一交易集的所有数据块的默克尔树证明执行复制和容错RAFT协议,以发起针对所述第一交易集的所有数据块的默克尔树证明的共识提议,使得所述追随者节点基于所述RAFT协议响应所述共识提议,以完成针对所述第一交易集的所有数据块的默克尔树证明的共识;
[0112] 第一写块模块230,在所述第一交易集的所有数据块的默克尔树证明完成共识后,所述领导者节点从所述第一交易集中匹配出达成共识的默克尔树证明所对应的交易,以对匹配出的交易执行写块操作。
[0113] 本说明书实施例的共识节点通过RBC协议和RAFT协议实现共识。在RBC协议阶段,利用RBC协议的纠删码传输机制,将作为提议数据的交易集拆分成与追随者节点相对应的数据块,并将拆分成的数据块发送至对应的追随者节点,再由追随者节点相互转发从而分摊了提议数据的传输,以较小的领导者节点的网络带宽和存储空间开销,实现了传输容错性。在RAFT协议阶段,领导者节点以RBC协议结果的数据块的默克尔树证明作为共识对象发起共识提议,从而将达成共识的默克尔树证明匹配回相对应的交易完成写块操作,由于默克尔树证明的数据量相对较小,可以有效减小RAFT协议的执行时间,进而提高共识效率。
[0114] 可选地,本说明书实施例的共识节点还包括:
[0115] 队列维护模块,在第一RBC执行模块210使用纠删码算法将所述第一交易集拆分成与所述区块链的共识节点相对应的N个数据块后,将所述第一交易集拆分成的N个数据块按序添加至所述领导者节点的共识执行队列中;对应地,第一RAFT执行模块220可以从共识执行队列中按序选取所述第一交易集的数据块的默克尔树证明,以发起至少一轮的共识提议,直至所述第一交易集的所有数据块的默克尔树证明完成共识。
[0116] 可选地,第一RBC执行模块210和第一RAFT执行模块220为串行关系。
[0117] 在所述第一交易集的所有数据块的默克尔树证明完成共识后,若所述区块链未更换RAFT协议的任期,第一RBC执行模块210对领导者节点的交易池中的第二交易集执行新一轮的RBC协议,其中,所述第二交易集是指所述领导者节点的交易池中尚未被所述领导者节点执行过所述RBC协议的交易集。
[0118] 可选地,所述领导者节点的共识执行队列作为所述领导者节点的持久化数据。若领导者节点发生重启,则上述队列维护模块还可以基于所述领导者节点的持久化数据,将所述领导者节点的共识执行队列恢复至重启前的状态。
[0119] 可选地,所述领导者节点在对所述第一交易集的所有数据块的默克尔树证明执行所述RAFT协议时,基于所述RAFT协议的Pre‑prepare消息,将作为本轮共识对象的默克尔树证明发送至其他共识节点。
[0120] 显然,本说明书实施例的共识节点可以作为上述图1所示的方法中领导者节点的执行主体,能够实现该领导者节点在图1所示的方法中对应的功能。由于原理相同,本文不再赘述。
[0121] 与上述图1所示共识方法相对应地,本说明书实施例还提供一种区块链的共识节点。图3是本说明书实施例共识节点300的结构图,包括:
[0122] 接收模块310,接收所述区块链的领导者节点执行RBC协议时所发送的追随者节点相对应的数据块,其中,所述追随者节点相对应的数据块是所述领导者节点对所述领导者节点的交易池中的第一交易集执行可靠广播传输RBC协议,以使用纠删码算法将所述第一交易集拆分成与所述区块链的共识节点相对应的N个数据块,并基于Rval消息向所述追随者节点发送的;
[0123] 第二RBC执行模块320,执行所述RBC协议,通过Echo消息将从Rval消息接收到的相对应的数据块转发至其他追随者节点,并在接收到N‑2f个Echo消息后,基于纠删码算法将已接收到的数据块还原成所述第一交易集,基于所述纠删码算法将已接收到的数据块还原成所述第一交易集,其中,f为所述区块链的共识节点容错数;
[0124] 第二RAFT执行模块330,在所述领导者节点对所述第一交易集的所有数据块的默克尔树证明执行复制和容错RAFT协议,以发起针对所述第一交易集的所有数据块的默克尔树证明的共识提议后,基于所述RAFT协议响应所述共识提议,以完成针对所述第一交易集的所有数据块的默克尔树证明的共识;
[0125] 第二写块模块340,在所述第一交易集的所有数据块的默克尔树证明完成共识后,所述追随者节点从还原的所述第一交易集中匹配出达成共识的默克尔树证明所对应的交易,以对匹配出的交易执行写块操作。
[0126] 本说明书实施例的共识节点通过RBC协议和RAFT协议实现共识。在RBC协议阶段,领导者节点利用RBC协议的纠删码传输机制,将作为提议数据的交易集拆分成与追随者节点相对应的数据块,并将拆分成的数据块发送至对应的追随者节点,再由追随者节点相互转发从而分摊了提议数据的传输,以较小的领导者节点的网络带宽和存储空间开销,实现了传输容错性。在RAFT协议阶段,领导者节点以RBC协议结果的数据块的默克尔树证明作为共识对象发起共识提议,从而将达成共识的默克尔树证明匹配回相对应的交易完成写块操作,由于默克尔树证明的数据量相对较小,可以有效减小RAFT协议的执行时间,进而提高共识效率。
[0127] 显然,本说明书实施例的共识节点可以作为上述图1所示的方法中追随者节点的执行主体,因此能够实现该追随者节点在图1所示方法中对应的功能。由于原理相同,本文不再赘述。
[0128] 图4是本说明书的一个实施例电子设备的结构示意图。请参考图4,在硬件层面,该电子设备包括处理器,可选地还包括内部总线、网络接口、存储器。其中,存储器可能包含内存,例如高速随机存取存储器(Random‑Access Memory,RAM),也可能还包括非易失性存储器(non‑volatile memory),例如至少1个磁盘存储器等。当然,该电子设备还可能包括其他业务所需要的硬件。
[0129] 处理器、网络接口和存储器可以通过内部总线相互连接,该内部总线可以是ISA(Industry Standard Architecture,工业标准体系结构)总线、PCI(Peripheral Component Interconnect,外设部件互连标准)总线或EISA(Extended Industry Standard Architecture,扩展工业标准结构)总线等。所述总线可以分为地址总线、数据总线、控制总线等。为便于表示,图4中仅用一个双向箭头表示,但并不表示仅有一根总线或一种类型的总线。
[0130] 存储器,用于存放程序。具体地,程序可以包括程序代码,所述程序代码包括计算机操作指令。存储器可以包括内存和非易失性存储器,并向处理器提供指令和数据。
[0131] 其中,处理器从非易失性存储器中读取对应的计算机程序到内存中然后运行,在逻辑层面上形成区块链的共识装置,该共识装置可以作为区块链的领导者节点,也可以属于共识主节中的部件。处理器,执行存储器所存放的程序,并具体用于执行以下操作:
[0132] 对领导者节点的交易池中的第一交易集执行可靠广播传输RBC协议,以使用纠删码算法将所述第一交易集拆分成与所述区块链的共识节点相对应的N个数据块,并基于Rval消息向所述区块链的各追随者节点发送对应的数据块,使得追随者节点执行所述RBC协议,通过Echo消息将从Rval消息接收到的相对应的数据块转发至其他追随者节点,并在接收到N‑2f个Echo消息后,基于所述纠删码算法将已接收到的数据块还原成所述第一交易集,其中,所述第一交易集拆分成的数据块对应有基于所述纠删码算法计算得到的默克尔树证明,N为所述区块链的共识节点数量,f为所述区块链的共识节点容错数;
[0133] 在对所述第一交易集执行完所述RBC协议后,对所述第一交易集的所有数据块的默克尔树证明执行复制和容错RAFT协议,以发起针对所述第一交易集的所有数据块的默克尔树证明的共识提议,使得所述追随者节点基于所述RAFT协议响应所述共识提议,以完成针对所述第一交易集的所有数据块的默克尔树证明的共识;
[0134] 在所述第一交易集的所有数据块的默克尔树证明完成共识后,从所述第一交易集中匹配出达成共识的默克尔树证明所对应的交易,以对匹配出的交易执行写块操作。
[0135] 或者,处理器从非易失性存储器中读取对应的计算机程序到内存中然后运行,在逻辑层面上形成区块链的共识装置,该共识装置可以作为区块链的追随者节点,也可以属于共识备份节中的部件。处理器,执行存储器所存放的程序,并具体用于执行以下操作:
[0136] 接收所述区块链的领导者节点执行RBC协议时所发送的追随者节点相对应的数据块,其中,所述追随者节点相对应的数据块是所述领导者节点对所述领导者节点的交易池中的第一交易集执行可靠广播传输RBC协议,以使用纠删码算法将所述第一交易集拆分成与所述区块链的共识节点相对应的N个数据块,并基于Rval消息向所述追随者节点发送的。
[0137] 执行所述RBC协议,通过Echo消息将从Rval消息接收到的相对应的数据块转发至其他追随者节点,并在接收到N‑f个Echo消息后向所述区块链广播Ready消息,以及在接收到2f+1个Ready消息后,基于所述纠删码算法将已接收到的数据块还原成所述第一交易集,其中,f为所述区块链的共识节点容错数。
[0138] 在所述领导者节点对所述第一交易集的所有数据块的默克尔树证明执行复制和容错RAFT协议,以发起针对所述第一交易集的所有数据块的默克尔树证明的共识提议后,基于所述RAFT协议响应所述共识提议,以完成针对所述第一交易集的所有数据块的默克尔树证明的共识。
[0139] 在所述第一交易集的所有数据块的默克尔树证明完成共识后,从还原的所述第一交易集中匹配出达成共识的默克尔树证明所对应的交易,以对匹配出的交易执行写块操作。
[0140] 上述如本说明书图1所示实施例揭示的共识方法可以应用于处理器中,或者由处理器实现。处理器可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器可以是通用处理器,包括中央处理器(Central Processing Unit,CPU)、网络处理器(Network Processor,NP)等;还可以是数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本说明书实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本说明书实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器,处理器读取存储器中的信息,结合其硬件完成上述方法的步骤。
[0141] 应理解,本说明书实施例的电子设备可以实现领导者节点或者追随者节点在图1所示的实施例的功能,本文不再赘述。
[0142] 当然,除了软件实现方式之外,本说明书的电子设备并不排除其他实现方式,比如逻辑器件抑或软硬件结合的方式等等,也就是说以下处理流程的执行主体并不限定于各个逻辑单元,也可以是硬件或逻辑器件。
[0143] 此外,本说明书实施例还提出了一种计算机可读存储介质,该计算机可读存储介质存储一个或多个程序,该一个或多个程序包括指令。
[0144] 其中,上述指令当被包括多个应用程序的便携式电子设备执行时,能够使该便携式电子设备执行图1所示实施例的方法,并具体用于执行领导者节点所对应的以下步骤:
[0145] 对领导者节点的交易池中的第一交易集执行可靠广播传输RBC协议,以使用纠删码算法将所述第一交易集拆分成与所述区块链的共识节点相对应的N个数据块,并基于Rval消息向所述区块链的各追随者节点发送对应的数据块,使得追随者节点执行所述RBC协议,通过Echo消息将从Rval消息接收到的相对应的数据块转发至其他追随者节点,并在接收到N‑2f个Echo消息后,基于所述纠删码算法将已接收到的数据块还原成所述第一交易集,其中,所述第一交易集拆分成的数据块对应有基于所述纠删码算法计算得到的默克尔树证明,N为所述区块链的共识节点数量,f为所述区块链的共识节点容错数。
[0146] 在对所述第一交易集执行完所述RBC协议后,对所述第一交易集的所有数据块的默克尔树证明执行复制和容错RAFT协议,以发起针对所述第一交易集的所有数据块的默克尔树证明的共识提议,使得所述追随者节点基于所述RAFT协议响应所述共识提议,以完成针对所述第一交易集的所有数据块的默克尔树证明的共识。
[0147] 在所述第一交易集的所有数据块的默克尔树证明完成共识后,从所述第一交易集中匹配出达成共识的默克尔树证明所对应的交易,以对匹配出的交易执行写块操作。
[0148] 或者,上述指令当被包括多个应用程序的便携式电子设备执行时,能够使该便携式电子设备执行图1所示实施例的方法,并具体用于执行追随者节点所对应的以下步骤:
[0149] 接收所述区块链的领导者节点执行RBC协议时所发送的追随者节点相对应的数据块,其中,所述追随者节点相对应的数据块是所述领导者节点对所述领导者节点的交易池中的第一交易集执行可靠广播传输RBC协议,以使用纠删码算法将所述第一交易集拆分成与所述区块链的共识节点相对应的N个数据块,并基于Rval消息向所述追随者节点发送的。
[0150] 执行所述RBC协议,通过Echo消息将从Rval消息接收到的相对应的数据块转发至其他追随者节点,并在接收到N‑f个Echo消息后向所述区块链广播Ready消息,以及在接收到2f+1个Ready消息后,基于所述纠删码算法将已接收到的数据块还原成所述第一交易集,其中,f为所述区块链的共识节点容错数。
[0151] 在所述领导者节点对所述第一交易集的所有数据块的默克尔树证明执行复制和容错RAFT协议,以发起针对所述第一交易集的所有数据块的默克尔树证明的共识提议后,基于所述RAFT协议响应所述共识提议,以完成针对所述第一交易集的所有数据块的默克尔树证明的共识。
[0152] 在所述第一交易集的所有数据块的默克尔树证明完成共识后,从还原的所述第一交易集中匹配出达成共识的默克尔树证明所对应的交易,以对匹配出的交易执行写块操作。
[0153] 应理解,上述指令当被包括多个应用程序的便携式电子设备执行时,能够使上文所述的领导者节点或者追随者节点实现图1所示实施例的功能,本文不再赘述。
[0154] 本领域技术人员应明白,本说明书的实施例可提供为方法、系统或计算机程序产品。因此,本说明书可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本说明书可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD‑ROM、光学存储器等)上实施的计算机程序产品的形式。
[0155] 上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
[0156] 以上仅为本说明书的实施例而已,并不用于限制本说明书。对于本领域技术人员来说,本说明书可以有各种更改和变化。凡在本说明书的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本说明书的权利要求范围之内。此外,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都应当属于本文件的保护范围。