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