一种消除并行投票证明共识算法中分叉问题的方法及系统转让专利

申请号 : CN202111049565.5

文献号 : CN114820183B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 王菡李挥王子贤曹和平国宏宇肖振威

申请人 : 佛山赛思禅科技有限公司深圳市湾区数字经济与科技研究院北京大学深圳研究生院

摘要 :

本发明适用于区块链技术改进领域,提供了一种消除并行投票证明共识算法中分叉问题的方法及系统,包括:S1、并行投票证明共识的轮值记账节点在提交区块组前判断网络是否产生分区;S2、网络恢复后判断节点的最后状态区块组高度a是否高于另一合法区块组高度;S3、少数派节点向多数派节点请求高度为a的区块组信息并检验通过,重写掉自身高度为a的区块组,网络恢复正常。通过延迟落块,定时同步区块组高度的方式来改进PPoV共识算法因网络分区造成的分叉问题,提高了PPoV共识算法的可用性。在实际应用场景中,这种改进能很好地避免因链分叉导致的交易数据混乱等问题。

权利要求 :

1.一种消除并行投票证明共识算法中分叉问题的方法,其特征在于,所述消除并行投票证明共识算法中分叉问题的方法包括以下步骤:S1、并行投票证明共识的轮值记账节点在提交区块组前判断网络是否产生分区,若是,则各分区内继续执行共识算法生成不同区块组并执行下一步,若否,则等下一个区块组落块后提交前一个区块组并执行交易;

S2、网络恢复后判断节点的最后状态区块组高度a是否高于另一合法区块组高度,若否,则节点意识到自身高度为a的区块组需要根据最长链原则重写,若是,则将另一区块组合并到高度为a的区块组中;

S3、少数派节点向多数派节点请求高度为a的区块组信息并检验通过,重写掉自身高度为a的区块组,网络恢复正常。

2.根据权利要求1所述的消除并行投票证明共识算法中分叉问题的方法,其特征在于,所述步骤S3中在恢复网络通信后需要根据区块组中新加入的节点数目值选定得到验证节点投票较多的轮值记账节点继续生成下一区块组。

3.根据权利要求2所述的消除并行投票证明共识算法中分叉问题的方法,其特征在于,在少数派网络与多数派网络中的节点上,区块组虽然头部信息不同,但均是合法的。

4.根据权利要求3所述的消除并行投票证明共识算法中分叉问题的方法,其特征在于,所述步骤S2中在节点同步区块组高度时从当前高度去请求,如发现某节点的区块组与自身当前高度的区块组不同且该节点的区块组高度大于自己,则需要重写当前高度区块组。

5.一种消除并行投票证明共识算法中分叉问题的系统,其特征在于,所述消除并行投票证明共识算法中分叉问题的系统包括分区判断模块,用于并行投票证明共识的轮值记账节点在提交区块组前判断网络是否产生分区,若是,则各分区内继续执行共识算法生成不同区块组并执行下一步,若否,则等下一个区块组落块后提交前一个区块组并执行交易;

区块高度判断模块,用于网络恢复后判断节点的最后状态区块组高度a是否高于另一合法区块组高度,若否,则节点意识到自身高度为a的区块组需要根据最长链原则重写,若是,则将另一区块组合并到高度为a的区块组中;

重写恢复模块,用于少数派节点向多数派节点请求高度为a的区块组信息并检验通过,重写掉自身高度为a的区块组,网络恢复正常。

6.根据权利要求5所述的消除并行投票证明共识算法中分叉问题的系统,其特征在于,所述重写恢复模块中在恢复网络通信后需要根据区块组中新加入的节点数目值选定得到验证节点投票较多的轮值记账节点继续生成下一区块组。

7.根据权利要求5所述的消除并行投票证明共识算法中分叉问题的系统,其特征在于,在少数派网络与多数派网络中的节点上,区块组虽然头部信息不同,但均是合法的。

8.根据权利要求5所述的消除并行投票证明共识算法中分叉问题的系统,其特征在于,所述区块高度判断模块中在节点同步区块组高度时从当前高度去请求,如发现某节点的区块组与自身当前高度的区块组不同且该节点的区块组高度大于自己,则需要重写当前高度区块组。

说明书 :

一种消除并行投票证明共识算法中分叉问题的方法及系统

技术领域

[0001] 本发明属于区块链技术改进领域,尤其涉及一种消除并行投票证明共识算法中分叉问题的方法及系统。

背景技术

[0002] 近年来,随着产业信息化、数字化、网络化进程加速和智能终端的普及,互联网已经成为人类社会发展的驱动力之一,和人们生活紧密联系在一起。2018年,中国互联网用户总量达到8亿,世界范围内的互联网用户超过40亿,每天在互联网产生的数据量超过5万亿字节。互联网的匿名性和低门槛在方便人们生活的同时也提供了给木马、病毒等恶意程序滋生的温床。为了抵抗各种层出不穷的攻击手段,越来越多的新技术不断涌现。
[0003] 区块链技术的发展最早可追溯至中本聪于2008年发布的白皮书《比特币:一种点对点的电子现金系统》,因其完全去中心化和账本防篡改的特性受到人们的青睐。区块链是一类具有防篡改容错能力的分布式存储技术,通过链式结构、哈希算法、非对称加密等技术保证数据的安全性。和传统的分布式存储技术一样,区块链也需要通过共识算法协调各个节点的运行,以确保各个节点所存储数据的一致性。比特币作为应用最为广泛的区块链系统,具备数据防篡改等众多优点。
[0004] 随着政策的保障和行业的发展,区块链在众多领域的应用落地在不断加快,如金融贸易、公共服务行业、旅游业、智慧教育、餐饮业、物流业、医疗建设等多个行业领域。
[0005] 区块链的结构大致可以分为6个层级,分别是数据层、网络层、共识层、激励层、合约层以及应用层。
[0006] 数据层是最底层,主要包含数据的存储和交易的记录两方面的功能,该层中拥有链式结构、哈希函数等最基础的逻辑结构;
[0007] 网络层用来实现节点之间的相互通信,具有数据传输和验证的功能;
[0008] 共识层是区块链的核心部分,封装了各类共识算法,主要用于实现区块,区块头生成和交易数据的共识。从多方面考量来选择共识算法,有利于区块链数据的安全和交易过程的便捷,防御各类无意或者恶意的共识攻击;
[0009] 激励层主要负责对挖矿节点激励机制的引入,例如对挖掘新区块的矿工进行数字代币分配,鼓励其挖矿工作;
[0010] 合约层主要包括编写的智能合约和各类脚本,使区块链获得可编程的应用属性;
[0011] 应用层则是区块链在实际业界场景中的具体应用,主要体现为各种可编程的货币。
[0012] 其中前三层是区块链架构中必不可少的,后三层则可以按实际场景的需求进行灵活的调整。
[0013] 根据应用场景与参与节点运行网络开放性的不同,区块链可分为公有链、私有链以及联盟链。公有链是对全网开放的,网络之中任何用户节点都可以自由参加或离开区块链系统,大家的权限是平等的;私有链中,某个组织或节点完全控制着区块或者区块组的生成权限,这类似于一个集中式的系统;联盟链则介于公有链和私有链之间,由几个成员参与管理,给不同的节点授予不同的权限和身份,共同维护区块链系统。
[0014] 但是比特币所采用的共识算法存在浪费能源和效率低下的缺点,使其难以应付其他高吞吐量的应用场景。针对其吞吐量低的缺陷,人们对比特币的共识算法进行优化或者设计新的共识算法作为区块链的共识算法。
[0015] 投票证明(PoV,Proof of Vote)共识算法设计了特定的角色模型,将区块链网络内的节点分类为委员(Commissioner)、管家(Butler)、候选管家(Butler Candidate)和普通用户(Ordinary User)四种角色。委员是区块链网络中的权威,它们共同对整个区块链进行管理,所有事务需要经过大部分委员同意才可执行。
[0016] 候选管家可由普通用户申请加入后转变而成。管家则从候选管家中选举产生,当普通用户成为候选管家后,便获得了被选成为管家的资格。选举的过程由委员进行,在投票阶段,每个委员需要对各个候选管家进行投票,获票数较多的Nb个节点将成为管家节点。管家节点主要负责收集事务和产生区块,每一轮的区块产生过程由一个管家负责进行,该管家被称为值班管家,由上一轮产生的区块随机指定。PoV共识算法中还规定了每产生M个普通区块后则需要对候选管家重新进行投票,从而产生出下一任管家,投票信息及其结果存储在第M+1个区块中。在产生该区块后即开始下一个区块打包的周期,同时上一周期的管家转变为候选管家,失去产生区块的权力,取而代之的是特殊区块指定的候选管家将转变为管家,负责新一轮区块的打包。
[0017] 该算法通过共识生成一个新区块的过程有两种身份的节点共同参与,即一个需要生成新区块的管家节点和负责审核投票的所有委员节点,此时,这个产生区块的管家的名字为值班管家(Duty Butler),值班管家通过委员们选举出的管家编号确定。假设参与该区块生成过程的委员共有n个,分别为C1,C2,…,Cn,充当该轮共识过程的管家节点共有m个,分别为 B1,B2,…,Bm,PoV算法的整体共识过程,如图1所示,其展示了一个区块生成提交的全过程。PoV共包含有预准备(Prepare)、准备(Ready)、提交(Commit)和确认(Confirm)总共四个过程,其中Confirm过程为区块生成完毕后的提交过程,所以不会传递信息。
[0018] 每个区块由一个区块头以及与此次共识有关的若干笔交易构成。在 Prepare过程中,负责计算该轮生成区块的值班管家节点会将该轮共识过程中交易储备池中的若干笔交易事务取出并合并生成预区块,随后,值班管家节点会将生成的预区块传输给全部委员节点。区分预区块和完整的真正区块的方法在于观察该区块是否有时间戳、所有委员的认证信息和下一个负责区块生成的值班管家的序号。
[0019] 委员节点需要对接收到的预区块的区块头和若干交易信息进行查验,若查验成功则对预区块头进行签名认证并将该认证传输给值班管家。值班管家在接收到大于n/2的委员认证后即可将预区块补充完整并最终成为正式区块。
[0020] 所有收到本次生成的新发布区块的节点会把该区块存储在自己节点的本地区块链中,并更新相应的一些信息和数据,如下次的值班管家编号,从而确认生成下一个新区块的值班管家。对预区块头的完整性补充靠的是所有委员的投票签名,PoV中规定以投票最迟的委员认证时间作为区块的真正生成时间,而下一个值班管家序号则通过对投票签名进行哈希运算等计算产生。这些方法利用的是投票的不可预测性和防篡改性,由于每个委员节点所生成的投票都是无序且随机的,因此通过哈希运算得到的下一个值班管家节点序号也具有随机性。
[0021] PoV在每个共识周期内只允许一个管家产生区块,每轮共识只产生一个区块,而其他管家则处于空闲状态,因此其区块产生过程也是串行化的。然而由于PoV的通信复杂度为O(3Nc),Nc为委员数量,值班管家需要把产生的区块发送给所有委员请求签名,因此当委员节点数量增加时,PoV 的数据吞吐量将会以线性下降,这给PoV的可扩展性带来不利影响。
[0022] 此外,由于PoV中的下一个值班管家编号是通过对区块中的委员签名进行计算得到的,而值班管家在收集签名并存放在区块头中时可以对这些签名进行任意的排列组合从而改变下一个值班管家编号,因此存在自私挖矿的可能性。
[0023] 并行投票证明(PPoV,Parallel Proof of Vote)是一种并行投票证明的共识机制,是在PoV的基础上改进的共识算法,继承了PoV在通信复杂度、安全性、可监管性、公平性等方面的机制,并且以并行产生区块的设计解决了PoV可扩展性差的缺陷,算法获得高事务处理吞吐量和良好的可扩展性。PPoV共识定义区块链上数据以区块组的形式存储。区块组由区块组头和区块组体组成。每个区块组头中包含当前区块组的高度和投票结果。区块组体则包含所有通过投票的区块集合。其中,每个区块包含前一区块组的hash值、默克尔根、生成者的公钥、时间戳等信息和事务集合。算法延续了节点投票权和记账权分离的思想,共设计了验证节点、记账节点、候选记账节点、轮值记账节点和普通节点共五种身份的节点。验证节点具有投票的权力,在共识中对区块数据进行投票,所有验证节点投票权重相等,只有获得50%以上赞同票的区块才能够成为合法区块。记账节点是区块链记账功能的承载者,负责的工作包括收集网络节点产生的事务数据、将事务打包为区块、广播区块、提交区块组等。候选记账节点不具备直接参与共识过程的能力,但具有被验证节点选举成为记账节点的资格。在系统运行的任意时刻,存在唯一的轮值记账节点负责收集验证节点产生的投票信息,并进行统计,该节点从记账节点中选出,选举方式与PoV共识相同。普通节点无法加入到共识过程,但可以收到其他节点发送的区块链数据,也可以发布事务。
[0024] PPoV把产生一个区块组所需执行的所有操作称为一轮共识,通常要求完成一轮共识的时间不超过一个最大值,该值被称为超时时间。共识过程由记账节点和验证节点共同完成。每个记账节点在一轮共识开始后各自产生一个区块并广播到网络当中,网络中所有节点均需收集这些区块。验证节点在收集到所有记账节点产生的区块后对这些区块进行验证并向轮值记账节点发送投票,投票中包含了验证节点的签名以及各个区块的哈希值和验证结果。轮值记账节点负责收集和统计投票,获得超过半数验证通过票的区块可成为合法区块可被存储至最终产生的区块组中,获得超过半数验证失败票的区块为非法区块。轮值记账节点需要将投票列表和投票结果存储在区块组头中,最后将区块组头广播至网络当中。接收到区块头和所有合法区块的节点将其组装为完整的区块组并存储在本地区块链当中。
[0025] PPoV因为会有超过一个记账节点并行处理事务,这样的设计有效预防了系统可能出现的宕机问题,但也引入了区块链的分叉。若轮值记账节点处于同步区块头时发生了网络分区,并且其处于少数派网络。那么其他节点就会再产生一个轮值记账节点并且产生相同高度的区块组,当网络恢复的时候两个相同高度并且都有效的区块组就会让区块链产生分叉。

发明内容

[0026] 本发明的目的在于提供一种消除并行投票证明共识算法中分叉问题的方法及系统,旨在解决PPoV算法中存在的分叉问题,采用同步自身高度、延迟落块等方式的技术问题。
[0027] 本发明是这样实现的,一种消除并行投票证明共识算法中分叉问题的方法,所述消除并行投票证明共识算法中分叉问题的方法包括以下步骤:
[0028] S1、并行投票证明共识的轮值记账节点在提交区块组前判断网络是否产生分区,若是,则各分区内继续执行共识算法生成不同区块组并执行下一步,若否,则等下一个区块组落块后提交前一个区块组并执行交易;
[0029] S2、网络恢复后判断节点的最后状态区块组高度a是否高于另一合法区块组高度,若否,则节点意识到自身高度为a的区块组需要根据最长链原则重写,若是,则将另一区块组合并到高度为a的区块组中;
[0030] S3、少数派节点向多数派节点请求高度为a的区块组信息并检验通过,重写掉自身高度为a的区块组,网络恢复正常。
[0031] 本发明的进一步技术方案是:所述步骤S3中在恢复网络通信后需要根据区块组中新加入的节点数目值选定得到验证节点投票较多的轮值记账节点继续生成下一区块组。
[0032] 本发明的进一步技术方案是:在少数派网络与多数派网络中的节点上,区块组虽然头部信息不同,但均是合法的。
[0033] 本发明的进一步技术方案是:所述步骤S2中在节点同步区块组高度时从当前高度去请求,如发现某节点的区块组与自身当前高度的区块组不同且该节点的区块组高度大于自己,则需要重写当前高度区块组。
[0034] 本发明的另一目的在于提供一种消除并行投票证明共识算法中分叉问题的系统,其特征在于,所述消除并行投票证明共识算法中分叉问题的系统包括:
[0035] 分区判断模块,用于并行投票证明共识的轮值记账节点在提交区块组前判断网络是否产生分区,若是,则各分区内继续执行共识算法生成不同区块组并执行下一步,若否,则等下一个区块组落块后提交前一个区块组并执行交易;
[0036] 区块高度判断模块,用于网络恢复后判断节点的最后状态区块组高度 a是否高于另一合法区块组高度,若否,则节点意识到自身高度为a的区块组需要根据最长链原则重写,若是,则将另一区块组合并到高度为a的区块组中;
[0037] 重写恢复模块,用于少数派节点向多数派节点请求高度为a的区块组信息并检验通过,重写掉自身高度为a的区块组,网络恢复正常。
[0038] 本发明的进一步技术方案是:所述重写恢复模块中在恢复网络通信后需要根据区块组中新加入的节点数目值选定得到验证节点投票较多的轮值记账节点继续生成下一区块组。
[0039] 本发明的进一步技术方案是:在少数派网络与多数派网络中的节点上,区块组虽然头部信息不同,但均是合法的。
[0040] 本发明的进一步技术方案是:所述区块高度判断模块中在节点同步区块组高度时从当前高度去请求,如发现某节点的区块组与自身当前高度的区块组不同且该节点的区块组高度大于自己,则需要重写当前高度区块组。
[0041] 本发明的有益效果是:通过延迟落块,定时同步区块组高度的方式来改进PPoV共识算法因网络分区造成的分叉问题,提高了PPoV共识算法的可用性。在实际应用场景中,这种改进能很好地避免因链分叉导致的交易数据混乱等问题。

附图说明

[0042] 图1是管家节点和委员节点的示意图。
[0043] 图2是网络中的各个节点示意图。
[0044] 图3是本发明实施例提供的区块组高度和节点分区后示意图一。
[0045] 图4是本发明实施例提供的区块组高度和节点分区后示意图二。
[0046] 图5是本发明实施例提供的区块组高度和节点分区后示意图三。
[0047] 图6是本发明实施例提供的消除并行投票证明共识算法中分叉问题的方法的流程图。

具体实施方式

[0048] 如图6所示,本方案着眼于解决PPoV算法中存在的分叉问题,采用同步自身高度、延迟落块等方式的技术问题。
[0049] PPoV算法在进行事务处理并封装打包时,是通过验证节点投票选举出的轮值记账节点来负责的,每段时间内该轮值记账节点只有一个,且轮值记账节点轮换的投票也需要当前轮值记账节点进行处理,这就很容易导致一个问题,即若轮值记账节点出现宕机,则计算下一个轮值记账节点的序号的过程就无法再进行下去,PPoV系统就会陷入瘫痪,如图2所示。此外,当网络发生如下两种分区时,也会存在宕机问题:①多数的验证节点和轮值记账节点被隔离在一个分区,少数的其他节点被隔离在另一个分区。
[0050] ②少数的验证节点和轮值记账节点被隔离在一个分区,多数的其他节点被隔离在了另一个分区。
[0051] 在第一种情况下,PPoV算法在运行过程中,只有少量验证节点的那部分网络会因为没有轮值记账节点的工作而陷入停滞,而另一部分节点则由于在算法中需要计算出下一个轮值记账节点,但轮值记账节点没有在此分区之内,则后续共识过程也将陷入停滞。
[0052] 第二种情况则是少数验证节点和轮值记账节点被隔离在同一个分区,此时轮值记账节点想要生成区块组,但是经过不断的通信和等待,始终不会收到多数验证节点的投票,生成新区块组也就无从谈起;另外一个分区虽然拥有多数的验证节点,但是因为PPoV共识算法中没有重新选举的机制,所以验证节点也无法再获得交易验证的请求,此时无论哪个分区均不能正常运行。故此方案引入超时重选机制来解决PPoV中存在的宕机问题。
[0053] 此外,PPoV算法中轮值记账节点的选举是由验证节点投票产生随机数从而指定的。原有随机数生成算法统计的是最新的验证节点投票,而没有充分考虑其他验证节点的前序投票。故此方案对随机数的生成算法也进行了改进。
[0054] 假设目前整个的共识网络存在{P1,P2,P3,P4,P5,P6,P7}七个节点,此时P1节点是轮值记账节点,并且此时网络正处于将区块组提交的同步阶段。假设P1节点已经将高度为a的区块组信息同步给了{P1,P2, P3}节点,那么{P1,P2,P3}节点就会认可高度a的区块组头,并将其提交。
[0055] 但是此时网络产生问题,并出现了{P1,P2,P3}和{P4,P5,P6,P7} 两个网络分区。此时,可以发现,{P1,P2,P3}节点高度为a,但是{P4, P5,P6,P7}的高度为a‑1,那么,对前三个节点来说,他们可以进入高度为a+1的区块组的共识生成过程,此时,若轮值记账节点在某一轮轮换为 P2节点,则P2会等待多数验证节点的投票,显而易见的,他收不到多数派节点投票,因为多数派节点位于另一个网络分区内。因此,在P2等待完一个超时时间后,轮值记账节点就会替换给P3,P3会重复P2的运行逻辑,自然也就无法得到多数验证节点的认可,那么{P1,P2,P3}集合里的节点就会一直处于轮值记账节点的轮换,但是始终无法产生新的区块组,如图3所示。
[0056] 此时对于{P4,P5,P6,P7}网络分区的节点来说,因为网络分区的存在它们无法收到高度为a的区块组信息,那么它们在等待一个超时时间后就会发生轮值记账节点的更换,并重新生成区块组。但是下一个轮值记账节点P2节点因为也无法联通也会超时,那么就会一直等到P4节点作为轮值记账节点。P4节点会重新进行高度为a的区块组的生成。但是此区块组与P1生成的高度为a的区块组是不同的(产生者不同,因为另一个分区的节点无法参与区块组的生成),此时,可以认为P1生成的高度a的区块组为a,P4生成的高度a的区块组为a1。同时,因为这些节点处于多数派,它们还可以继续生成高度a1+1,a1+2,a1+3的新区块组,如图4所示。
[0057] 此时,可以发现,如果算法继续运行下去,网络内已经产生的分叉就无法进行修复了,那么现有的算法是无法处理并恢复这种情况的。假设网络此时恢复了正常,那么{P1,P2,P3}节点会发现{P4,P5,P6,P7}节点的高度比自己高,那么它们就要去向{P4,P5,P6,P7}四个节点去请求a 之后的区块组a+1。但是实际上另外几个节点目前的下一个区块组是a1+1,当{P1,P2,P3}请求该区块组时,会发现其区块组头信息和a不匹配,所以不能成功的把该块合并到a上。
[0058] 此时算法原理事实上已经出现了问题,{P1,P2,P3}和{P4,P5,P6, P7}都认为自己高度为a的区块组信息是有效的。并且从算法角度来讲,这两个高度为a的区块组的确是都有效的,因为它们都是轮值记账节点产生的。在这种情况下,网络出现了不可恢复的分叉。
[0059] 可以看到,此问题产生的原因在于轮值记账节点处于同步区块组阶段时发生了网络分区,并且其处于少数派网络。那么其他节点就会再产生一个轮值记账节点并且生成相同高度的区块组,当网络恢复的时候两个相同高度并且都有效的区块就会让网络产生分区。
[0060] 从理论上讲,本文的共识机制在改进后如果遇到网络分区的问题的情况是不可避免的,主要是看如何从分叉状态恢复到正常状态。
[0061] 首先在网络恢复到正常的时候,节点的最后状态是{P1,P2,P3}目前区块组的高度为a,并发现{P4,P5,P6,P7}的合法区块组高度高于自己,同时它会发现这几个节点上除了头部信息和自己不同外其实也是合法的。
[0062] 此时{P1,P2,P3}就可以认为自己处于一个少数派网络并发生了网络分区恢复,那么它们就意识到自己高度为a的区块组需要根据最长链原则被重写。这样{P1,P2,P3}就需要向{P4,P5,P6,P7}请求高度为a的区块组信息并检验通过重写掉自己高度为a的区块组,这样网络就可以恢复到正常。
[0063] 但是此时会引申出另外一个问题,如果{P1,P2,P3}已经提交了高度为a的区块组并修改了状态数据库,那么它在接收到a1的区块组时需要重新对状态数据库进行修改。此时有两种提交办法,一种是直接去修改,那么因为a区块组中已经执行过的交易的影响,就会造成{P1,P2,P3}和{P4, P5,P6,P7}的数据不同步;另一种是把状态数据库恢复到区块组a生成之前的区块组时的状态,并在P1,P2,P3上重新进行a1中所打包的交易,此时虽然最终状态一样但是会造成用户端的紊乱。
[0064] 所以出于对其可用性的增强考虑,可以稍微对性能进行一点牺牲,即节点在接收到一个区块组时,先不要对该区块组进行提交,因为他无法判断该区块组后期是否会被覆盖重写。根据最长链的原则,要等到收到下一个区块组生成认可的消息后才提交当前的区块组,如图5所示。
[0065] 在具体实现上可以对原来的PPoV共识方案主要修改两点。一是节点需要延迟提交区块组,需要等下一个区块组落块才能提交前一个区块组。二是节点同步区块组高度时从当前高度去请求,如果发现某节点的区块组与自己当前高度的区块组不同并且该节点的区块组高度高于自己,就需要重写当前高度区块组。在恢复网络通信后,则需要根据区块中新加入的节点数目值,选定得到验证节点投票较多的记账节点作为轮值记账节点,继续生成下一区块组。
[0066] 本方案提出了延迟落块,定时同步区块组高度的方式来改进PoV共识算法因网络分区造成的分叉问题,提高了PPoV共识算法的可用性。在实际应用场景中,这种改进能很好地避免因链分叉导致的交易数据混乱等问题。
[0067] 本发明针对在网络环境不稳定、网络易出现分叉的场景下,PPoV共识算法会因不同轮值记账节点并行工作而产生高度相同内容不同的区块组的问题进行改进。首先分析了出现该现象的原因,随后提出了采用延迟落块、定期同步其他节点区块组高度并重写当前高度区块组的方法,很好地解决了PPoV共识算法中存在的链分叉问题。
[0068] 以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。