一种基于PBFT的联盟链分片方法及相应的联盟链与流程

文档序号:17180340发布日期:2019-03-22 20:50阅读:671来源:国知局
一种基于PBFT的联盟链分片方法及相应的联盟链与流程

本发明涉及区块链的分片技术,更具体地,涉及一种基于pbft的联盟链分片方法及相应的联盟链。



背景技术:

区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。区块链(blockchain)是比特币的一个重要概念,它本质上是一个去中介化的数据库,同时作为比特币的底层技术,是一串使用密码学方法相关联产生的数据块,区块链具有去中心化、安全性高等特点,因此,在很多应用场合都使用区块链。

传统的区块链中只存在一条主链,当交易并发量较高时,传统的区块链会出现压力瓶颈,导致并发量低的问题。



技术实现要素:

本发明提供一种克服上述问题或者至少部分地解决上述问题的基于pbft的联盟链分片方法及相应的联盟链,解决了联盟链并发量低的问题。

根据本发明的一个方面,提供了一种基于pbft的联盟链分片方法,包括:

s1,根据联盟链中节点总数以及预设的最小节点共识数量,计算联盟链中所有节点被划分的片区数;

s2,根据所述片区数,按照预设规则将联盟链中的所有节点进行片区的划分;

s3,当联盟链中的节点接收到上链信息请求时,按照预设算法确定存储上链信息的片区;

s4,按照pbft算法将所述上链信息存储到确定的片区的区块中,并将产生的新区块广播到联盟链的所有节点中;

s5,对所述新区块进行哈希运算,将运算后的哈希值存储到联盟链的主链中。

本发明的有益效果为:基于pbft算法对联盟链进行分片,将联盟链划分为主链和多个片区链,当联盟链的交易量较高时,提高了联盟链系统的并发量。

在上述技术方案的基础上,本发明还可以做如下改进。

进一步的,所述步骤s1之前还包括:

当有新节点申请接入联盟链时,联盟链管理节点对申请加入的该新节点进行审核,待审核通过后,对该新节点进行编号,并将联盟链中更新后的所有节点名单广播至联盟链的所有节点。

进一步的,所述步骤s1具体包括:

当联盟链中的节点接收到联盟链管理节点广播的所有节点名单后,根据所述所有节点名单中的节点总数m和预设的最小节点共识数量n,计算联盟链中所有节点被划分的片区数x=[m/n],其中,m,n均为正整数;

相应的,所述步骤s2具体包括:

根据计算的片区数,将联盟链中所有节点等分为x个片区,每一个片区包括n个节点。

进一步的,所述根据计算的片区数,将联盟链中所有节点等分为x个片区具体包括:

划分后的第一片区包括编号为1~n的节点,第二片区包括编号为(n+1)~2n的节点,依次类推,第x个片区包括编号为(x-1)n+1~m的节点。

进一步的,所述步骤s3具体包括:

当联盟链中的节点接收到上链信息请求时,该节点计算出h=(上链信息+当前时间戳的哈希值),并计算y=(h的二进制后12位)modx+1,得到小于等于x的片区序号y,其中,y为确定存储上链信息的片区。

进一步的,所述步骤s4具体包括:

s41,接收到上链信息请求的节点与第y片区中的所有节点组成第y共识小组,其中,所述接收到上链信息请求的节点为第y共识小组的主节点,第y片区中的所有节点为第y共识小组的从节点;

s42,按照pbft算法进行出块,并将产生的新区块在第y共识小组的所有节点中进行更新;

s43,当第y共识小组的主节点接收到该共识小组中超过2/3个从节点的新区块更新成功的反馈时,该主节点将产生的新区块广播至联盟链的所有节点。

进一步的,所述步骤s5具体包括:

s51,当在第y共识小组中产生的新区块的数量为预设数量时,第y共识小组中的主节点对产生的预设数量的新区块进行哈希运算,得到对应的哈希值;

s52,第y共识小组中的所述主节点将所述哈希值发送给第一片区的所有节点,并按照pbft算法将所述哈希值存储到第一片区的主链上;

s53,第一片区的主链将所述哈希值广播至每一个片区的主链上,以使所述哈希值存储到联盟链的每一个片区的主链上。

进一步的,所述步骤s5之后还包括:

s6,根据需要验证的指定片区的指定区块,对所述指定区块进行哈希运算,得到运算后的哈希值,将该哈希值与存储于主链中的所述指定片区的所述指定区块的哈希值进行对比,若对比结果为一致,则表明指定片区的指定区块为正确,若不一致,则指定片区的指定区块为错误。

根据本发明的另一个方面,提供了一种基于pbft分片的联盟链,所述联盟链包括多个节点;

任一所述节点,用于根据联盟链中节点总数以及预设的最小节点共识数量,计算联盟链中所有节点被划分的片区数;还用于根据所述片区数,按照预设规则将联盟链中的所有节点进行片区的划分;

接收到上链信息请求的节点,用于按照预设算法确定存储上链信息的片区;还用于按照pbft算法将所述上链信息存储到确定的片区的区块中,并将产生的新区块广播到联盟链的所有节点中;以及还用于对所述新区块进行哈希运算,将运算后的哈希值存储到联盟链的主链中。

进一步的,所述联盟链包括一个联盟链管理节点;

所述联盟链管理节点,用于当有新节点申请接入联盟链时,对申请加入的该新节点进行审核;还用于待审核通过后,对该新节点进行编号,并将联盟链中更新后的所有节点名单广播至联盟链的所有节点。

附图说明

图1为本发明一个实施例的基于pbft的联盟链分片方法流程图;

图2为本发明一个实施例的联盟链片区划分流程图;

图3为本发明一个实施例的将上链信息进行存储的流程图;

图4为本发明一个实施例的将区块的哈希值存储于主链中的流程图。

具体实施方式

下面结合附图和实施例,对本发明的具体实施方式作进一步详细描述。以下实施例用于说明本发明,但不用来限制本发明的范围。

参见图1,提供了本发明一个实施例的基于pbft的联盟链分片方法,该方法对整个联盟链进行分片,能够提高整个联盟链的并发量。该分片方法包括:s1,根据联盟链中节点总数以及预设的最小节点共识数量,计算联盟链中所有节点被划分的片区数;s2,根据片区数,按照预设规则将联盟链中的所有节点进行片区的划分;s3,当联盟链中的节点接收到上链信息请求时,按照预设算法确定存储上链信息的片区;s4,按照pbft算法将所述上链信息存储到确定的片区的区块中,并将产生的新区块广播到联盟链的所有节点中;s5,对新区块进行哈希运算,将运算后的哈希值存储到联盟链的主链中。

在本实施例中,对整个联盟链的所有节点进行片区的划分,具体为联盟链中的节点根据加入联盟链的节点总数和预先配置的该联盟链的最小节点共识数量。其中,最小节点共识数量可以理解为划分后的每一个片区中包含的节点数量。节点根据联盟链中的节点总数和最小节点共识数量,计算将联盟链划分后的片区数,并根据片区数将联盟链中的所有节点进行片区的划分。

对联盟链中的所有节点进行片区的划分后,当节点接收到上链信息请求后,接收到上链信息请求的节点通过一定的规则选择一个片区,并通过pbft(practicalbyzantinefaulttolerance,实用拜占庭容错算法)将上链信息存储于选择的片区的区块中,并将产生的新区块在联盟链全网进行广播。

最后,还将产生的新区块进行哈希运算,将运算后的哈希值更新存储到联盟链主链的区块中,至此,完成上链信息在联盟链中的存储。对联盟链中的节点进行片区的划分,能够提高整个联盟链系统的并发量。

在本发明的一个实施例中,所述步骤s1之前还包括:当有新节点申请接入联盟链时,联盟链管理节点对申请加入的该新节点进行审核,待审核通过后,对该新节点进行编号,并将联盟链中更新后的所有节点名单广播至联盟链的所有节点。

在本实施例中,接入联盟链是需要审核的,具体为,每当有新节点申请加入联盟链时,联盟链管理节点会对申请加入的节点进行审核,只有审核通过才允许该节点加入联盟链。当该节点加入联盟链后。联盟链管理节点对该节点进行编号。其中,联盟链管理节点为联盟链中所有节点公选出来的,联盟链管理节点会对联盟链中所有节点包括自身进行编号,并形成所有节点名单,该所有节点名单也可称为该联盟链的白名单。联盟链管理节点形成了联盟链的所有节点名单后,将该所有节点名单广播至联盟链的所有节点。

在本发明的另一个实施例中,参见图2,所述步骤s1具体包括:当联盟链中的节点接收到联盟链管理节点广播的所有节点名单后,根据所有节点名单中的节点总数m和预设的最小节点共识数量n,计算联盟链中所有节点被划分的片区数x=[m/n],其中,m,n均为正整数。相应的,步骤s2具体包括:根据计算的片区数,将联盟链中所有节点等分为x个片区,每一个片区包括n个节点。

具体的,当联盟链中的节点接收到联盟链管理节点广播的所有节点名单,根据所有节点名单中的节点总数m和预先配置的最小节点共识数量n,计算联盟链中所有节点被划分的片区数x=m/n取整,其中,m,n均为正整数,即将联盟链中的所有节点等分为x个片区,每一个片区中包含n个节点。

在本发明的一个实施例中,将联盟链中的所有节点等分为x个片区,每一个片区中包括的节点数并不一定是严格相等的,其中,上述实施例中根据计算的片区数,将联盟链中所有节点等分为x个片区可以具体包括:划分后的第一片区包括编号为1~n的节点,第二片区包括编号为(n+1)~2n的节点,依次类推,第x个片区包括编号为(x-1)n+1~m的节点。

在本实施例中,将联盟链中的所有节点划分为x个片区时,每一个片区中的节点数量并不一定是完全相等的,由于当m为n的整数倍时,每一个片区中的节点数量确实是完全相等的,即每一个片区中包含n个节点;但是当m不为n的整数倍时,那么前面的(x-1)个片区中均包含n个节点,最后一个片区中包括(m-(x-1)n)个节点。这种对联盟链中所有节点进行划分的规则基本上可以理解为等分划分。

比如,联盟链中的节点总数为10个,最小节点共识数量为3,则将联盟链中的所有节点划分为3个片区,第一片区包括编号为1、2和3的3个节点,第二片区包括编号为4、5和6的3个节点,第三片区包括编号为7、8、9和10的4个节点。

在本发明的另一个实施例中,所述步骤s3具体包括:当联盟链中的节点接收到上链信息请求时,该节点计算出h=(上链信息+当前时间戳的哈希值),并计算y=(h的二进制后12位)modx+1,得到小于等于x的片区序号y,其中,y为确定存储上链信息的片区。

当联盟链中的节点接收到上链信息请求时,接收到该上链信息请求的节点会选择将上链信息存储于哪一个片区的区块中。其中,根据业务类型,上链信息可以为交易信息,也可以为学习数据信息。本实施例中采用一定的规则算法从联盟链的所有片区中随机选择一个片区,用来存储该上链信息。其中,本实施例提供了一种算法,即计算出h=(上链信息+当前时间戳的哈希值),并计算y=(h的二进制后12位)modx+1,计算出来的y为选择的片区序号,即将上链信息存储于第y片区,该序号y小于等于x。

本实施例通过上述的算法从联盟链的所有片区中随机选择一个片区,而不是固定片区,这样保证了整个联盟链系统中存储数据的安全性。

在本发明的一个实施例中,参见图3,步骤s4具体包括:s41,接收到上链信息请求的节点与第y片区中的所有节点组成第y共识小组,其中,所述接收到上链信息请求的节点为第y共识小组的主节点,第y片区中的所有节点为第y共识小组的从节点;s42,按照pbft算法进行出块,并将产生的新区块在第y共识小组的所有节点中进行更新;s43,当第y共识小组的主节点接收到该共识小组中超过2/3个从节点的新区块更新成功的反馈时,该主节点将产生的新区块广播至联盟链的所有节点。

将上链信息存储到选择的第y片区的区块中的具体过程为,当接收到上链信息请求时,接收到上链信息请求的节点与选择的第y片区的所有节点组成第y共识小组。其中,接收到上链信息请求的节点作为第y共识小组的主节点,第y片区中的所有节点作为第y共识小组的从节点。

依然以联盟链中节点总数为10为例,当联盟链中编号为1的节点接收到上链信息请求时,编号为1的节点采用前述实施例的算法选择的片区为第1片区,该第1片区的节点为编号为1、2和3的3个节点。那么编号为1、2和3的3个节点组成第1共识小组,其中,编号为1的节点为主节点,编号为2和3的节点为从节点。

在第1共识小组中,按照pbft算法进行出块,产生新区块,并将产生的新区块在第1共识小组的所有节点中进行更新,即将产生的新区块存储于第1共识小组的每一个节点中。

最后,第1共识小组中的从节点将新区块存储成功后,将存储成功后的反馈信息发送给主节点,当第1片区中超过2/3的从节点向主节点发送了存储成功的反馈信息后,主节点将新区块广播至联盟链全网的所有节点中,至此,在联盟链中的所有节点中均更新了新区块。

本实施例将产生的新区块在第y片区中进行存储成功的信息验证,保证了产生的新区块的有效性和安全性。

在本发明的一个实施例中,参见图4,步骤s5具体包括:s51,当在第y共识小组中产生的新区块的数量为预设数量时,第y共识小组中的主节点对产生的预设数量的新区块进行哈希运算,得到对应的哈希值;s52,第y共识小组中的所述主节点将所述哈希值发送给第一片区的所有节点,并按照pbft算法将所述哈希值存储到第一片区的主链上;s53,第一片区的主链将所述哈希值广播至每一个片区的主链上,以使所述哈希值存储到联盟链的每一个片区的主链上。

将产生的新区块在联盟链全网中进行存储后,本实施例将新区块的哈希值存储于联盟链的主链中。以一个具体的例子来说明,当第1片区中产生的新区块数量为10个时,也就是产生的新区块在第1片区中的编号为10的整数倍时,比如,当前产生的新区块在第1片区中的编号为20时,当前接收上链信息请求的节点,比如编号为5的节点在将第1片区中编号为11-20的这10个新区块广播至联盟链全网中时,对编号为11-20的这10个新区块进行哈希运算,得到对应的哈希值,并将哈希值发送给第1片区的所有节点,即编号为1、2和3的节点。此时,对于接收到上链信息请求的节点,即编号为5的节点和第1片区中的所有节点,即编号为1、2和3的节点组成一个共识小组,使用pbft算法将哈希值存储于第1片区的主链上。当产生的10个新区块对应的哈希值上链到第1片区的主链后,将该哈希值在其它的每一个片区的主链进行广播,至此,将产生的10个新区块的哈希值上链存储到联盟链的每一个片区的主链上。在本实施例的该例子中,当在某一个片区中每产生10个新区块时,将这10个新区块的哈希值存储于联盟链的主链区块中,最终联盟链的主链中存储有每一个区块的哈希值,其中,联盟链主链的区块对应保存有区块所在的片区以及该区块在该片区中的编号,以以便后续查询之用。

在本发明的一个实施例中,当需要对某一个片区的某些区块进行验证时,所述步骤s5之后还包括:s6,根据需要验证的指定片区的指定区块,对指定区块进行哈希运算,得到运算后的哈希值,将该哈希值与存储于主链中的所述指定片区的所述指定区块的哈希值进行对比,若对比结果为一致,则表明指定片区的指定区块为正确,若不一致,则指定片区的指定区块为错误。

上述实施例将每一个区块对应的哈希值存储于联盟链的主链中,当需要对某一个片区中的某些区块的数据信息进行验证是否正确时,根据需要验证的指定片区的指定区块,先对这些指定区块进行哈希运算,得到对应的哈希值。然后根据指定片区的编号以及指定区块在指定片区中的编号,在联盟链主链中查询这些区块对应的哈希值。将运算得到的哈希值与在联盟链主链中查找到的指定区块的哈希值进行对比。当对比结果为一致时,表明需要验证的指定片区的指定区块为正确有效的区块;若不一致,则指定片区的指定区块为正确有效的区块为错误无效的区块,实现了对区块的有效性的验证。

与本发明提供的基于pbft的联盟链分片方法相对应,本发明还提供了一种基于pbft分片的联盟链,联盟链中包括多个节点,这多个节点中包括有一个联盟链管理节点。

在本发明的一个实施例中,联盟链的任一节点,用于根据联盟链中节点总数以及预设的最小节点共识数量,计算联盟链中所有节点被划分的片区数;还用于根据片区数,按照预设规则将联盟链中的所有节点进行片区的划分。

接收到上链信息请求的节点,用于当接收到上链信息请求时,按照预设算法确定存储上链信息的片区;还用于按照pbft算法将上链信息存储到确定的片区的区块中,并将产生的新区块广播到联盟链的所有节点中;以及还用于对新区块进行哈希运算,将运算后的哈希值存储到联盟链的主链中。

联盟链管理节点,用于当有新节点申请接入联盟链时,对申请加入的该新节点进行审核;还用于待审核通过后,对该新节点进行编号,并将联盟链中更新后的所有节点名单广播至联盟链的所有节点。

在本发明的另一个实施例中,联盟链的任一节点,用于根据联盟链中节点总数以及预设的最小节点共识数量,计算联盟链中所有节点被划分的片区数具体包括:当联盟链中的节点接收到联盟链管理节点广播的所有节点名单后,根据所有节点名单中的节点总数m和预设的最小节点共识数量n,计算联盟链中所有节点被划分的片区数x=[m/n],其中,m,n均为正整数;相应的,联盟链的任一节点,还用于根据片区数,按照预设规则将联盟链中的所有节点进行片区的划分具体包括:根据计算的片区数,将联盟链中所有节点等分为x个片区,每一个片区包括n个节点。

在本发明的一个实施例中,联盟链的任一节点,用于根据计算的片区数,将联盟链中所有节点等分为x个片区,每一个片区包括n个节点具体包括:划分后的第一片区包括编号为1~n的节点,第二片区包括编号为(n+1)~2n的节点,依次类推,第x个片区包括编号为(x-1)n+1~m的节点。

在本发明的另一个实施例中,接收到上链信息请求的节点,用于当接收到上链信息请求时,按照预设算法确定存储上链信息的片区具体包括:当接收到上链信息请求时,计算出h=(上链信息+当前时间戳的哈希值),并计算y=(h的二进制后12位)modx+1,得到小于等于x的片区序号y,其中,y为确定存储上链信息的片区。

在本发明的一个实施例中,接收到上链信息请求的节点,还用于按照pbft算法将上链信息存储到确定的片区的区块中,并将产生的新区块广播到联盟链的所有节点中具体包括:接收到上链信息请求的节点与第y片区中的所有节点组成第y共识小组,其中,接收到上链信息请求的节点为第y共识小组的主节点,第y片区中的所有节点为第y共识小组的从节点;按照pbft算法进行出块,并将产生的新区块在第y共识小组的所有节点中进行更新;当第y共识小组的主节点接收到该共识小组中超过2/3个从节点的新区块更新成功的反馈时,该主节点将产生的新区块广播至联盟链的所有节点。

在本发明的另一个实施例中,接收到上链信息请求的节点,还用于对新区块进行哈希运算,将运算后的哈希值存储到联盟链的主链中具体包括:当在第y共识小组中产生的新区块的数量为预设数量时,第y共识小组中的主节点对产生的预设数量的新区块进行哈希运算,得到对应的哈希值;第y共识小组中的所述主节点将所述哈希值发送给第一片区的所有节点,并按照pbft算法将所述哈希值存储到第一片区的主链上;第一片区的主链将所述哈希值广播至每一个片区的主链上,以使所述哈希值存储到联盟链的每一个片区的主链上。

上述各实施例提供的一种基于pbft分片的联盟链的相关技术特征可以参考前述各实施例提供的一种基于pbft联盟链的分片方法的相关技术特征,在此不再赘述。

本发明提供的一种基于pbft的联盟片分片方法及相应的联盟链,基于pbft算法对联盟链进行分片,将联盟链划分为主链和多个片区链,当联盟链的交易量较高时,提高了联盟链系统的并发量;另外,在对上链信息进行存储时,采用一定的算法随机从多个片区中选择一个片区用来存储上链信息,而不是固定的片区,这样保证了联盟链整个系统存储数据信息的安全性,不容易被发现和篡改。

最后,本申请的方法仅为较佳的实施方案,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

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