本发明涉及区块链技术领域,尤其涉及一种应用于联盟链的拜占庭容错共识方法及终端。
背景技术:
ontology(本体)采用的vbft共识算法,一个重要的参数为共识网络节点的pos(权益证明,proofofstake,pos)表。vbft算法(verifiablerandomfunctionbyzantinefaulttolerance,可验证随机函数拜占庭容错算法)运行过程中,所有节点根据当前的共识pos表,随机选择每一轮参与共识的节点,由随机选择的节点完成对应轮的共识工作。
vbft算法可以认为是传统bft算法(byzantinefaulttolerance,拜占庭容错算法)在可验证随机方向的一个改进。在vbft算法中,首先基于可验证随机函数vrf在共识网络中依次选择出一轮共识的备选区块提案节点集,区块验证节点集和区块共识节点集,然后由选出的共识节点集完成共识。由于vrf引入的随机性,每轮区块的备选提案节点、验证节点和共识节点都不相同,而且难以预测,从而极大提高共识算法的抗攻击性。故vbft更加适用于公有链,存在提案节点和验证节点,运用于联盟链的话会对系统的共识性能产生影响。
技术实现要素:
本发明所要解决的技术问题是:本发明提供了一种应用于联盟链的拜占庭容错共识方法及终端,解决了现有的联盟链共识性能较低的问题。
为了解决上述技术问题,本发明提供了一种应用于联盟链的拜占庭容错共识方法,包括以下步骤:
s1:在每一轮共识过程中,根据每一个待选共识节点上存储的私钥、每一个待选共识节点的序号、当前的视图的编号及联盟链在上一轮共识过程中的产生区块对应的哈希值,计算得到每一个待选节点对应的哈希值;
s2:根据每一个待选节点对应的哈希值,选出唯一的待选共识节点作为此轮共识过程的第一共识节点;
s3:通过所述第一共识节点生成提案信息,并分别发送所述提案信息至每一个待选共识节点;
s4:根据第一共识节点接收待选共识节点发送的所述提案信息对应的验证通过信息,生成标识信息;通过所述第一共识节点分别发送所述标识信息至每一个待选共识节点,若所述第一共识节点接收到的所述标识信息对应的验证通过信息的个数超过预设数目,则执行下一轮共识。
本发明还提供了一种应用于联盟链的拜占庭容错共识终端,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现以下步骤:
s1:在每一轮共识过程中,根据每一个待选共识节点上存储的私钥、每一个待选共识节点的序号、当前的视图的编号及联盟链在上一轮共识过程中的产生区块对应的哈希值,计算得到每一个待选节点对应的哈希值;
s2:根据每一个待选节点对应的哈希值,选出唯一的待选共识节点作为此轮共识过程的第一共识节点;
s3:通过所述第一共识节点生成提案信息,并分别发送所述提案信息至每一个待选共识节点;
s4:根据第一共识节点接收待选共识节点发送的所述提案信息对应的验证通过信息,生成标识信息;通过所述第一共识节点分别发送所述标识信息至每一个待选共识节点,若所述第一共识节点接收到的所述标识信息对应的验证通过信息的个数超过预设数目,则执行下一轮共识。
本发明的有益效果为:
本发明提供了一种应用于联盟链的拜占庭容错共识方法及终端,在每一轮共识过程中,根据每一个待选共识节点上的私钥、序号、当前的视图的编号及上一轮共识过程产生的区块对应的哈希值,计算得到每一个待选共识节点对应的哈希值,从而筛选出唯一的第一共识节点;并通过所述共识节点,生成提案信息,并分别将提案信息发送至每一个待选共识节点;根据接收到由待选共识节点发送的与提案信息对应的验证通过信息,生成标识信息,并分别发送至每一个待选共识节点,若所述第一共识节点接收到的所述标识信息对应的验证通过信息的个数超过预设数目,则执行下一轮共识。本发明通过上述方案,在每一轮共识过程中无需要筛选出验证节点与提案共识,能够提高联盟链的共识效率;同时本发明由共识节点生成提案信息,并由各个待选验证节点进行验证,能够确保联盟链的安全性。
附图说明
图1为根据本发明实施例的一种应用于联盟链的拜占庭容错共识方法的主要步骤示意图;
图2为根据本发明实施例的一种应用于联盟链的拜占庭容错共识终端的结构示意图;
标号说明:
1、存储器;2、处理器。
具体实施方式
为详细说明本发明的技术内容、所实现目的及效果,以下结合实施方式并配合附图详予说明。
请参照图1,本发明提供了一种应用于联盟链的拜占庭容错共识方法,包括以下步骤:
s1:在每一轮共识过程中,根据每一个待选共识节点上存储的私钥、每一个待选共识节点的序号、当前的视图的编号及联盟链在上一轮共识过程中产生的区块对应的哈希值,计算得到每一个待选节点对应的哈希值;
s2:根据每一个待选节点对应的哈希值,选出唯一的待选共识节点作为此轮共识过程的第一共识节点;
s3:通过所述第一共识节点生成提案信息,并分别发送所述提案信息至每一个待选共识节点;
s4:根据第一共识节点接收待选共识节点发送的所述提案信息对应的验证通过信息,生成标识信息;通过所述第一共识节点分别发送所述标识信息至每一个待选共识节点,若所述第一共识节点接收到的所述标识信息对应的验证通过信息的个数超过预设数目,则执行下一轮共识。
从上述描述可知,本发明提供了一种应用于联盟链的拜占庭容错共识方法,在每一轮共识过程中,根据每一个待选共识节点上的私钥、序号及上一轮共识过程的共识节点对应的哈希值,计算得到每一个待选共识节点对应的哈希值,从而筛选出唯一的第一共识节点;并通过所述共识节点,生成提案信息,并分别将提案信息发送至每一个待选共识节点;根据接收到由待选共识节点发送的与提案信息对应的验证通过信息,生成标识信息,并分别发送至每一个待选共识节点,若所述第一共识节点接收到的所述标识信息对应的验证通过信息的个数超过预设数目,则执行下一轮共识。本发明通过上述方案,在每一轮共识过程中无需要筛选出验证节点与提案共识,能够提高联盟链的共识效率;同时本发明由共识节点生成提案信息,并由各个待选验证节点进行验证,能够确保联盟链的安全性。
进一步的,所述s1具体为:
通过预设第一公式,分别计算每一个待选节点对应的哈希值;
所述第一公式为:
其中,所述i=1,2,……,n,所述i表示待选共识节点的序号,所述n表示所有待选共识节点的总数量,h表示哈希函数,v当前视图的编号,v的初始值为1,blockpre表示联盟链上一轮共识过程中的共识节点对应的哈希值,σi表示序号为i的待选共识节点上存储的私钥,
从上述描述可知,通过上述方法,能够确保每一个待选节点对应的哈希值均不相同,使得根据每一个待选节点对应的哈希值,选出的唯一的第一共识节点具有一定的随机性,减少了每一轮共识过程中,共识节点受到攻击的概率,提高了联盟链系统的安全性。
进一步的,所述s2具体为:
根据每一个待选节点对应的哈希值pi,计算得到pm,所述
选出序号为m的待选共识节点作为此轮共识过程的第一共识节点。
从上述描述可知,通过上述方法,能快速安全地选出每一轮共识过程中的共识节点,提高了联盟链系统的安全性。
进一步的,所述s3具体为:
通过所述第一共识节点生成提案信息;
所述提案信息包括
其中,所述preparerequest为预设的第一标识;所述m表示此轮共识过程中的第一共识节点的序号;所述blocknew表示此轮共识过程中的第一共识节点对应的哈希值;所述
通过所述第一共识节点分别发送所述提案信息至所有的待选共识节点。
从上述描述可知,通过上述方法,能快速生成提案信息,不影响联盟链的正常运行,并且上述生成的提案信息可由各个待选共识节点进行验证,保证系统的安全性。
进一步的,所述s3和s4之间还包括:
当待选共识节点接收到所述提案信息时,通过所述待选第一共识节点对所述提案信息进行验证,若验证通过后,则发送验证通过信息至所述第一共识节点;
所述验证通过信息包括<prepareresponse,v,i,wi>,其中i≠m;所述prepareresponse表示预设的第二标识,所述i表示该待选共识节点的序号,wi=(ki-r·ski)mods,所述ski指序号为i的待选共识节点上存储的私钥。
从上述描述可知,通过上述方法,使得待选共识节点能够对提案信息进行验证,并回发至共识节点验证通过信息,确保联盟链系统快速安全地运行。
进一步的,所述s4具体为:
所述第一共识节点根据接收到的待选共识节点发送的验证通过信息,计算
通过第一共识节点分别发送标识信息至每一个待选节点,所述标识信息包括<commit,v,m,r,s,bs>,其中commit表示预设第三标识,所述bs包括bs[1]、bs[2]、……、bs[n];
若所述第一共识节点接收到的所述标识信息对应的验证通过信息的个数超过预设数目,则执行下一轮共识;
否则,执行信息更新步骤。
从上述描述可知,通过上述方法,能够确保在本轮的提案信息验证通过后,才执行下一轮共识,否则此轮共识重新执行,确保系统稳定地运行。
进一步的,所述信息更新步骤,具体为:
s50,预设变量k,所述k的初始值为1;
s51:令vk=v+k;
s52:每一个待选共识节点发起视图更换请求;
s53:若经过预设时间间隔后,接收到不少于n-f个互不相同的待选共识节点发送的更新后的视图编号为vk时,令v=vk,并重复执行s1-s4;所述f是联盟链系统中最多能容纳的错误节点数量;
s54:否则令k=k+1;重复执行步骤s51-s53。
从上述描述可知,通过上述方法,能够重新执行本轮的共识及验证过程,使系统的无反应或系统故障的节点数在系统允许最多容纳的错误节点数量的范围内,保证系统的正常稳定地运行。
请参照图2,本发明提供的一种应用于联盟链的拜占庭容错共识终端,包括存储器1、处理器2及存储在存储器1上并可在处理器2上运行的计算机程序,所述处理器2执行所述计算机程序时实现以下步骤:
s1:在每一轮共识过程中,根据每一个待选共识节点上存储的私钥、每一个待选共识节点的序号、当前的视图的编号及联盟链在上一轮共识过程产生的区块对应的哈希值,计算得到每一个待选节点对应的哈希值;
s2:根据每一个待选节点对应的哈希值,选出唯一的待选共识节点作为此轮共识过程的第一共识节点;
s3:通过所述第一共识节点生成提案信息,并分别发送所述提案信息至每一个待选共识节点;
s4:根据第一共识节点接收待选共识节点发送的所述提案信息对应的验证通过信息,生成标识信息;通过所述第一共识节点分别发送所述标识信息至每一个待选共识节点,若所述第一共识节点接收到的所述标识信息对应的验证通过信息的个数超过预设数目,则执行下一轮共识。
进一步的,所述的一种应用于联盟链的拜占庭容错共识终端,所述s1具体为:
通过预设第一公式,分别计算每一个待选节点对应的哈希值;
所述第一公式为:
其中,所述i=1,2,……,n,所述i表示待选共识节点的序号,所述n表示所有待选共识节点的总数量,h表示哈希函数,v当前视图的编号,v的初始值为1,blockpre表示联盟链上一轮共识过程中的共识节点对应的哈希值,σi表示序号为i的待选共识节点上存储的私钥,
进一步的,所述的一种应用于联盟链的拜占庭容错共识终端,所述s2具体为:
根据每一个待选节点对应的哈希值pi,计算得到pm,所述
选出序号为m的待选共识节点作为此轮共识过程的第一共识节点。
进一步的,所述的一种应用于联盟链的拜占庭容错共识终端,所述s3具体为:
通过所述第一共识节点生成提案信息;
所述提案信息包括
其中,所述preparerequest为预设的第一标识;所述m表示此轮共识过程中的第一共识节点的序号;所述blocknew表示此轮共识过程中的第一共识节点对应的哈希值;所述
通过所述第一共识节点分别发送所述提案信息至所有的待选共识节点。
进一步的,所述的一种应用于联盟链的拜占庭容错共识终端,所述s3和s4之间还包括:
当待选共识节点接收到所述提案信息时,通过所述待选第一共识节点对所述提案信息进行验证,若验证通过后,则发送验证通过信息至所述第一共识节点;
所述验证通过信息包括<prepareresponse,v,i,wi>,其中i≠m;所述prepareresponse表示预设的第二标识,所述i表示该待选共识节点的序号,wi=(ki-r·ski)mods,所述ski指序号为i的待选共识节点上存储的私钥。
进一步的,所述的一种应用于联盟链的拜占庭容错共识终端,所述s4具体为:
所述第一共识节点根据接收到的待选共识节点发送的验证通过信息,计算
通过第一共识节点分别发送标识信息至每一个待选节点,所述标识信息包括<commit,v,m,r,s,bs>,其中commit表示预设第三标识,所述bs包括bs[1]、bs[2]、……、bs[n];
若所述第一共识节点接收到的所述标识信息对应的验证通过信息的个数超过预设数目,则执行下一轮共识;
否则,执行信息更新步骤。
进一步的,所述的一种应用于联盟链的拜占庭容错共识终端,所述信息更新步骤,具体为:
s50,预设变量k,所述k的初始值为1;
s51:令vk=v+k;
s52:每一个待选共识节点发起视图更换请求;
s53:若经过预设时间间隔后,接收到不少于n-f个互不相同的待选共识节点发送的更新后的视图编号为vk时,令v=vk,并重复执行s1-s4;所述f是联盟链系统中最多能容纳的错误节点数量;
s54:否则令k=k+1;重复执行步骤s51-s53。
请参照图1,本发明的实施例一为:
本发明提供了一种应用于联盟链的拜占庭容错共识方法,包括以下步骤:
s1:在每一轮共识过程中,根据每一个待选共识节点上存储的私钥、每一个待选共识节点的序号、当前的视图的编号及联盟链在上一轮共识过程中产生的区块对应的哈希值,计算得到每一个待选节点对应的哈希值;
上一轮共识过程中产生的区块对应的哈希值为上一轮共识过程中的共识节点对应的哈希值。
其中,所述s1具体为:
通过预设第一公式,分别计算每一个待选节点对应的哈希值;
所述第一公式为:
其中,所述i=1,2,……,n,所述i表示待选共识节点的序号,所述n表示所有待选共识节点的总数量,h表示哈希函数,v当前视图的编号,v的初始值为1,blockpre表示联盟链上一轮共识过程中的共识节点对应的哈希值,σi表示序号为i的待选共识节点上存储的私钥,
s2:根据每一个待选节点对应的哈希值,选出唯一的待选共识节点作为此轮共识过程的第一共识节点;
其中,所述s2具体为:
将每一个待选节点对应的哈希值pi转换为二进制数,选出最大的二进制数对应的待选节点为此轮共识过程中的第一共识节点,所述第一共识节点的序号为m。
s3:通过所述第一共识节点生成提案信息,并分别发送所述提案信息至每一个待选共识节点(不包括第一共识节点);
其中,所述s3具体为:
通过所述第一共识节点生成提案信息;
所述提案信息包括
其中,所述preparerequest为预设的第一标识;所述m表示此轮共识过程中的第一共识节点的序号;所述blocknew表示此轮共识过程中的第一共识节点对应的哈希值;所述
通过所述第一共识节点分别发送所述提案信息至所有的待选共识节点。
s305:当待选共识节点接收到所述提案信息时,通过所述待选第一共识节点对所述提案信息进行验证(所述提案信息签名信息,验证签名信息,提案信息中所有信息的签名与格式),若验证通过后,则发送验证通过信息至所述第一共识节点;
所述验证通过信息包括<prepareresponse,v,i,wi>,其中i≠m;所述prepareresponse表示预设的第二标识,所述i表示该待选共识节点的序号,wi=(ki-r·ski)mods,所述ski指序号为i的待选共识节点上存储的私钥。
s4:根据第一共识节点接收待选共识节点发送的所述提案信息对应的验证通过信息,生成标识信息;通过所述第一共识节点分别发送所述标识信息至每一个待选共识节点,若所述第一共识节点接收到的所述标识信息对应的验证通过信息的个数超过预设数目,则执行下一轮共识;
其中,所述s4具体为:
等选预设第一时间后,所述第一共识节点根据接收到的待选共识节点发送的验证通过信息,计算
通过第一共识节点分别发送标识信息至每一个待选节点,所述标识信息包括<commit,v,m,r,s,bs>,其中commit表示预设第三标识,所述bs包括bs[1]、bs[2]、……、bs[n];
若所述第一共识节点接收到的所述标识信息对应的验证通过信息的个数超过预设数目,则执行下一轮共识;所述预设数目为n-f;所述f是联盟链系统中最多能容纳的错误节点数量;上述对标识信息的验证,主要验证签名的正确性,视图的正确性。
否则,执行信息更新步骤。
其中,所述信息更新步骤,具体为:
s50,预设变量k,所述k的初始值为1;
s51:令vk=v+k;
s52:一个待选共识节点发起视图更换请求;
其中,系统中存储了预设的多个视图,每一个视图与一个编号一一对应,且编号是从1开始的连接的整数。
s53:若经过预设时间间隔后,接收到不少于n-f个互不相同的待选共识节点发送的更新后的视图编号为vk时,令v=vk,并重复执行s1-s4;所述f是联盟链系统中最多能容纳的错误节点数量;所述时间间隔为产生区块对应的平均时间;
s54:否则令k=k+1;重复执行步骤s51-s53。
在实际应用过程中,上述联盟链的任意节点向全网广播交易数据,并附上该节点的签名数据;所有待选共识节点均独立监听全网的交易数据,并记录在内存中。
请参照图2,本发明的实施例二为:
本发明提供了一种应用于联盟链的拜占庭容错共识终端,包括存储器1、处理器2及存储在存储器1上并可在处理器2上运行的计算机程序,所述处理器2执行所述计算机程序时实现以下步骤:
s1:在每一轮共识过程中,根据每一个待选共识节点上存储的私钥、每一个待选共识节点的序号、当前的视图的编号及联盟链在上一轮共识过程中产生的区块对应的哈希值,计算得到每一个待选节点对应的哈希值;
其中,所述s1具体为:
通过预设第一公式,分别计算每一个待选节点对应的哈希值;
所述第一公式为:
其中,所述i=1,2,……,n,所述i表示待选共识节点的序号,所述n表示所有待选共识节点的总数量,h表示哈希函数,v当前视图的编号,v的初始值为1,blockpre表示联盟链上一轮共识过程中的共识节点对应的哈希值,σi表示序号为i的待选共识节点上存储的私钥,
s2:根据每一个待选节点对应的哈希值,选出唯一的待选共识节点作为此轮共识过程的第一共识节点;
其中,所述s2具体为:
将每一个待选节点对应的哈希值pi转换为二进制数,选出最大的二进制数对应的待选节点为此轮共识过程中的第一共识节点,所述第一共识节点的序号为m。
s3:通过所述第一共识节点生成提案信息,并分别发送所述提案信息至每一个待选共识节点(不包括第一共识节点);
其中,所述s3具体为:
通过所述第一共识节点生成提案信息;
所述提案信息包括
其中,所述preparerequest为预设的第一标识;所述m表示此轮共识过程中的第一共识节点的序号;所述blocknew表示此轮共识过程中的第一共识节点对应的哈希值;所述
通过所述第一共识节点分别发送所述提案信息至所有的待选共识节点。
s305:当待选共识节点接收到所述提案信息时,通过所述待选第一共识节点对所述提案信息进行验证,若验证通过后,则发送验证通过信息至所述第一共识节点;
所述验证通过信息包括<prepareresponse,v,i,wi>,其中i≠m;所述prepareresponse表示预设的第二标识,所述i表示该待选共识节点的序号,wi=(ki-r·ski)mods,所述ski指序号为i的待选共识节点上存储的私钥。
s4:根据第一共识节点接收待选共识节点发送的所述提案信息对应的验证通过信息,生成标识信息;通过所述第一共识节点分别发送所述标识信息至每一个待选共识节点,若所述第一共识节点接收到的所述标识信息对应的验证通过信息的个数超过预设数目,则执行下一轮共识;
其中,所述s4具体为:
等选预设第一时间后,所述第一共识节点根据接收到的待选共识节点发送的验证通过信息,计算
通过第一共识节点分别发送标识信息至每一个待选节点,所述标识信息包括<commit,v,m,r,s,bs>,其中commit表示预设第三标识,所述bs包括bs[1]、bs[2]、……、bs[n];
若所述第一共识节点接收到的所述标识信息对应的验证通过信息的个数超过预设数目,则执行下一轮共识;所述预设数目为n-f;所述f是联盟链系统中最多能容纳的错误节点数量;
否则,执行信息更新步骤。
其中,所述信息更新步骤,具体为:
s50,预设变量k,所述k的初始值为1;
s51:令vk=v+k;
s52:每一个待选共识节点发起视图更换请求;
s53:若经过预设时间间隔后,接收到不少于n-f个互不相同的待选共识节点发送的更新后的视图编号为vk时,令v=vk,并重复执行s1-s4;所述f是联盟链系统中最多能容纳的错误节点数量;
s54:否则令k=k+1;重复执行步骤s51-s53。
综上所述,本发明提供了一种应用于联盟链的拜占庭容错共识方法及终端,在每一轮共识过程中,根据每一个待选共识节点上的私钥、序号及上一轮共识过程的共识节点对应的哈希值,计算得到每一个待选共识节点对应的哈希值,从而筛选出唯一的第一共识节点;并通过所述共识节点,生成提案信息,并分别将提案信息发送至每一个待选共识节点;根据接收到由待选共识节点发送的与提案信息对应的验证通过信息,生成标识信息,并分别发送至每一个待选共识节点,若所述第一共识节点接收到的所述标识信息对应的验证通过信息的个数超过预设数目,则执行下一轮共识。本发明通过上述方案,在每一轮共识过程中无需要筛选出验证节点与提案共识,能够提高联盟链的共识效率;同时本发明由共识节点生成提案信息,并由各个待选验证节点进行验证,能够确保联盟链的安全性。
以上所述仅为本发明的实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等同变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。