一种区块链中共识节点动态增加方法及装置
技术领域
本申请涉及区块链技术领域,尤其涉及一种区块链中共识节点动态增加方法及装置。
背景技术
大部分的BFT SMR(状态机复制系统)都假设共识网络拓扑是静态的,不会随着时间而增长或者收缩。即便少数区块链系统实现了共识网络拓扑中共识节点的动态配置,但由于采用了状态机复制的技术,在大业务量的情况下其极低的性能也使得用于工程实践变得困难。另外,有的区块链系统虽然声称实现了共识节点的动态配置,但都是在停机或者业务暂停的基础上进行的。
随着区块链技术的发展,以及区块链商业化应用的趋势,势必需要一种实用的共识节点动态添加方案。
针对相关技术中存在的诸多技术问题,目前尚未提供有效的解决方案。
发明内容
为了解决上述技术问题或者至少部分地解决上述技术问题,本申请提供了一种区块链中共识节点动态增加方法及装置。
第一方面,本申请提供了一种区块链中共识节点动态增加方法,包括:
接收新的参与方发起的在共识网络中注册为新共识节点的注册请求;其中,所述注册请求用于向所述共识网络发起注册;
根据所述注册请求,生成写有新共识网络的拓扑信息的网络更新区块;其中,所述新共识网络中包括共识网络中的共识节点及新共识节点;
将所述共识网络中的区块信息以及所述网络更新区块同步至所述参与方及共识节点,得到所述新共识网络。
可选的,如前述的方法,所述根据所述注册请求,生成写有新共识网络的拓扑信息的网络更新区块,包括:
所述共识网络中的共识节点对所述注册请求进行拜占庭容错共识;所述注册请求中的内容包括所述参与方的信息,所述参与方的信息包括:所述参与方的网络地址、端口号;
在共识达成后,根据所述注册请求生成网络更新区块。
可选的,如前述的方法,在将所述共识网络中的区块信息以及所述网络更新区块同步至所述参与方及共识节点之前,还包括:
接收所述参与方发起的区块信息获取请求;
根据所述区块信息获取请求,向所述参与方反馈各个共识节点的当下的区块信息;用于使所述参与方从各个所述共识节点中选取区块信息完备的共识节点进行区块信息同步。
可选的,如前述的方法,所述将所述共识网络中的区块信息以及所述网络更新区块同步至所述参与方,包括:
接收所述参与方向数据源节点发起的区块同步请求;其中,所述数据源节点为所述区块信息完备的共识节点;
根据所述区块同步请求将所述数据源节点中的已有区块信息同步至所述参与方。
可选的,如前述的方法,所述根据所述区块同步请求将所述数据源节点中的已有区块信息同步至所述参与方,包括:
确定所述数据源节点中的各个已有区块信息对应的键值对数据集;
将所述键值对数据集从数据源节点对应的源数据库中拉取出后,存储至所述参与方的数据库中。
可选的,如前述的方法,将所述共识网络中的区块信息以及所述网络更新区块同步至所述共识节点,包括:
接收所述参与方发送的更新配置信息;
根据所述更新配置信息通知所述共识网络中的所述共识节点进行区块更新,使每个所述共识节点更新得到所述网络更新区块。
可选的,如前述的方法,还包括:
在同步时段内所述共识网络中达成新共识,并生成新区块信息时,对所述新共识节点进行所述新区块信息同步;所述同步时段为:将所述共识网络中的区块信息以及所述网络更新区块同步至所述参与方的时段。
可选的,如前述的方法,所述对所述新共识节点进行所述新区块信息同步,包括:
在所述新共识节点通过与共识节点进行比较,确定其他共识节点中包括所述新区块之后,通过状态机复制的方式对所述新区块对应的交易进行重放,使所述新共识节点中生成所述新区块。
第二方面,本申请提供了一种区块链中共识节点动态增加装置,其特征在于,包括:
接收模块,用于接收新的参与方发起的在共识网络中注册为新共识节点的注册请求;其中,所述注册请求用于向所述共识网络发起注册;
注册模块,用于根据所述注册请求,生成写有新共识网络的拓扑信息的网络更新区块;其中,所述新共识网络中包括共识网络中的共识节点及新共识节点;
同步模块,用于将所述共识网络中的区块信息以及所述网络更新区块同步至所述参与方及共识节点,得到所述新共识网络。
第三方面,本申请提供了一种电子设备,包括:处理器、通信接口、存储器和通信总线,其中,所述处理器、通信接口和存储器通过通信总线完成相互间的通信;
所述存储器,用于存放计算机程序;
所述处理器,用于执行所述计算机程序时,实现如前述任一项所述的处理方法。
第四方面,本申请提供了一种非暂态计算机可读存储介质,其特征在于,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令使所述计算机执行如前述任一项所述的处理方法。
本申请实施例提供了一种区块链中共识节点动态增加方法及装置,其中方法包括:接收新的参与方发起的在共识网络中注册为新共识节点的注册请求;其中,所述注册请求用于向所述共识网络发起注册;根据所述注册请求,生成写有新共识网络的拓扑信息的网络更新区块;其中,所述新共识网络中包括共识网络中的共识节点及新共识节点;将所述共识网络中的区块信息以及所述网络更新区块同步至所述参与方及共识节点,得到所述新共识网络。本申请实施例提供的上述技术方案相对相关技术而言,解决了新加入共识网络的节点通过状态机复制进行账本区块的数据同步,状态机复制会导致本地重放交易的计算量非常大,性能较低的问题;无需进行重放交易,进而在共识网络中添加共识节点的时候,可以有效降低进行区块信息同步时的各个共识节点的计算量、提高同步的效率。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本发明的实施例,并与说明书一起用于解释本发明的原理。
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本申请实施例提供的一种区块链中共识节点动态增加方法的方法流程示意图;
图2为本申请另一实施例提供的一种区块链中共识节点动态增加方法的方法流程示意图;
图3为本申请另一实施例提供的一种区块链中共识节点动态增加方法的方法流程示意图;
图4为本申请另一实施例提供的一种区块链中共识节点动态增加方法的方法流程示意图;
图5为本申请另一实施例提供的一种区块链中共识节点动态增加方法的方法流程示意图;
图6为本申请另一实施例提供的一种区块链中共识节点动态增加方法的方法流程示意图;
图7为本申请另一实施例提供的一种区块链中共识节点动态增加方法的方法流程示意图;
图8为本申请一种应用例的处理方法流程图;
图9为本申请实施例提供的一种区块链中共识节点动态增加装置的框图;
图10为本申请实施例提供的一种电子设备的结构示意图。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请的一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本申请保护的范围。
图1为本申请实施例提供的一种区块链中共识节点动态增加方法,如图1所示,包括如下步骤S1至S3:
S1.接收新的参与方发起的在共识网络中注册为新共识节点的注册请求;其中,注册请求用于向共识网络发起注册;
具体的,参与方可以通过SDK或者第三方管理工具向共识网络注册为新共识节点,进而与共识网络中的共识节点进行共识;可选的,发起注册请求的操作可以交易的形式发起;
S2.根据注册请求,生成写有新共识网络的拓扑信息的网络更新区块;其中,新共识网络中包括共识网络中的共识节点及新共识节点;
具体的,新共识网络为:原共识网络中的同时节点与参与方注册成功后的新共识节点组成的新的网络;网络更新区块中包括根据新共识网络的拓扑信息,拓扑信息一般为新共识网络的拓扑结构;
举例的,当收到以交易形式发起的注册请求之前,已有的区块信息为:block0、block1……blockN时,共识网络在收到注册请求之后,则会将交易写进区块,即产生新的区块blockN+1;且该区块中记录了上述的新共识网络的拓扑结构。
S3.将共识网络中的区块信息以及网络更新区块同步至参与方及共识节点,得到新共识网络。
具体的,区块信息即区块链中的账本区块;上述的将共识网络中的区块信息以及网络更新区块同步至参与方及共识节点为:将共识网络中的区块信息以及网络更新区块同步至参与方,以及,将共识网络中的区块信息以及网络更新区块同步至共识节点;因此参与方与共识节点的区块信息能够达成一致,至此参与方(同步后为新共识节点)与原来的共识网络中的各个共识节点都能从配置中了解到除其自身以外的其余节点的存在,使新共识节点及共识节点都能共同参与新交易的共识,因而得到了新共识网络。
如图2所示,在一些实施例中,如前述的方法,步骤S2根据注册请求,生成写有新共识网络的拓扑信息的网络更新区块,包括如下所述步骤S21和S22:
S21.共识网络中的共识节点对注册请求进行拜占庭容错共识;注册请求中的内容包括参与方的信息,参与方的信息包括:参与方的网络地址、端口号;
具体的,上述的拜占庭容错共识包括三个阶段:
1)、领导者提议阶段:将参与方作为新共识节点的提议;
2)、写(write)阶段:将提议写入各个共识节点中;
3)、接收(accept)阶段:各个共识节点接受将参与方作为新共识节点。
S22.在共识达成后,根据注册请求生成网络更新区块。
具体的,共识达成是指各个区块都接受将参与方作为新共识节点的提议;一般的,共识网络的拓扑信息可以存在于创世区块中,且拓扑信息可以包括各个共识节点的网络地址、端口号等信息;由于注册请求中可以包括参与方的网络地址、端口号,因此只要根据创世区块中的拓扑信息与注册请求即可得到包括根据新共识网络的拓扑信息的网络更新区块。至此,新共识网络的拓扑结构在原来的各个共识节点的数据库中已经落盘了。
如图3所示,在一些实施例中,如前述的方法,在步骤S3将共识网络中的区块信息以及网络更新区块同步至参与方及共识节点之前,还包括如下所述步骤A1和A2:
A1.接收参与方发起的区块信息获取请求;
具体的,由于在启动之初,参与方对应的数据库中没有任何账本区块信息,因此,若需要加入与其它共识节点的共识中,便需要获取其它共识节点的区块信息;可选的,获取其它共识节点的区块信息的方法可以是参与方主动请求获取的。
A2.根据区块信息获取请求,向参与方反馈各个共识节点的当下的区块信息;用于使参与方从各个共识节点中选取区块信息完备的共识节点进行区块信息同步。
具体的,由于共识网络中可能会存在“坏节点”,需要参与方与共识网络中的共识节点进行信息交互选出账本数据完备的共识节点作为数据源节点;因此在收到区块信息获取请求之后,向参与方反馈各个共识节点的当下的区块信息,以便于使参与方从各个共识节点中选取区块信息完备的共识节点进行区块信息同步。
如图4所示,在一些实施例中,如前述的方法,步骤S3中将共识网络中的区块信息以及网络更新区块同步至参与方,包括如下所述步骤S311和S312:
S311.接收参与方向数据源节点发起的区块同步请求;其中,数据源节点为区块信息完备的共识节点;
具体的,数据源节点为通过前述步骤A1和A2中参与方选出的区块信息完备的共识节点;可选的,参与方会获知数据源节点中存在的最新区块信息,因此上述的区块同步请求中会包括需要进行同步的区块,例如说,当参与方根据交互信息得知数据源节点具有最新区块BlockN+1,则会请求同步Block0至BlockN+1的所有区块;一般的,区块信息完备的共识节点中会包括前述实施例中的网络更新区块。
S312.根据区块同步请求将数据源节点中的已有区块信息同步至参与方。
可选的,本实施例中的已有区块信息同步的方法可以为数据同步,因此,明显有异于相关技术中通过状态机复制进行账本区块的数据同步的方法,可以大大降低通过状态机复制会导致本地重放交易的计算量大,影响性能的情况。
如图5所示,在一些实施例中,如前述的方法,步骤S312根据区块同步请求将数据源节点中的已有区块信息同步至参与方,包括:
S3121.确定数据源节点中的各个已有区块信息对应的键值对数据集;
具体的,上述键值对数据集为KV数据集,KV数据集中包括多个KV数据,每个区块信息都对应有一个KV数据,KV数据为key-value数据,采用分布式存储系统查询速度快、存放数据量大、支持高并发,非常适合通过主键进行查询;也就是说,区块信息以键值对数据的方式存储于数据库中。
S3122.将键值对数据集从数据源节点对应的源数据库中拉取出后,存储至参与方的数据库中。
具体的,在将键值对数据集从上述数据源节点的源数据库中拉取出,并存储至参与方的数据库中之后;若数据源节点未进行业务交易,则参与方的便达到和数据源节点账本区块一致性的要求了。
如图6所示,在一些实施例中,如前述的方法,步骤S3中将共识网络中的区块信息以及网络更新区块同步至共识节点,包括如下所述步骤S321和S322:
S321.接收参与方发送的更新配置信息。
一般的,该步骤是在步骤S312执行完成之后,由于参与方想要参与到后续的共识中,因此其发送更新配置信息到原来的共识网络中通知各个共识节点在共识层面更新配置即新共识网络的拓扑信息。
S322.根据更新配置信息通知共识网络中的共识节点进行区块更新,使每个共识节点更新得到网络更新区块。
具体的,网络更新区块可以通过交易的方式使各个共识节点获取该区块,并且,至此参与方与原来共识网络中的共识节点都能从配置中了解到除其自身以外其余节点(包括参与方)的存在,共同参与新交易的共识,因此参与方便其他共识节点处于同一个新共识网络中,成功注册成为一个新共识节点。
如图7所示,在一些实施例中,如前述的方法,还包括如下所述步骤S4:
S4.在同步时段内共识网络中达成新共识,并生成新区块信息时,对新共识节点进行新区块信息同步;同步时段为:将共识网络中的区块信息以及网络更新区块同步至参与方的时段。
具体的,举例说明:在参与方拉取键值对数据集的过程中,原共识网络节点并未间断处理业务交易,并对新的交易又达成了两轮共识,相应产生了两个新的区块BlockN+2,BlockN+3;在新共识节点(参与方注册成功后的共识节点)开启共识后,会有一个与其他共识节点比较区块信息的过程,通过比较得知自己落后两个区块信息,此时再对新区块信息进行同步,以达到和别的共识节点区块信息的一致性。
在一些实施例中,如前述的方法,步骤S4中对新共识节点进行新区块信息同步,具体包括:
在新共识节点通过与共识节点进行比较,确定其他共识节点中包括新区块之后,通过状态机复制的方式对新区块对应的交易进行重放,使新共识节点中生成新区块。
也就是说,在新共识节点开启共识后,通过与其他共识节点比较区块信息的过程,得知自己落后N个区块信息(即上述的新区块信息)之后,可以通过状态机复制的方式对落后区块中的交易进行重放,以达到和别的共识节点区块信息的一致性。
因此,本发明通过区块信息数据库复制与状态机复制(交易重放)补偿技术相结合的设计方案来解决不停机,不中断业务交易情况下的动态添加共识节点的问题。
如图8所示,采用本申请方法的一种应用例如下所述:
I、注册新的共识参与方
通过SDK或者第三方管理工具向共识网络注册新的参与方,这一操作会以交易的形式发起,交易内容包含新的参与方的网络地址,端口等信息;当这笔交易到达原来的共识网络后,会经历一个三阶段的BFT共识(拜占庭容错共识)过程,共识达成后交易写进区块,即BlockN+1新区块产生了,该区块里记录了新共识网络的拓扑。该步骤的目的是从数据库存储层面记录下共识节点的新网络拓扑,即便共识节点停机重启也能从该区块信息加载最新共识网络拓扑信息;
II、从数据源节点复制KV数据集
新的共识网络拓扑在原来的共识网络中的共识节点的数据库中已经落盘了,现在启动新的参与方节点进程。启动之初,新节点对应的数据库中没有任何账本区块信息,此时需要与原共识网络中的共识节点进行信息交互选出账本数据完备的共识节点作为数据源节点。新的参与方根据交互信息得知数据源节点具有最新区块BlockN+1,于是进行从0到N+1个区块对应的数据库中的KV数据集拉取;
III、原网络中的共识节点处理新交易
在新的参与方拉取KV数据集的过程中,原来的共识网络节点并未间断处理业务交易,并对新的交易又达成了两轮共识,相应产生了两个新的区块BlockN+2,BlockN+3;
IV、新的参与方开启共识
待新的参与方拉取了从0到N+1的全部区块数据,其中包括了共识网络拓扑变更的区块数据。此时新的参与方想要参与到后续的共识中,它发送消息到原来的共识网络通知原来的共识网络中的共识节点在共识层面更新配置即共识节点的新拓扑信息。至此新的参与方与原来的共识网络中的共识节点都能从配置中了解到其余节点的存在,共同参与新交易的共识。
V、状态机复制(重放部分交易)
新的参与方开启共识后,会有一个与其他共识节点比较账本信息的过程,通过比较得知自己落后两个区块,此时再通过状态机复制的方式对落后区块中的交易进行重放,以达到和别的共识节点账本区块的一致性。
如图9所示,根据本申请另一方面的一个实施例,还提供了一种区块链中共识节点动态增加装置,包括:
接收模块1,用于接收新的参与方发起的在共识网络中注册为新共识节点的注册请求;其中,注册请求用于向共识网络发起注册;
注册模块2,用于根据注册请求,生成写有新共识网络的拓扑信息的网络更新区块;其中,新共识网络中包括共识网络中的共识节点及新共识节点;
同步模块3,用于将共识网络中的区块信息以及网络更新区块同步至参与方及共识节点,得到新共识网络。
具体的,本发明实施例的装置中各模块实现其功能的具体过程可参见方法实施例中的相关描述,此处不再赘述。
根据本申请的另一个实施例,还提供一种电子设备,包括:如图10所示,电子设备可以包括:处理器1501、通信接口1502、存储器1503和通信总线1504,其中,处理器1501,通信接口1502,存储器1503通过通信总线1504完成相互间的通信。
存储器1503,用于存放计算机程序;
处理器1501,用于执行存储器1503上所存放的程序时,实现上述方法实施例的步骤。
上述电子设备提到的总线可以是外设部件互连标准(Peripheral ComponentInterconnect,PCI)总线或扩展工业标准结构(Extended Industry StandardArchitecture,EISA)总线等。该总线可以分为地址总线、数据总线、控制总线等。为便于表示,图中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
通信接口用于上述电子设备与其他设备之间的通信。
存储器可以包括随机存取存储器(Random Access Memory,RAM),也可以包括非易失性存储器(Non-Volatile Memory,NVM),例如至少一个磁盘存储器。可选的,存储器还可以是至少一个位于远离前述处理器的存储装置。
上述的处理器可以是通用处理器,包括中央处理器(Central Processing Unit,CPU)、网络处理器(Network Processor,NP)等;还可以是数字信号处理器(DigitalSignalProcessing,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。
本申请实施例还提供一种非暂态计算机可读存储介质,非暂态计算机可读存储介质存储计算机指令,计算机指令使计算机执行上述方法实施例的步骤。
需要说明的是,在本文中,诸如“第一”和“第二”等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
以上所述仅是本发明的具体实施方式,使本领域技术人员能够理解或实现本发明。对这些实施例的多种修改对本领域的技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所申请的原理和新颖特点相一致的最宽的范围。