一种实用于区块链的优化拜占庭容错算法的制作方法

文档序号:22750735发布日期:2020-10-31 09:44阅读:128来源:国知局
一种实用于区块链的优化拜占庭容错算法的制作方法

本发明涉及分布式系统中区块链技术的拜占庭共识算法领域,具体设计了一种实用于区块链的优化拜占庭容错算法。



背景技术:

区块链是一种去中心化协议,包含了分布式对称网络、数据加密、共识算法等技术。其中,共识算法的选择是区块链设计的核心部分。实用拜占庭容错算法pbft(practicalbyzantinefaulttolerance)改进于拜占庭共识算法bft(byzantinefaulttolerance),继承了bft的优点,并且大规模降低了拜占庭协议的开销,因此拜占庭算法在区块链系统中能够被应用。pbft算法是基于状态机副本复制的算法,每个状态机副本都能保存服务状态,满足用户的合法请求,不仅可以完成交易,还能够实现不同类型的操作。系统中最多可以满足f=(n-1)/3(n为节点总数)数量的作恶节点,这样仍能保持系统的安全性和活性,最终达成一致的分布式共识。

虽然pbft算法是一种成熟的算法,但是也存在着不足。首先,pbft算法采用c/s架构,不能动态感知节点数目的变化,更不能应用于p2p网络模型。没有灵活的共识节点加入和退出机制,如果需要增加节点,必须要重启系统,造成系统资源浪费,大幅度降低了系统的可用性。其次,主节点的选取方式较为随意,没有对主节点的真伪性进行验证,不能保证主节点的正确性,因此很有可能选举出恶意节点并且具有非常高的危险性。最后,三阶段广播过程中的后两次全节点广播,非常消耗网络带宽,节点之间要通过互相转发消息进行拜占庭容错,并且通信的成本将伴随着节点数目的增多而成多项式级的升高。

近年来,pbft算法是区块链技术中的研究热点,研究人员在传统pbft算法的基础上,就共识算法性能的提高方面,提出了许多的方案。



技术实现要素:

本发明设计了一种实用于区块链的优化拜占庭算法opbft(optimizedpracticalbyzantinefaulttolerance)。用于解决传统拜占庭算法不能动态感知节点数量、选举出恶意节点效率低下的问题。为了解决节点加入问题,该方法引入了节点动态加入和退出机制,节点加入和退出时都需要通过所有节点间的相互确认,确认过程分为四个阶段,分别是请求,确认,回复和完成。为了解决主节点选取的随意性问题,引入了打分和投票协同机制,打分机制遵循的是区块链的最长链原则,节点每成功共识一次加一分;节点非恶意节点,但没有成功执行共识,不加分也不减分;节点是恶意节点,减去一分。选分数最高的节点为主结点,如果存在分数相同的情况,则除去该分数相同的节点后,再选出低一分的节点集合执行节点投票机制,每个节点一票,选出票数最多的节点担任主节点,若还是存在票数相同的情况则根据节点编号,选择小的序号。若投票节点集合内只有一个节点,那么这一票投给的节点即为主节点。

区别于现有的处理方法,本发明的有益效果是:在传统的拜占庭容错算法中,没有灵活的共识节点加入和退出机制,特别是在集群中节点较多或者节点变更比较频繁的情况下,系统将难以应付,大幅度降低了系统的可用性。该方法中的节点加入和退出机制使得共识的节点数量可变,大大提高了共识算法的实用性。在传统的拜占庭容错算法中,主节点的选取方式随意,无法保证主节点的正确性,如果连续性选出恶意节点,系统资源会被浪费,系统的安全性会大大降低。该方法中的打分投票协同机制,极大地保证了选取的主节点的正确性,提高了系统的安全性。

附图说明

图1是节点加入示意图;图2是节点退出示意图;图3主节点选取的流程图。

具体实施方式

请参阅图1、图2、图3所示:

1、一种优化的区块链实用性拜占庭容错算法,节点加入和退出并触发主节点选取机制,其特征在于,所述方法包括以下步骤:

步骤一:节点加入,过程分为请求、确认、回复、完成四个阶段,当节点加入后触发主节点选取机制。进入步骤二;

步骤二:主节点选取,通过打分和投票协同机制,选出正确性高的主节点,为系统的共识做准备。若有节点想退出,进入步骤三;

步骤三:节点退出,过程同加入相似,分为请求、确认、回复、完成四个阶段。当节点退出后再次触发主节点选取机制,为下一次的共识做准备。

2、根据权利要求1所述的一种实用于区块链的优化拜占庭容错算法,其特征在于,步骤一所述的节点加入过程包括以下步骤:

步骤一:节点i为待加入的节点,请求阶段,节点i向其余所有节点发送一条请求加入的消息。消息的格式为<request-join,t,ip>,t表示时间戳,ip表示待加入节点的ip地址。进入步骤二;

步骤二:接着是确认阶段,所有收到信息的从节点再分别向其他从节点发送消息,用来确定其余节点也都收到申请加入的消息,消息的格式为<join,j,ip>,j是发送消息的节点编号,ip是待加入节点的ip地址。消息发送完成后,当每个节点收到至少2f+1条消息时,进入回复阶段。进入步骤三;

步骤三:此时每个从节点向主节点回复并表明是否同意i节点加入,消息格式为<reply,agree/refuse,ip>,只有当超过半数的从节点同意加入时,主节点才会最终同意加入。如果主节点未收到某些节点的消息时,则将未回复节点视为放弃。

3、根据权利要求1所述的一种实用于区块链的优化拜占庭容错算法,其特征在于,步骤二所述的主节点的选取包括以下步骤:

步骤一:进入系统寻找主节点,首先进入节点打分机制,如果选出唯一最高分则直接选出主节点,并进入视图转换流程;如果未选出唯一的最高分,进入步骤二;

步骤二:进入投票机制,如果得到唯一的最高票数,则进入试图转换流程;若未能选出唯一票数最高的节点,则根据节点编号按从小到大选择,然后进入试图流程。

4、根据权利要求3所述的一种实用于区块链的优化拜占庭容错算法,其特征在于,步骤一所述的未知节点位置坐标计算包括以下步骤:

步骤一:节点每成功共识一次加一分。

步骤二:节点非恶意节点,但没有成功执行共识,不加分也不减分。

步骤三:节点是恶意节点,减去一分。选分数最高的节点为主结点,如果存在分数相同的情况,则除去该分数相同的节点后,再选出低一分的节点集合执行节点投票机制。

5、根据权利要求3所述的一种实用于区块链的优化拜占庭容错算法,其特征在于,步骤二所述的未知节点位置坐标计算包括以下步骤:

步骤一:每个节点一票,选出票数最多的节点担任主节点。

步骤二:若还是存在票数相同的情况则根据节点编号,选择小的序号。

6、根据权利要求1所述的一种实用于区块链的优化拜占庭容错算法,其特征在于,步骤三所述的节点退出过程包括以下步骤:

步骤一:节点m为待退出的节点,请求阶段,向主节点发送申请退出的消息,消息的格式为<request-quit,m,b,t>,b为区块号,t为时间戳,意思是告知主节点推出时间和位置。因为不能在交易的过程中退出,所以要在交易时间t之后的t+1时刻退出。进入步骤二;

步骤二:确认阶段,主节点发送消息给所有从节点,消息格式为<quit,m,t>,通知待退出节点的编号和时间,消息发送完成然后,进入步骤三;

步骤三:此时每个从节点向其余所有节点发送消息,用来确当其余节点也都收到申请退出的消息,消息的格式为<quit,agree/refuse>,只有当主节点收到超过半数的同意退出时,才会回复m节点同意退出。

以上所述仅为本发明的实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所做的等效结构或等流程变换,或直接或间接运用在相关技术领域,均同理包括在本发明的专利保护范围。

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