一种基于RAFT算法的联盟链共识方法与流程

文档序号:25033602发布日期:2021-05-11 17:04阅读:196来源:国知局

本发明涉及区块链技术领域,尤其涉及一种基于raft算法的联盟链共识方法。



背景技术:

区块链技术中,共识算法是其中一个核心的组成部分目前,raft算法是一种分布式一致性算法,由斯坦福大学的diegoongaro和johnousterhout提出,传统raft算法在分布式一致性共识中应用比较广泛,在hyperledgerfabric区块链项目中,其共识算法采用raft。

然而现有技术中,监管者节点质量较差,无法与整个网络中其他节点进行通信,那么整个网络就无法选出推荐候选人,而且这样就形成了一种相对中心化的网络,现有技术无法对每个节点的质量进行评估,包括网络连接及节点所拥有的计算资源等,这样就无法对客户端请求类型进行判断,当需要灵活的进行节点间共识操作时,往往囿于节点机器性能原因或者网络质量原因而造成的共识性能下降问题。



技术实现要素:

为了解决上述技术所存在的不足之处,本发明提供了一种基于raft算法的联盟链共识方法。

为了解决以上技术问题,本发明采用的技术方案是:一种基于raft算法的联盟链共识方法,所述方法的步骤为:

步骤一、客户端向区块链网络上发送请求信息;

步骤二、判断当前区块链网络中参与共识的节点中是否存在领导节点,如果不存在则发起领导节点的选举;

步骤三、判断当前领导节点的可接受的请求类型是否满足客户端发送的请求类型要求,如果满足要求,领导节点接收客户端发送的请求信息,并将请求信息追加到自身的日志中;如果不满足要求,区块链网络上的各个节点根据请求类型重新发起领导节点选举;

步骤四、重新选举出的领导节点将接收到的请求信息追加到自身的日志中;

步骤五、领导节点将接受到的请求信息发送给各跟随节点,跟随节点将接收到的请求信息追加到自身的日志中;

步骤六、跟随节点将完成后的结果相应发回给领导节点,领导节点接受到跟随节点的反馈信息后向客户端返回响应结果。

进一步地,客户端包括发送单元和接受单元,发送单元用于向区块链网络发起一个交易提案,交易提案不仅把带有本次交易要调用的合约标识、合约方法、交易请求类型和交易参数信息以及客户端签名发送给背书节点,还将合格的提案提交给排序节点;

在背书节点接收到交易提案后,验证签名并确定提交者是否有权执行操作,同时根据背书策略模拟执行智能合约,接收单元接收模拟执行结果及各自的ca证书签名。

进一步地,请求信息包含请求类型和请求命令,请求类型包括客户端根据预设的业务类型和确定发送提案所需要资源的类型;请求命令包括客户端发送的交易提案的交易数据。

进一步地,领导节点选举步骤为:首先判断每个节点的优选值是否满足节点选举标准,如满足则被选为领导节点,如不满足,则不能被选为领导节点;特别的,当多于一个节点被选为领导节点时,此时每个节点应产生一个随机时间的计时器,率先结束计时的节点被选为最终领导节点。

进一步地,区块链网络中参与共识的每个节点均维护一个活动节点状态信息列表,当有节点退出或者发生错误时,网络中所有节点负责更新列表中的节点信息;

活动节点状态信息里列表是指在每个节点内部存在一个存储空间,存储空间中存放有加入网络的所有节点的节点信息,当网络中的节点信息发生变化时,更新相应的节点信息列表。

进一步地,领导节点的状态信息包括一个区块链网络中参与共识的节点的身份状态和节点的质量状态;

一个共识节点的身份状态包括:领导者节点、候选者节点、跟随者节点;

一个共识节点的质量状态包括:节点之间的通信延迟、节点发生错误的次数、节点断开连接的次数、节点可用cpu的核数、节点可用内存大小、节点最大连续在线时长、节点总在线时长;

若当前网络没有领导节点,则在进行初始领导节点选举时,节点的初始身份状态为跟随者节点状态,节点初始质量状态为系统分配的默认值;节点的初始质量状态为默认相等的权重,再计算每个节点的优选值。

进一步地,优选值的计算方法如下:

opti=∑svj*wj

其中,opti为第i个节点的优选值,svj为每个节点的第j个状态值,wj为每个节点的第j个状态值所分配的权重值。

进一步地,节点选举标准为所有活动的节点列表中节点优选值最大的节点。

进一步地,步骤三的具体步骤如下:首先判断领导节点是否为网络可靠类型,若一致,领导节点接受该请求;随后领导节点将客户端发过来的请求信息添加到自身节点当前日志号,并将最新的日志编号增加1。

进一步地,步骤五和步骤六的具体步骤如下:

a、领导节点将客户端发过来的请求类型和请求命令发送给网络中的所有跟随节点;

b、跟随节点将领导节点发来的请求类型和请求命令添加到自身节点当前日志号之后,并将本地最新的日志编号增加1;

c、跟随节点将请求类型和请求命令添加到本地日志中的响应消息发回给领导节点,同时将当前节点的质量状态值进行相应的增减;

d、领导节点将各跟随节点的正确响应消息汇总,确定所有的请求命令已经正确的添加到各跟随节点中,并将该消息传输给客户端接收模块。

本发明对于不同的客户端请求,能够相应的分配区块链网络中不同的共识节点,充分利用设备资源,提高处理效率。

具体实施方式

下面结合具体实施方式对本发明作进一步详细的说明。

一种基于raft算法的联盟链共识方法,所述方法由多个联盟链节点维护的区块链上实施,该方法的步骤为:

步骤一、客户端向区块链网络上发送请求信息:

客户端包括发送单元和接受单元,发送单元用于向区块链网络发起一个交易提案,交易提案不仅把带有本次交易要调用的合约标识、合约方法、交易请求类型和交易参数信息以及客户端签名发送给背书节点,还将合格的提案提交给排序节点;

在背书节点接收到交易提案后,验证签名并确定提交者是否有权执行操作,同时根据背书策略模拟执行智能合约,接收单元接收模拟执行结果及各自的ca证书签名;

请求信息包含请求类型和请求命令,请求类型包括客户端根据预设的业务类型和确定发送提案所需要资源的类型;请求命令包括客户端发送的交易提案的交易数据。

步骤二、判断当前区块链网络中参与共识的节点中是否存在领导节点,如果不存在则发起领导节点的选举:

区块链网络中参与共识的每个节点均维护一个活动节点状态信息列表,当有节点退出或者发生错误时,网络中所有节点负责更新列表中的节点信息;

活动节点状态信息里列表是指在每个节点内部存在一个存储空间,存储空间中存放有加入网络的所有节点的节点信息,当网络中的节点信息发生变化时,更新相应的节点信息列表;

领导节点的状态信息包括一个区块链网络中参与共识的节点的身份状态和节点的质量状态;

一个共识节点的身份状态包括:领导者节点、候选者节点、跟随者节点;

一个共识节点的质量状态包括:节点之间的通信延迟、节点发生错误的次数、节点断开连接的次数、节点可用cpu的核数、节点可用内存大小、节点最大连续在线时长、节点总在线时长;

若当前网络没有领导节点,则在进行初始领导节点选举时,节点的初始身份状态为跟随者节点状态,节点初始质量状态为系统分配的默认值;节点的初始质量状态为默认相等的权重,再计算每个节点的优选值;

优选值的计算方法如下:

opti=∑svj*wj

其中,opti为第i个节点的优选值,svj为每个节点的第j个状态值,wj为每个节点的第j个状态值所分配的权重值;

领导节点选举步骤为:首先判断每个节点的优选值是否满足节点选举标准,节点选举标准为所有活动的节点列表中节点优选值最大的节点,如满足则被选为领导节点,如不满足,则不能被选为领导节点;特别的,当多于一个节点被选为领导节点时,此时每个节点应产生一个随机时间的计时器,率先结束计时的节点被选为最终领导节点。

步骤三、判断当前领导节点的可接受的请求类型是否满足客户端发送的请求类型要求,客户端的请求为对网络可靠性有较高要求,如果满足要求,领导节点接收客户端发送的请求信息,随后领导节点将客户端发过来的请求信息追加到自身的日志中,即领导节点将请求信息添加到自身节点当前日志号,并将最新的日志编号增加1;如果不满足要求,区块链网络上的各个节点根据请求类型重新发起领导节点选举;

步骤四、重新选举出的领导节点将接收到的请求信息追加到自身的日志中;

步骤五、领导节点将接受到的请求信息发送给各跟随节点,跟随节点将领导节点发来的请求类型和请求命令添加到自身节点当前日志号之后,并将本地最新的日志编号增加1;

步骤六、跟随节点将请求类型和请求命令添加到本地日志中的响应消息发回给领导节点,同时将当前节点的质量状态值进行相应的增减;领导节点将各跟随节点的正确响应消息汇总,确定所有的请求命令已经正确的添加到各跟随节点中,并将该消息传输给客户端接收模块,向客户端返回响应结果。

为更好地说明本发明的实施效果,选择两种现有的技术方案作为对比例,主要阐述其方法步骤。

对比例一、基于raft算法的区块链共识方法及装置

一种raft算法的共识方法,所述区块链中包含预先设置的共识结点,其节点的状态包含:领导者、候选者、跟随着、监管者四种状态,其中前三种状态与传统的raft算法的公式方法节点状态相同,监管者是用于获取共识节点信息。

选举流程:节点状态由跟随着状态转换为候选者状态后进入选举流程,通过监管者节点获取各节点信息,其中节点信息包括:区块高度、在线时长、平均投票次数。

领导者节点用于记录交易事件并生成新区块。

当确定领导者节点任期即将结束时,监管者节点将所述各节点的节点信息发送各领导者节点,由领导者节点根据各共识节点的区块高度、在线时长、平均投票次数确定至多一个推荐候选者节点。

领导者节点广播上述推荐候选者节点。

当推荐候选者节点状态转换为候选者状态时,候选者节点进入下一任期选举流程。

领导者节点通过区块高度、在线时长、平均投票次数过程为:

通过节点信息中的区块高度确定最大区块高度共识节点集合,即包含最大区块高度的节点。

根据最大区块高度共识节点集合中共识节点的在线时长、平均投票次数计算公式节点的u值。

u值计算方法为:u=α*在线时长+β*平均投票次数;

α为在线时长的权重调节系数;β为平均投票次数的权重调节系数。

监管者节点获取选举过程中候选者状态节点区块高度、在线时长,以及获取跟随者向候选者反馈的节点信息、区块高度、在线时长。

监管者统计在每个任期内的投票过程中各节点的投票次数,并计算平均投票次数。

其中,为第t个任期的平均投票次数,为第t-1个任期的实际投票次数,v(t)为第t个任期的实际投票次数,tc为时间窗口长度。

该对比例中监管者节点质量较差,无法与整个网络中其他节点进行通信,那么整个网络就无法选出推荐候选人,而且这样就形成了一种相对中心化的网络。

对比例二、基于raft算法的区块链共识方法

一种多个共识节点的共识方法,包括三个步骤:选举步骤、准备步骤、提交步骤。

选举步骤:根据raft算法从多个节点选举出一个节点作为领导者节点,其余节点为跟随着节点。

准备步骤:领导者节点向所有跟随着节点发送提交区块请求,跟随者节点对每个准备提交的区块进行第一验证,并向领导者节点返回认可消息。

提交步骤:接收到跟随者节点的认可消息情况下,领导者节点向所有跟随者节点发送提交区块请求,跟随者节点对提交的区块进行第二验证,验证通过后加入本地账本形成新区块。

第一验证包括:领导者节点任期号不小于跟随着节点任期号,领导者节点区块高度不小于跟随着节点区块高度,提交区块前哈希值正确,提交的区块中merkle树正确。

第二验证包括:验证提交区块请求中的区块内容是否为上述准备步骤中验证通过的区块。

该对比例中无法对每个节点的质量进行评估,包括网络连接及节点所拥有的计算资源等。

与上述对比例相比,本发明对于不同类型的客户端请求,采用不同的共识策略,增加了系统的有效性。恶意节点或者网络质量差的节点采取较低权重,诚实节点采取较高权重,有利于整个区块链网络正向运行,并增加了实用性和有效性。

上述实施方式并非是对本发明的限制,本发明也并不仅限于上述举例,本技术领域的技术人员在本发明的技术方案范围内所做出的变化、改型、添加或替换,也均属于本发明的保护范围。

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