一种基于块片的BFT共识算法带宽使用率改进方法与流程

文档序号:16512349发布日期:2019-01-05 09:25阅读:271来源:国知局
一种基于块片的BFT共识算法带宽使用率改进方法与流程

本发明涉及去中心化的区块链bft共识算法交易池的设计领域,尤其涉及一种基于块片的bft共识算法带宽使用率改进方法。



背景技术:

区块链技术,区块链是一种新型去中心化协议,能安全地存储数字货币交易或其他数据,信息不可伪造和篡改,区块链上的交易确认由区块链上的所有节点共同完成,由共识算法保证其一致性,区块链上维护一个公共的账本,公共账本位于存储区块上任何节点可见,从而保证其不可伪造和篡改。

传统联盟区块链主要采用bft共识算法,其交易双次全广播的设计导致严重的节点带宽压力,尤其是主节点的出口带宽,尽管bft现在已经有了很多改进和变种版本,大多都是对于共识一致性的保障和可用性增强上,对于如何动改进共识广播机制却一直都是空白的状态。就拿pbft算法来说,一条新交易在一个节点接收后就进行广播,主节点打包时又进行一次全网广播,一旦节点数量增加,带宽压力将会成倍上升,如何解决bft共识算法的广播机制问题是将区块链技术运用于实际的一项挑战。



技术实现要素:

针对现有技术的不足,本发明提出一种基于块片的bft共识算法带宽使用率改进方法,既保证了bft算法的有效性,同时又解决了bft算法广播机制存在冗余的问题。本发明的目的是通过以下技术方案来实现的:

一种基于块片的bft共识算法带宽使用率改进方法,其特征在于,该方法具体包括如下步骤:

s1:区块链节点接收到客户端发起的交易请求后,首先验证交易体的格式正确性,再验证交易的签名,最后进行交易的去重,通过全部验证的交易被放到节点的交易池中;当交易池中存储的交易数量达到交易池的大小限制或者规定时间窗口中不再接收到新的交易后,该区块链节点将这部分交易打包成一个块片,放入交易块片池中,并将该交易块片广播给全网所有节点,同时删除交易池中已被打包成交易块片的交易;且一个节点接收到其他节点的交易块片,均会将该交易块片放入自己的交易块片池中;

s2:当主节点的交易块片池中得到一定量的交易块片或者在规定时间窗口中不再接收到新的交易块片后,主节点将这部分交易块片进行排序后打包成一个区块,并将这部分交易块片从交易块片池中删除;然后主节点将一个区块中的交易块片的哈希按序组成数组并标上区块编号放在预准备消息中,并广播给全网的所有节点,然后所有共识的节点开启bft共识的三阶段流程,即预准备、准备、提交三阶段,此时主节点已经完成预准备阶段而其他从节点还处于等待状态;

s3:当从节点接收到来自主节点的预准备消息后该从节点也完成预准备阶段,并向全网广播准备消息,标识进入准备阶段;

s4:当一个从节点收集齐不少于所有节点总数的2/3的节点的准备消息后,根据相应的预准备消息中的交易块片哈希数组从自己的交易块片池中找到相应的交易块片组成一个区块放入区块池中,并从交易块片池中删除这些交易块片,此时称该从节点完成准备阶段;然后该节点向全网广播提交消息进入提交阶段;对于主节点,只要其收集齐不少于所有节点总数的2/3的节点的准备消息即可完成准备阶段,并全网广播提交消息进入提交阶段;

s5:当任意一个共识节点收集齐不少于所有节点总数的2/3的节点的提交消息时,即完成提交阶段,完成整个bft共识流程,此时将该轮共识确定的区块提交到执行模块进行执行和写块,在该区块写入区块链中后,该节点将该区块从区块池中删除。

进一步地,所述的s1中,对交易进行去重指的是,以写入区块链的交易的哈希值作为去重样本,这些哈希值通过布隆过滤器保存,仅保留过去24小时的交易哈希,去重未通过的交易将在此api接口层直接被剔除。

进一步地,所述的s2中,主节点将交易快片排序后需要进行去重,此次去重则以还未成功提交的所有打包好的区块中的交易作为去重样本。

进一步地,所述的s3中,从节点收到主节点的预准备消息,应进一步地对预准备消息进行正确性验证。

进一步地,所述的s4中,当从节点根据预准备消息中的交易块片哈希数组不能从自己的交易块片池中找到所有相应交易块片组成区块时,所述的从节点则直接向所述的主节点请求这部分的交易块片。

本发明的有益效果如下:

本发明应用于联盟链背景下的区块链网络上,既保证了bft算法的有效性,同时又解决了bft算法广播机制存在冗余的问题,提高了区块链节点带宽利用率,是bft共识体系下区块链技术的大突破。

附图说明

图1是本发明的方法中交易到区块的状态转换图;

图2是本发明的方法中主要描述对象类图;

图3是本发明的方法的交易流程图;

图4是本发明的具体的实施案例的分析过程示意图。

具体实施方式

下面根据附图和优选实施例详细描述本发明,本发明的目的和效果将变得更加明白,以下结合附图和实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。

如图1-3所示,一种基于块片的bft共识算法带宽使用率改进方法,该方法具体包括如下步骤:

s1:区块链节点接收到客户端发起的交易请求后,首先验证交易体的格式正确性,再验证交易的签名,最后进行交易的去重,通过全部验证的交易被放到节点的交易池中;当交易池中存储的交易数量达到交易池的大小限制或者规定时间窗口中不再接收到新的交易后,该区块链节点将这部分交易打包成一个块片,放入交易块片池中,并将该交易块片广播给全网所有节点,同时删除交易池中已被打包成交易块片的交易;且一个节点接收到其他节点的交易块片,均会将该交易块片放入自己的交易块片池中;

s2:当主节点的交易块片池中得到一定量的交易块片或者在规定时间窗口中不再接收到新的交易块片后,主节点将这部分交易块片进行排序后打包成一个区块,并将这部分交易块片从交易块片池中删除;然后主节点将一个区块中的交易块片的哈希按序组成数组并标上区块编号放在预准备消息中,并广播给全网的所有节点,然后所有共识的节点开启bft共识的三阶段流程,即预准备、准备、提交三阶段,此时主节点已经完成预准备阶段而其他从节点还处于等待状态;

s3:当从节点接收到来自主节点的预准备消息后该从节点也完成预准备阶段,并向全网广播准备消息,标识进入准备阶段;

s4:当一个从节点收集齐不少于所有节点总数的2/3的节点的准备消息后,根据相应的预准备消息中的交易块片哈希数组从自己的交易块片池中找到相应的交易块片组成一个区块放入区块池中,并从交易块片池中删除这些交易块片,此时称该从节点完成准备阶段;然后该节点向全网广播提交消息进入提交阶段;对于主节点,只要其收集齐不少于所有节点总数的2/3的节点的准备消息即可完成准备阶段,并全网广播提交消息进入提交阶段;

s5:当任意一个共识节点收集齐不少于所有节点总数的2/3的节点的提交消息时,即完成提交阶段,完成整个bft共识流程,此时将该轮共识确定的区块提交到执行模块进行执行和写块,在该区块写入区块链中后,该节点将该区块从区块池中删除。

作为其中一种实施方式,所述的s1中,对交易进行去重指的是,以写入区块链的交易的哈希值作为去重样本,这些哈希值通过布隆过滤器保存,仅保留过去24小时的交易哈希,去重未通过的交易将在此api接口层直接被剔除。

作为其中一种实施方式,所述的s2中,主节点将交易快片排序后需要进行去重,此次去重则以还未成功提交的所有打包好的区块中的交易作为去重样本。这里排序后才进行去重是因为各节点无法根据无序的交易块片选择删除一个块片中的重复交易。

作为其中一种实施方式,所述的s3中,从节点收到主节点的预准备消息,应进一步地对预准备消息进行正确性验证。这里的验证的依据主要是两点,一是确认预准备消息的确是当前的主节点发送的;二是确认预准备消息中的区块摘要哈希的确是主节点根据相同的哈希函数对交易块片数组进行哈希运算得出的,从而防止主节点的拜占庭行为。

作为其中一种实施方式,所述的s4中,当从节点根据预准备消息中的交易块片哈希数组不能从自己的交易块片池中找到所有相应交易块片组成区块时,所述的从节点则直接向所述的主节点请求这部分的交易块片。

下面用一个区块链交易实例来具体说明本发明的基于块片的bft共识算法带宽使用率改进方法,如图4所示,区块链网络存在a,b,c,d四个节点,其中a为主节点,模拟连接节点b的sdk-x连续向节点b发起两笔交易,模拟连接节点c的sdk-y连续向节点c发起三笔交易后,整个系统如何进行交易广播和共识。

首先,节点b收到sdk-x连续发起两笔交易,将它们打包成一个交易块片广播给其他节点,同时,节点c收到sdk-y连续发起三笔交易,将它们打包成一个交易块片广播给其他节点;主节点a收到来自节点b和节点c的交易块片后将之打包成区块,并在预准备消息中发送排序好的交易块片哈希;其他节点收到主节点的预准备消息后对其进行验证,验证通过后全网广播准备消息;当从节点收集齐2/3个节点的准备消息后根据交易块片哈希列表组成需要进行共识的区块,并全网广播提交消息延续原本的共识流程完成接下来的共识。

本领域普通技术人员可以理解,以上所述仅为发明的优选实例而已,并不用于限制发明,尽管参照前述实例对发明进行了详细的说明,对于本领域的技术人员来说,其依然可以对前述各实例记载的技术方案进行修改,或者对其中部分技术特征进行等同替换。凡在发明的精神和原则之内,所做的修改、等同替换等均应包含在发明的保护范围之内。

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