发明内容
有鉴于此,本发明的目的在于提供一种基于Raft-PBFT的区块链共识方法。通过实现Raft与PBFT机制的高效融合,降低节点通信开销,支持拜占庭容错,提高共识效率和可扩展性。
为达到上述目的,本发明提供如下技术方案:
一种基于Raft-PBFT的区块链共识方法,该方法包括以下步骤:
S1:基于K均值算法将区块链网络节点划分为多个子集群;
S2:所有子集群主节点与监督节点构成主集群;
S3:客户端发送请求消息至主集群节点,重定向至监督节点;
S4:监督节点接收客户端请求消息,验证客户端请求消息签名及客户端身份是否合法;若消息签名或客户端身份验证未通过,则丢弃该请求消息;若验证通过,转至S5;
S5:主集群内基于改进的Raft协议执行第一轮共识协议;
S6:若主集群节点未达成共识,请求消息验证失败;
S7:若主集群节点达成共识,监督节点发送确认回复消息至客户端,并将回复证书发送至主集群节点;
S8:若主集群节点收到回复证书,转至S10;
S9:若主集群节点未收到回复证书,则在其子集群内触发视图切换,转至S10;
S10:各子集群内基于实用拜占庭容错PBFT算法执行第二轮共识;
S11:子集群判断是否达成共识,若是,对应子集群主节点发送确认回复消息至客户端,转至S14;
S12:若子集群未达成共识,判断视图切换次数是否大于门限值,若是,该子集群终止共识过程;否则,子集群触发视图切换,更新视图切换次数并执行第二轮共识,转至S11;
S13:若子集群达成共识,子集群主节点发送确认回复消息至客户端;
S14:若客户端收到不少于主集群半数的确认回复消息,客户端请求消息在集群内达成共识,区块链共识流程结束。
可选的,所述S1中,令Φ表示区块链网络节点集合,Φ={I1,I2,…,In},其中,In标识第n个区块链网络节点,1≤n≤N,N为区块链网络节点数,基于K均值算法构建区块链子集群过程如下:
S11:初始主节点选择:随机选择K个区块链节点作为初始主节点,得到初始主节点集合
子集群成员集合
S12:主节点与子集群节点关联:定义网络性能为节点能耗与误码率的加权和,令Ψ
i,k表示子集群节点I
i∈Φ
cm与主节点
关联对应的成本,建模Ψ
i,k为Ψ
i,k=E
i,k+ωδ
i,k,其中,E
i,k与δ
i,k分别表示子集群节点I
i发送消息至主节点I
k对应的能耗及误码率,ω表示误码率对应的权重;根据公式E
i,k=P
i,kt
i,k建模E
i,k,其中,P
i,k表示子集群节点I
i向主节点I
k传输数据的发射功率,t
i,k表示子集群节点I
i向主节点I
k传输数据的时长,根据公式
建模t
i,k,其中,S
i,k表示子集群节点I
i向主节点I
k传输的数据量,R
i,k表示子集群节点I
i向主节点I
k传输数据时对应的传输数据速率,根据公式R
i,k=B
klog
2(1+γ
i,k)建模R
i,k,其中,B
k表示主节点I
k进行子集群内通信的可用带宽,γ
i,k表示子集群节点I
i向主节点I
k之间的信噪比,根据公式
建模γ
i,k,其中,h
i,k表示子集群节点I
i与主节点I
k之间链路的信道增益,N
0表示噪声功率;建模子集群节点I
i与主节点I
k之间链路的误码率为
其中,α表示调制阶数;子集群节点I
i基于成本函数优化选择主节点,即若有k
*=argminΨ
ik,
则子集群节点I
i与主节点
关联进行信息传输,令Φ
k表示第k个子集群的主节点及子集群节点集合;
S13:主节点更新:令
表示第k个子集群的节点I
i与子集群内其他节点之间进行信息传输的总成本,建模为
若
则k′为第k个子集群的主节点;
S14:重复S12~S13,直至主节点集合以及主节点与子集群节点之间关联关系不再更新。
可选的,所述S3中,客户端发送请求消息至网络节点,若接收客户端请求的节点不为监督节点,则该节点发送监督节点标识至客户端,客户端接收消息后发送请求消息至监督节点;其中,请求消息包括消息类型、客户端标识、客户端执行操作类型、客户端发送请求消息的当前时间戳及客户端对请求消息的签名,令M表示客户端请求消息。
可选的,所述S4中,所主节点接收客户端发送的请求消息M,验证请求消息签名及客户端身份是否合法,若请求消息签名或客户端身份不合法,则丢弃该请求消息;若验证通过,监督节点为请求消息M分配序号a。
可选的,所述S5中,针对拜占庭容错场景,增加对消息的校验,丢弃恶意节点发送的消息;选择监督节点为Raft协议主节点,主集群其它节点为副本节点;改进的Raft共识过程包括预准备阶段、准备阶段及回复阶段;
S51:预准备阶段:监督节点向各副本节点广播预准备消息,其中,预准备消息包括消息类型、请求消息、请求消息摘要、请求消息序号、请求消息索引及监督节点对预准备消息的签名,令d表示请求消息M的摘要;
S52:准备阶段:副本节点接收主节点广播的预准备消息,对预准备消息进行验证,具体包括验证预准备消息的签名是否正确,d是否为M的摘要,是否已接收过序号为a且摘要不同的请求消息M;若检查未通过,则视为非法请求而丢弃;若通过,副本节点将预准备消息写入本地消息日志,并回复准备消息至监督节点,其中,准备消息包括消息类型、请求消息摘要、请求消息索引、请求消息序号、预准备消息确认标识及副本节点对准备消息的签名,令q为预准备消息确认标识,若副本节点验证通过预准备消息,则q=true,否则,q=false;
S53:回复阶段:监督节点收到副本节点的准备消息,验证准备消息签名是否正确,准备消息中q是否为true,若验证未通过,则将准备消息视为非法请求进行丢弃;若监督节点收到不少于(K+1)/2个合法有效的准备消息,将此打包作为回复证书。
可选的,所述S6中,确认回复消息包括消息类型、客户端操作类型、客户端请求消息时间戳、客户端标识、请求消息索引、执行客户端请求结果及回复证书。
可选的,所述S9中,子集群重新选择主节点,令g表示所选择主节点编号,g=υ modb,其中,υ为当前子集群视图编号,b当前子集群节点数;视图切换过程包括视图切换消息传输阶段、视图切换回复阶段及新视图阶段:
S91:视图切换消息传输阶段:子集群内各子节点触发视图切换,更新视图编号为v=v+1,重新选择主节点,广播视图切换消息,其中,视图切换消息包括消息类型、视图编号、子节点最新处理的请求消息序号、准备消息集合、预准备消息集合、子节点标识及子节点对视图切换消息的签名;
S92:视图切换回复阶段:子集群节点收到其他节点的视图切换消息,验证节点签名是否正确;若验证未通过则视为非法请求进行丢弃;若通过验证,子节点发送回复消息给所选择的主节点;
S93:新视图阶段:若所选择的主节点接收到2f个子节点视图编号为v+1的视图切换消息,则广播新视图消息至子集群节点,其中,f为子集群可容错的拜占庭错误数目,新视图消息包括消息类型、视图编号、视图切换消息集合、预准备消息集合及新任主节点对视图消息的签名,子集群节点接收到新视图消息后,验证主节点签名是否正确,视图消息所包含的预准备消息集合是否合法,若验证未通过,则视为非法请求进行丢弃;若验证通过,主节点更新成功。
可选的,所述S10中,共识过程包括预准备阶段、准备阶段、提交阶段及回复阶段:
S101:预准备阶段:子集群主节点向各子节点广播预准备消息,其中,预准备消息包括消息类型、请求消息、消息摘要、消息序号、视图编号、消息索引、回复证书及主节点对预准备消息的签名;
S102:准备阶段:子节点收到主节点广播的预准备消息,对预准备消息进行验证,具体包括验证预准备消息的签名是否正确,d是否为M的摘要,是否已接收过序号为a且摘要不同的请求消息M,回复证书是否正确;若验证未通过则视为非法请求进行丢弃;若验证通过,子节点将预准备消息写入本地消息日志,子节点广播准备消息,其中,准备消息包括消息类型,请求消息摘要、请求消息索引、请求消息序号、视图编号、回复证书及子节点对准备消息的签名;
S103:提交阶段:子节点收到准备消息,对准备消息进行验证,具体包括验证准备消息的签名是否正确,d是否为M的摘要,回复证书是否正确,请求序号是否正确;若验证未通过,则视为非法请求进行丢弃;若验证通过且子节点至少收到2f个合法的准备消息,则执行消息M的操作,并广播确认消息至子集群子节点,其中,确认消息包括消息类型、请求消息摘要、请求消息索引、请求消息序号、视图编号、子节点标识、执行客户端请求结果、回复证书及子节点对确认消息的签名;
S104:回复阶段:子节点收到确认消息,对确认消息进行验证,具体包括验证d是否为M的摘要,回复证书是否正确,请求序号是否正确;若验证未通过,则视为非法请求进行丢弃;若验证通过且子节点至少收到2f+1个合法确认消息,并发送回复消息至主节点,其中,回复消息包括消息类型、请求消息时间戳、客户端标识、请求消息索引、请求消息序号、视图编号、子节点标识、执行客户端请求结果、回复证书及子节点对回复消息签名;若主节点收到不少于子集群半数的合法回复消息,将回复消息作为第二轮共识证书。
可选的,所述S11中,确认回复消息包括消息类型、客户端操作、请求消息时间戳、客户端标识、子节点标识、执行客户端请求结果、第一轮回复证书、第二轮回复证书及主节点对确认消息的签名。
可选的,所述S12中,令u表示视图切换次数,u′表示视图切换门限值,若u>u′,子集群终止共识过程,否则子集群触发视图切换,更新视图切换次数并执行第二轮共识。
本发明的有益效果在于:本发明基于K均值算法将区块链网络划分为不同子集群,各子集群主节点与监督节点构成主集群,通过Raft与PBFT机制的高效融合,可实现通信开销小、时延低、吞吐量高、可扩展性高且支持拜占庭容错的节点共识。
本发明的其他优点、目标和特征在某种程度上将在随后的说明书中进行阐述,并且在某种程度上,基于对下文的考察研究对本领域技术人员而言将是显而易见的,或者可以从本发明的实践中得到教导。本发明的目标和其他优点可以通过下面的说明书来实现和获得。
具体实施方式
以下通过特定的具体实例说明本发明的实施方式,本领域技术人员可由本说明书所揭露的内容轻易地了解本发明的其他优点与功效。本发明还可以通过另外不同的具体实施方式加以实施或应用,本说明书中的各项细节也可以基于不同观点与应用,在没有背离本发明的精神下进行各种修饰或改变。需要说明的是,以下实施例中所提供的图示仅以示意方式说明本发明的基本构想,在不冲突的情况下,以下实施例及实施例中的特征可以相互组合。
其中,附图仅用于示例性说明,表示的仅是示意图,而非实物图,不能理解为对本发明的限制;为了更好地说明本发明的实施例,附图某些部件会有省略、放大或缩小,并不代表实际产品的尺寸;对本领域技术人员来说,附图中某些公知结构及其说明可能省略是可以理解的。
本发明实施例的附图中相同或相似的标号对应相同或相似的部件;在本发明的描述中,需要理解的是,若有术语“上”、“下”、“左”、“右”、“前”、“后”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此附图中描述位置关系的用语仅用于示例性说明,不能理解为对本发明的限制,对于本领域的普通技术人员而言,可以根据具体情况理解上述术语的具体含义。
请参阅图1~图2,本实施例是基于图1的区块链网络节点架构图,此架构中包括网络节点和监督节点,其中,包含K个子集群,每个子集群主节点与监督节点构成主集群,监督节点为主集群的主节点。
图2为本发明所述基于Raft-PBFT的区块链共识机制流程图,如图所示,本发明所述方法具体包括以下步骤:
S1:基于K均值算法将区块链网络节点划分为多个子集群,子集群内其他节点为子节点;
S2:所有子集群主节点与监督节点构成主集群;
S3:客户端发送请求消息至主集群节点,重定向至监督节点;
S4:监督节点接收客户端请求消息,验证客户端请求消息签名及客户端身份是否合法;若消息签名或客户端身份验证未通过,则丢弃该请求消息;若验证通过,转至S5;
S5:主集群内基于改进的Raft协议执行第一轮共识协议;
S6:若主集群节点未达成共识,请求消息验证失败;
S7:若主集群节点达成共识,监督节点发送确认回复消息至客户端,并将回复证书发送至主集群节点;
S8:若主集群节点收到回复证书,转至S10;
S9:若主集群节点未收到回复证书,则在其子集群内触发视图切换,转至S10;
S10:各子集群内基于PBFT算法执行第二轮共识协议;
S11:子集群判断是否达成共识,若是,对应子集群主节点发送确认回复消息至客户端,转至S14;
S12:若子集群未达成共识,判断视图切换次数是否大于门限值,若是,该子集群终止共识过程;否则,子集群触发视图切换,更新视图切换次数并执行第二轮共识,转至S11;
S13:若子集群达成共识,子集群主节点发送确认回复消息至客户端;
S14:若客户端收到不少于主集群半数的确认回复消息,客户端请求消息在集群内达成共识,区块链共识流程结束。
最后说明的是,以上实施例仅用以说明本发明的技术方案而非限制,尽管参照较佳实施例对本发明进行了详细说明,本领域的普通技术人员应当理解,可以对本发明的技术方案进行修改或者等同替换,而不脱离本技术方案的宗旨和范围,其均应涵盖在本发明的权利要求范围当中。