一种稳定可靠的区块链拜占庭共识流程设计方法与流程

文档序号:19418929发布日期:2019-12-14 01:13阅读:367来源:国知局
一种稳定可靠的区块链拜占庭共识流程设计方法与流程

本发明涉及区块链底层共识流程的优化设计,特别是一种稳定可靠的区块链拜占庭共识流程设计方法。



背景技术:

区块链技术不断被应用推动发展,从几十分钟建一个块的比特币到现在1秒一个块的新型区块链,应用对区块链的要求越来越高。在这么苛刻环境下区块链的共识系统显得极不稳定和可靠。

现有的基于共识算法实现的区块链系统,其共识步骤包含以下几步:

(1)每个节点创建交易映射图并广播;

(2)每个节点收集齐所有节点的交易映射图后,通过运算取到公共交易交集;

(3)建块节点创建区块并广播;

(4)非建块节点收到块后进行验证并投票,同时将投票结果广播出去;

(5)每个节点收集齐所有节点转发的投票信息,根据拜占庭共识算法计算得出最终投票结果(成功或者失败)。

以上步骤虽然实现了分布式区块链系统的共识流程,但稳定性较差,实际的网络环境可能会出现各种各样的问题,网络延迟,网络断线都可能会使得区块链的共识流程异常中止。区块链各个节点是完全独立运行的进程,在共识过程中都是相互等待结果的串行流程计算,如果某个节点出现假死或者恶意假死,那么整个区块链就会陷入瘫痪状态。例如,在第二步骤中,某两个节点间网络通信不畅,导致这两个节点的交易映射图的数量均缺少一个,则系统卡在等待数据的阶段,不能往下运行。所有需要检查通信数据数量的步骤都存在此问题。

另外,理想情况下的多个区块链节点应该工作在共识流程同一高度的同一步骤,并且同步运行,但由于分布式的区块链系统并没有中心化的流程控制,在实际运行中,各个节点可能工作在不同高度,或者工作在同一高度的不同步骤,因此要使用一定的手段来确保共识流程中的通信消息没有发生混乱,且各个节点的整体步调大致相同。

本发明提供了一些区块链底层共识流程的优化设计,用于解决区块链系统中可能存在的问题,并使系统更加稳定可靠,本发明同样适用于pbft、cbft等共识算法,本文明仅以pbft为例进行说明。



技术实现要素:

本发明针对现有区块链共识系统存在的问题,提供了一些可靠性的解决方案。

本发明提出一种稳定可靠的区块链拜占庭共识流程设计方法,其特征包含以下几点:

(1)系统在等待收集其他节点发来的数据,包括但不限于交易数据,区块数据,投票数据等时,设置超时时间,超时后进入超时处理流程;

(2)超时处理根据已收集到的数据区分容错范围内处理和容错范围外的处理;

(3)共识流程内的通信数据携带数据对应的高度信息,数据接收时会对高度进行筛选,不符合高度要求的数据不进入共识;

(4)系统内任意异常都经过了妥善处理,不会影响共识流程。

进一步的,对于特征(1),具体为:

(1)超时机制是指在每个步骤中规定了最长运行时间,如果正常时间内完成处理那么程序是正常的,如果当前步骤的运行时间达到了最长运行时间而处理尚未完成,那么当前步骤的处理终止,进入超时处理流程;

(2)所有涉及到节点间通信,需要等待返回信息的处理都应使用超时机制;

(3)如果进入了超时处理流程,不管超时处理流程如何设置,处理完成后立即执行到下一步骤。

进一步的,对于特征(2),具体为:

(1)超时处理根据已收集到的数据区分容错范围内处理和容错范围外的处理;

(2)容错范围内的处理逻辑应该与未超时的处理逻辑相符;

(3)容错范围外的处理不应使共识流程停止。

系统在一个轮次共识完成后,不管是超时结束还是正常结束,节点都会立即准备进入下一轮共识,这样循环下去,具体为:

(1)当前节点等待区块链节点的交易信息时,设置阈值超时机制,不管超时与否本节点都会进入下一步计算;

(2)当前节点在等待建块节点的区块信息时,设置阈值超时机制,不管超时与否本节点都会进入下一步计算;

(3)当前节点在等待其他节点投票信息时,设置阈值超时机制,不管超时与否本节点都会进入下一步计算;

(4)当前节点走完这一轮共识后,不管是超时完成还是正常完成,结果成功还是失败,当前节点都会进入到下一轮共识计算。

进一步的,对于特征(3),具体为

(1)共识流程内的通信数据携带数据对应的高度信息,数据接收时会对高度进行筛选;

(2)当前节点可以接受当前高度以上的交易信息,当前节点可以接受当前高度以上的交易信息,使用高度作为key存入对应的缓存池;

(3)每轮次共识时从交易缓存中取出当前高度的交易信息。

进一步的,对于特征(4),具体为:

各个节点在任何情况下都能保证系统正常运行,包括但不限于以下情况:

(1)节点网络出现故障又恢复后,节点正常运行,正常共识,

(2)节点进程被意外停掉后又重新启动,节点能正常运行,正常参与共识,

(3)节点内部出现任何异常,都有相应异常处理流程,不影响节点的正常运行,

(4)把系统中可能会出现的全部异常进行分类:系统级别异常和业务级别异常。系统级别异常将节点强制退出区块链生态系统;对业务级别异常,系统采用适当的方式处理,不影响系统运行。

本发明通过使用超时机制、高度标记的缓存池及异常分类处理等方法,优化了区块链的共识流程,使系统更加稳定可靠。

附图说明:

图1是经典的区块链共识流程图,

txpool是系统级别的交易缓存池,从start到处理投票结果是一次共识流程。其中流程中的txcache是这次共识中交易tx缓存。

图2是交易缓存设计图,

txpool是系统级别的交易缓存池,存储着当前高度以上的交易数据,txcache是共识级别的交易缓存池,生命周期和共识是一样的,共识start时候就存在,一次共识结束后也跟着消失。

具体实施方式:

在以下的叙述中,为了使读者更好的理解本申请而提出了许多技术细节,但是,本领域的普通技术人员可以理解,即使没有这些技术细节和基于以下各实施方式的种种变化和修改,也是本申请各权利要求所要求保护的技术方案。

为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明的实施方式作进一步地详细描述。

如图1所示本发明是针对区块链共识系统的稳定可靠而发明的技术,设计到区块链数据结构、算法设计等领域,具体实现步骤如下:

假设节点数量为m,当前高度为h,每轮共识最多处理交易数为n,当前轮次扫描到交易数量为n。

从start起开始一轮共识。节点从交易池txpool中取出n个交易,如果交易池中有交易但数量不足n,则最多等待t1时间,超过t1时间交易数仍然不足n则退出等待。将取出的n个交易(0<n<=n)标记上高度h放入txcache缓存池,且将这n个交易从txpool中删除。

将n个交易转换为交易映射图,携带当前高度h信息一起广播至其他各个节点。

发出交易映射图后当前节点等待接收其他节点发来的映射图。接收映射图时检查高度,只有高度大于等于h的数据才进行接收,接收数据使用高度作为key放入映射图缓存池中。

节点从映射图缓存池中获取key为h的映射图集合。如果来自不同节点的交易映射图的数量等于节点数m(包括当前节点自己的映射图),则继续下个步骤。数量不足时等待,直至到达设置的超时时间t2,则不再等待,进入下个步骤。

不论交易映射图接收数量为多少,进行交易交集的运算。根据拜占庭理论,超过三分之二节点数m的交易记为公共交易。

建块节点根据公共交易进行建块,将块数据及高度标记h一起广播至其他各个节点。

其他节点计算完公共交易后开始等待接收块,接收块时检查高度,高度大于等于h的数据才进行接收,接收的块使用高度作为key放入块缓存池中。如果在超时时间t3内接收到高度为h的块则继续下个步骤,若没收到块且已到达超时时间则不再等待,继续下个步骤,在验证时须投反对票。

节点从块缓存池中取出key为h的块进行验证,验证后得到的投票结果随高度标记h一起广播至其他各个节点。

各个节点同样使用高度筛选及key为高度的缓存池进行接收,进行数量检查时设置超时时间t4,等待时间超过t4则进入下个步骤。

节点将收到的各个节点投票标记高度h进行转发。

各个节点使用高度筛选及key为高度的缓存池接收转发数据,进行数量检查时使用超时时间t5,数量符合节点数或等待到达超时时间t5则进入投票的统计步骤。

各个节点根据拜占庭算法统计得到最终结果,如果投票通过则存储块,高度加1,投票不通过则高度不增加。未能存储的交易信息从txcache中退回至txpool,存储入库的交易从txcache中直接删除。

进行下一轮共识时从txpool中再次取出交易。

每个步骤都设置异常处理代码,保证特意异常都不会影响流程的进行。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1