CN116009940A - 共识集群的变更方法、装置、计算机设备及介质 - Google Patents
共识集群的变更方法、装置、计算机设备及介质 Download PDFInfo
- Publication number
- CN116009940A CN116009940A CN202211603619.2A CN202211603619A CN116009940A CN 116009940 A CN116009940 A CN 116009940A CN 202211603619 A CN202211603619 A CN 202211603619A CN 116009940 A CN116009940 A CN 116009940A
- Authority
- CN
- China
- Prior art keywords
- cluster
- consensus
- block
- state
- configuration
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Retry When Errors Occur (AREA)
Abstract
本申请实施例适用于区块链技术领域,提供了一种共识集群的变更方法、装置、计算机设备及介质,所述方法包括:若配置区块被提交执行,则生成检查点状态,所述配置区块中包括变更共识集群的配置交易,所述检查点状态为所述配置区块执行完成之后的所述共识集群的状态;若所述检查点状态包括集群变更信息,则丢弃目标区块的共识数据,所述目标区块为所述配置区块之后的空区块;基于所述检查点状态,对所述共识集群进行变更。通过上述方法,能够使共识集群变更之后的所有区块都由变更后的共识集群来进行共识。
Description
技术领域
本申请属于区块链技术领域,特别是涉及一种共识集群的变更方法、装置、计算机设备及介质。
背景技术
在区块链***中,数据增加与状态更新是以区块为单位链式叠加的,流水线形式的共识策略是一种可以保证区块链安全性,同时又能提升共识效率的常用方式,但是由于流水线共识的非立刻确认性,导致该区块链的共识可信集群变更难以实现。
例如,对于连续的区块B1、B2和B3,由于流水线共识的非立刻确认性,当B3投票共识完成之后,才能提交执行区块B1。在B1区块执行过程中,如果需要进行共识集群的变更,那么在共识可信集群变更之后,对于区块B2和B3的共识还是基于之前的共识可信集群进行的。但是,区块B2和B3实际上是B1区块之后的区块,对于区块B2和B3的共识,应当期望由变更之后的共识可信集群来进行共识,显然这在现有技术中并不能实现。
发明内容
有鉴于此,本申请实施例提供了一种共识集群的变更方法、装置、计算机设备及介质,用以提高由变更之后的共识可信集群来对配置区块之后的所有区块进行共识。
本申请实施例的第一方面提供了一种共识集群的变更方法,应用于区块链的节点设备,所述方法包括:
若配置区块被提交执行,则生成检查点状态,所述配置区块中包括变更共识集群的配置交易,所述检查点状态为所述配置区块执行完成之后的所述共识集群的状态;
若所述检查点状态包括集群变更信息,则丢弃目标区块的共识数据,所述目标区块为所述配置区块之后的空区块;
基于所述检查点状态,对所述共识集群进行变更。
本申请实施例的第二方面提供了一种共识集群的变更装置,应用于区块链的节点设备,所述装置包括:
生成模块,用于若配置区块被提交执行,则生成检查点状态,所述配置区块中包括变更共识集群的配置交易,所述检查点状态为所述配置区块执行完成之后的所述共识集群的状态;
丢弃模块,用于若所述检查点状态包括集群变更信息,则丢弃目标区块的共识数据,所述目标区块为所述配置区块之后的空区块;
变更模块,用于基于所述检查点状态,对所述共识集群进行变更。
本申请实施例的第三方面提供了一种计算机设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如上述第一方面所述的方法。
本申请实施例的第四方面提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现如上述第一方面所述的方法。
本申请实施例的第五方面提供了一种计算机程序产品,当所述计算机程序产品在计算机设备上运行时,使得所述计算机设备执行上述第一方面所述的方法。
与现有技术相比,本申请实施例包括以下优点:
应用本申请实施例提供的方法,用于变更共识集群的配置交易可以被打包在配置区块中,当配置区块被提交执行之后,节点设备可以生成检查点状态,用于确定共识集群是否发生变更。如果检查点状态中包括集群变更信息,则可以确定共识集群发生了变更,此时节点设备可以丢弃配置区块之后的空区块的共识信息;之后基于检查点状态,可以对共识集群进行变更。由于配置区块之后的区块为空区块,因此,在配置区块未执行前,配置区块之后的交易不会使用当前的共识集群进行共识;配置区块之后的空区块的共识数据的丢失,不会对区块链中的数据造成影响。本申请实施例,配置区块提交执行之后,可以不等待配置区块的执行结果,继续进行配置区块的共识,保障区块的执行和共识解耦;在区块执行和区块共识解耦的同时,基于配置区块之后的空区块,可以使得共识集群变更之后的区块可以使用变更后的共识集群进行共识。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单的介绍。
图1是本申请实施例提供的一种共识集群的变更方法的步骤流程示意图;
图2是本申请实施例提供的一种共识集群生成检查点的示意图;
图3是本申请实施例提供的一种共识集群变更的示意图;
图4是本申请实施例提供的一种共识集群变更失败的示意图;
图5是本申请实施例提供的另一种共识集群的变更方法的步骤流程示意图;
图6是本申请实施例提供的一种共识集群的变更装置的示意图;
图7是本申请实施例提供的一种计算机设备的示意图。
具体实施方式
以下描述中,为了说明而不是为了限定,提出了诸如特定***结构、技术之类的具体细节,以便透彻理解本申请实施例。然而,本领域技术人员应当清楚,在没有这些具体细节的其他实施例中也可以实现本申请。在其他情况中,省略对众所周知的***、装置、电路以及方法的详细说明,以免不必要的细节妨碍本申请的描述。
若共识集群使用链式拜占庭容错Hotstuff算法,则在共识集群中,需要遵循以流水线的方式进行三轮投票的一致性确认原则。即对于任意连续区块B1、B2、B3,当对区块B3投票成功后,可以提交区块B1,相当于在对区块B1进行了3次投票之后,确定一致才可以提交。
当节点接收到包含可执行的集群变更交易T的区块B1时,需执行区块B1得到区块B1的临时状态S1。此时,节点可从临时状态S1获得变更后的集群信息V2;对于B1的后继区块B2、B3,节点将以变更前的集群信息V1来验证提案与投票签名的正确性。直到对B3的投票成功,节点可以提交B1与其状态S1,并将共识集群变更为S1中的集群信息V2。对于B3之后的区块提案与投票,会使用新的集群信息V2来验证签名正确性。
在共识集群中,区块在未提交执行之前,需要进行预执行,预执行可以确定临时状态,临时状态可以提交至临时状态集中,即,当一节点收到区块B1后,在投票前首先执行B1区块,并记录区块B1执行后临时状态为S1;接收到区块B1’后,执行后得到S1’,B1’与B1拥有相同父区块,为不同的分支;接收到区块B2、B2’、B3后(B1->B2->B3,B1’->B2’),执行并得到临时状态S2、S2’、S3(S1->S2->S3,S1’->S2’)并进行投票,当B3投票成功后,提交区块B1状态S1,丢弃临时状态S1’。
在上述集群变更过程中,配置区块之后的两个区块仍然需要使用旧的共识集群来进行共识,显然这是不符合预期的,一个理想的集群变更状态为配置区块之后的所有区块均使用新的共识集群进行共识。基于此,本实施例提出来一种共识集群的变更方法。
下面通过具体实施例来说明本申请的技术方案。
参照图1,示出了本申请实施例提供的一种共识集群的变更方法的步骤流程示意图,具体可以包括如下步骤:
S101,若配置区块被提交执行,则生成检查点状态,所述配置区块中包括变更共识集群的配置交易,所述检查点状态为所述配置区块执行完成之后的所述共识集群的状态。
本实施例的执行主体可以为共识集群中的一个节点,该节点可以为共识节点,共识集群中可以包括多个共识节点,多个共识节点用于对共识集群中的提案进行投票;基于共识集群可以构建区块链。共识节点可以部署在一个对应的节点设备上,节点设备可以为计算机设备,比如电子计算机、服务器等。当然,区块链***中除了共识节点之外,还可以包括其他节点,其他节点可以不具有投票权。例如,在确定一个集群变更的提案是否通过时,共识节点具有投票权,当预设数量的共识节点投票确认可以进行共识集群的变更时,可以确定该提案通过;而其他节点可以直接接受各个共识节点的投票结果。
共识集群的变更可以包括共识集群中的共识节点的变更、共识算法的变更等,本实施例中使用共识集群的共识节点的变更作为示例对本申请方案进行说明。
当需要对共识集群中的节点进行变更时,管理员可以提起发起一个配置交易,该配置交易会被共识集群中的主节点接收,然后将配置交易打包到配置区块中。在一种可能的实现方式中,用于集群变更的配置交易可以具有对应的目标标记字段,当主节点接收到交易后,可以识别该交易是否携带目标标记字段;若该交易携带目标标记字段,则表明该交易为配置交易;主节点将配置交易打包进一个区块中,该区块即为配置区块;在配置区块打包完成之后,主节点可以停止将交易打包到区块中,使得配置区块之后的区块为不包含配置交易的空区块。在一种可能的实现方式中,配置区块中可以包括多个交易,多个交易中可以包括一个配置交易;在另一种可能的实现方式中,配置交易中也可以只包括一个配置交易;在另一种可能的实现方式中,在打包交易时,当识别到配置交易之后,可以将配置交易打包到区块中,然后对配置交易之后的交易不再进行打包,也就是说,可以将配置交易作为配置区块中的最后一个交易,基于此,若配置交易使得共识集群发生变更,则配置交易之后的所有交易均可以使用变更后的共识集群进行共识。
主节点可以将打包的区块广播至区块链中的各个节点,区块链中的每个节点获取到区块后,可以先通过投票对区块进行共识。区块在各个节点中共识完成达成一致后,可以进行提交执行,从而更新区块链的链上状态。
在一种可能的实现方式中,若区块链***中需要遵循以流水线的方式进行多轮投票的一致性确认原则,则可以对配置区块以及配置区块的后继区块进行共识,配置区块的后继区块可以为空区块;当预设数量的空区块共识完成之后,可以对配置区块进行提交执行。由于配置区块的后继区块为空区块,则在对空区块的投票共识过程中,相当于再次对配置区块进行了投票,同时由于空区块中不存在交易,相当于空区块的共识过程不涉及配置区块之后的交易的共识。
在一种可能的实现方式中,配置区块可以包括标识信息,根据该标识信息,节点设备可以确定该区块为配置区块。若节点设备识别到配置区块,则表明共识集群可能会发生集群状态的变更。为了保障集群状态的变更前后的区块链***的集群一致性,节点设备可以在满足配置区块的提交执行条件后,对配置区区块进行提交执行。
若配置区块被提交执行,则区块链中可以达到新的共识状态。基于该共识状态可以生成检查点信息。共识集群中的每个节点都可以生成检查点信息,然后每个节点可以将生成的检查点信息广播至共识集群中的其他节点,每个节点可以统计共识状态与本节点的检查点信息一致的其他检查点信息的数量;若该数量大于预设值,则可以表明存在预设数量的其他节点与本节点当前的共识状态一致。此时,可以认为区块链***的集群一致性检查通过。相当于完成了配置区块执行完成之后的状态的共识,此时可以生成检查点状态,检查点状态即为配置区块执行完成之后的共识集群的集群状态。该检查点状态可以在链上保存,从而可以在集群变更过程中保存共识集群的集群状态。
在一种可能的实现方式中,检查点信息可以包括共识集群的世代版本号,对于接收到的检查点信息,可以从中确定处于同一个世代的共识集群的其他节点的检查点信息。处于同一个世代的共识集群的其他节点的检查点信息达到预设数量时,可以确定该检查点信息达成一致。
生成检查点状态,相当于对节点设备中之前的区块进行一次确认,区块的共识过程和区块的执行过程互不相关,也就是不需要等待节点中的区块预执行之后才对执行后的状态进行共识,而是可以直接对区块进行共识,每隔一段时间或者是当出现配置区块之后,可以生成检查点状态,从而对集群状态进行共识。
图2是本申请实施例提供的一种共识集群生成检查点的示意图,图2中的Bk,Bk’均为接收到的区块,Bk与Bk’为拥有相同父区块的不同分支。参照图2,节点可以接收到区块B1、B1’、B2、B2’、B3、Bk、Bk’等,然后在接收到各个区块之后,可以不对区块做执行验证,当区块Bk成功生成检查状态之后,可以确定最终的一致性路径为B0-B1-B2-...-Bk,最终状态为Sk,此时可以丢弃B1’、B2’、B2”与B3’。换言之,在本申请实施例中,可以每隔预设数量的区块生成检查点,从而确定对应的基准状态,丢弃错误的区块;当检测到配置区块时,需要生成基于该配置区块的检查点状态,相当于对节点设备中的集群状态进行确认。
S102,若所述检查点状态包括集群变更信息,则丢弃目标区块的共识数据,所述目标区块为所述配置区块之后的空区块。
配置交易的执行可能成功也可能失败。若配置交易执行成功,则可以更改集群状态信息,例如,可以更改集群配置数据。集群配置数据可以包括共识集群的节点数量、节点公钥、共识协议的版本等。在配置区块执行之后,若集群配置数据更新,则可以生成状态标记;读取该状态标记,可以确定集群配置数据更新的区块高度,基于该当前执行高度可以查询该状态标记的话从而容易识别该集群状态是否被检查点对应的配置区块修改过。
在一种可能的实现方式中,可以通过共识集群的节点数量确定共识集群是否变更。节点设备可以确定检查点状态中的节点数量是否被配置区块修改;若检查点状态中的节点数量被配置区块修改,则可以确定检查点状态包括集群变更信息,也就是在该配置区块执行完成后,共识集群发生了变更。
若确定共识可信集群变更,则可以丢弃配置区块之后的目标区块的共识数据,该目标区块可以为配置区块之后不包含交易的空区块。由于区块的共识过程和执行过程是不相关的,也就是说在配置区块的执行过程中,配置区块之后的区块仍然在采用旧的共识集群进行共识;由于配置区块之后的区块应该使用变更之后的新的共识集群进行共识,因此,可以将配置区块之后的空区块的共识数据删除,相当于删除了在配置区块之后使用旧的共识集群得到的共识数据。
S103,基于所述检查点状态,对所述共识集群进行变更。
基于检查点状态可以获取到集群变更信息,集群变更信息可以为配置交易中携带的,基于集群变更信息可以确下一世代的集群的变更信息,在执行完配置交易之后,可以根据集群变更信息实现对共识可信集群中的共识节点的增删。在共识节点增删之后,节点设备需要同步集群状态,来完成集群变更。
在确定配置区块可以使共识集群发生变更之后,可以将检查点状态作为下一世代的共识集群的初始状态,基于该初始状态继续进行之后的共识。示例性地,可以基于检查点状态可以建立共识初始区块,共识初始区块对应的链上状态即为配置区块执行完成之后确认的检查点状态。将共识初始区块作为下一世代的共识集群的初始区块,使得下一世代对应的初始链上状态即为配置区块执行完成之后的链上状态,从而保障了集群变更之后,共识状态数据与变更之前保持一致且不丢失。在共识初始区块的基础上,可以启动对配置区块之后的交易的共识,即可以使用变更完成之后的集群状态继续进行交易共识。
共识集群可以有世代版本号,当共识集群变更时,共识集群的世代版本号可以更新。例如共识集群的世代版本号为1;当共识集群中增加一个共识节点后,共识集群更新到下一世代,世代版本号可以为2。
图3是本申请实施例提供的一种共识集群变更的示意图,如图3所示,S0、S1、Sc1、Sc1+1、Sc1+2、Sc2、Sc2+1均为共识集群的共识状态,共识状态可以存储在区块链的链上。如图3所示,S1为区块B1执行完成之后的第一世代的共识集群的共识状态,Sc1为区块Bc1执行完成之后的第一世代的共识集群的共识状态。区块链的链上状态不可以被更改,可以对区块链节点可见,因此,可以将达成一致的集群状态保存在链上,那么在共识集群变更后可以直接从链上获取到对应的共识状态,从而可以保障在共识集群变更完成之后与共识集群变更之前的共识状态保持一致。例如,区块链中的非共识节点可以直接从链上获取到最新的集群状态,从而保持节点处于最新的集群状态。
图3中的Epoch=1,表明共识集群处于第一世代,在共识集群处于第一世代时,B0为共识初始区块,对应的状态为S0;在区块B1执行后,得到对应的状态S1。之后节点设备可以获取B1之后的区块进行共识和执行。当节点设备获取到配置区块后,可以基于配置区块进行共识集群的变更。图3中的Bc1为配置区块,在配置区块之后,节点设备可以获取到两个空区块Bc1’。区块Bc1和Bc1’均采用第一世代的共识集群进行共识,当两个区块Bc1’共识完成之后,节点设备可以对配置区块Bc1提交执行;若在配置区块Bc1执行完成之后,共识集群变更到第二世代,则可以基于配置区块执行完成之后的状态Sc1,建立第二世代的共识集群的初始共识区块B0,相当于,在集群变更之后,下一世代的共识集群是在上一世代共识集群的最终状态的基础上进行后续区块的共识的。此时,在配置区块之后的Bc1’的共识数据可以丢弃,因为其共识是通过第一世代的共识集群进行的,但是实际上共识集群已经变更到了第二世代,同时由于Bc1’为空区块,其共识并不涉及到交易的共识,对其共识数据进行丢弃,并不会导致共识集群的状态错误,因此,可以直接丢弃Bc1’的共识数据,且不需要使用变更之后的共识集群对Bc1’重新共识。Bc2、Bc2’均采用第二世代的共识集群进行共识;若在配置区块Bc2执行完成之后,共识集群变更到第三世代,则可以基于配置区块执行完成之后的状态Sc2,建立第三世代的共识集群的初始共识区,在配置区块之后的空区块Bc2’的共识数据可以丢弃。
若检查点状态不包括集群变更信息,则可以说明配置区块无效,也就是配置区块执行完成之后,共识集群并不会变更,这可能是由于配置交易执行失败造成的,当然也有可能存在其他状况。这种状况下,可以直接恢复后续的正常打包过程,继续使用当前的共识集群进行后续的区块的共识。
图4是本申请实施例提供的一种共识集群变更失败的示意图。如图4所示,Bc为配置区块,Bc和Bc’均采用第一世代的共识集群进行共识的,若共识集群变更失败之后,可以继续对后续的正常区块Bc+1采用第一世代的共识集群进行共识。
本实施例中,节点设备在接收到区块之后,不需要进行执行验证,而是在区块提交之后,通过执行模块执行其中的交易变更,在执行完成之后生成检查点,从而使得只有在配置区块执行后需要等待执行后的检查点结果,其余时间共识和执行流程是完全并行的。此外,配置区块之后的区块为空区块,当共识集群变更完成之后才恢复正常打包流程,使得当成功执行配置区块执行变更配置后,都保证下一个被执行的包含交易的区块是由新的共识集群共识。
参照图5,示出了本申请实施例提供的一种共识集群的变更方法的步骤流程示意图,具体可以包括如下步骤:
S501,在交易打包过程中,将包含目标标记字段的配置交易打包到所述配置区块中,所述目标标记字段用于标识变更所述共识集群。
本实施例中的执行主体为共识集群的主节点,共识集群的节点可以为部署区块链网络的计算机设备,比如电子计算机、服务器等。区块链中可以包括多个节点,在多个节点中可以包括一个主节点。
区块链可以通过发起和执行交易来解决业务,区块链的主节点可以接收到用于进行业务处理的交易。主节点可以将接收到的交易打包成区块,基于区块实现对交易的批量处理。
区块链管理员在变更共识集群时,可以向区块链中的主节点发送配置交易,该配置交易中可以包括共识集群的增删节点信息。主节点接收到区块链管理员发送的交易之后,可以识别该交易的交易类型。若主节点识别到该交易为配置交易,则在将该配置交易打包到配置区块之后,可以暂停正常的打包流程,使得配置区块之后的区块为空区块。在一种可能的实现方式中,在打包完配置区块之后,主节点可以继续打包,但是不再将交易打包到区块中,也就是使得配置区块之后的所有区块为空区块。
在另一种可能的实现方式中,在打包完配置区块后,主节点可以继续打包预设数量的空区块,在预设数量的空区块打包完成之后,可以阻塞打包进程,不再打包区块。示例性地,若区块链***中需要遵循以流水线的方式进行多轮投票的一致性确认原则,那么可以根据投票轮数确定需要打包的空区块的数量。需要打包的空区块的数量可以为投票轮数减一。例如,区块链***中需要遵循以流水线的方式进行三轮投票的一致性确认原则,那么主节点可以在打包完两个空区块之后,不再进行打包。
S502,将所述配置区块广播到所述共识集群的其他节点设备。
主节点在将区块打包完成之后,可以将打包好的区块广播至共识集群中的各个节点,从而使得各个节点可以接收到对应的交易,并在各个节点中执行交易,以解决对应业务。主节点在打包好配置区块和空区块后,也会将配置区块和空区块广播至共识集群的各个节点中。
主节点可以将配置区块广播至共识集群中的其他节点设备,从而使得各个节点设备中都可以接收到配置区块,并对配置区块进行共识、提交执行等。区块链中的各个节点设备可以获取到区块。主节点可以获取到自己打包的区块,其他节点可以接收到来自主节点的区块。获取到区块后,节点设备可以进行区块的共识,在共识完成配置区块之后,可以对配置区块进行提交执行。在配置区块提交执行时,节点设备可以继续进行配置区块之后的空区块的共识,也就是区块的执行过程和共识过程互不影响。
在一种可能的实现方式中,区块链可以遵循以流水线的方式进行多轮投票的一致性确认原则,也就是需要对配置区块之后的预设数量的区块进行投票完成一致性确认后,才能对配置区块进行提交执行。共识集群中的各个节点接收到的区块均是由主节点打包并发送的。即,各个节点在接收到配置区块之后,接收到的区块为空区块。那么各个节点在对配置区块共识完成之后,可以对配置区块的后续区块也就是空区块进行共识。若配置区块之后的预设数量的空区块共识完成之后,则节点可以对配置区块提交执行。
示例性地,主节点在打包完配置区块之后,可以打包空区块,当配置区块之后的预设数量的空区块共识完成之后,可以对配置区块进行提交执行。在配置区块提交的过程中,主节点可以继续打包空区块,各个节点也可以继续进行空区块的共识。
在另一个示例中,在打包完配置区块后,主节点可以打包预设数量的空区块,将预设数量的空区块广播至其他节点设备之后,可以阻塞打包流程,即也不打包空区块,也不会将空区块广播至其他节点,而是等待共识集群是否变更以及变更是否完成。例如,区块被提交执行需要经过三轮投票,则主节点在配置区块打包完成之后,可以打包两个空区块。在两个空区块打包完成之后,主节点可以阻塞打包进程。主节点将两个空区块广播至共识集群中的每个节点中,共识集群中的每个节点可以对接收到的区块进行共识。在这两个空区块被共识集群中的节点共识完成之后,可以对配置区块提交执行,并等待配置区块的执行结果。如图3所示的区块链***中可以遵循以流水线的方式进行三轮投票的一致性确认原则。因此,配置区块Bc1之后可以包括两个空区块Bc1’为空区块,配置区块Bc1的共识相当于对配置区块进行了一次投票确认,在对配置区块之后的两个空区块Bc1’共识的过程中,相当于又对配置区块进行了两次投票确认,因此,在两个空区块Bc1’共识完成之后,相当于对配置区块Bc1完成了三轮投票的一致性确认,此时可以对配置区块Bc1进行提交执行,以进行共识集群的变更。同理,配置区块Bc2之后可以包括两个空区块Bc2’为空区块,在两个空区块Bc2’共识完成之后,可以对配置区块Bc2进行提交执行,以将共识集群由第二世代变更到第三世代。
图4中的区块链***中也可以遵循以流水线的方式进行三轮投票的一致性确认原则。如图4所示,配置区块Bc之后可以包括两个空区块Bc’为空区块,在两个空区块Bc’,可以执行对配置区块Bc的提交执行。
S503,若配置区块被提交执行,则生成检查点状态,所述配置区块中包括变更共识集群的配置交易,所述检查点状态为所述配置区块执行完成之后的所述共识集群的状态。
S504,若所述检查点状态包括集群变更信息,则丢弃目标区块的共识数据,所述目标区块为所述配置区块之后的空区块。
S505,基于所述检查点状态,对所述共识集群进行变更。
本实施例中的S503-S505与上一实施例中的S101-S103类似,可以相互参考,在此不赘述。
S506,若所述检查点状态不包括所述集群变更信息或所述共识集群变更完成,则继续执行所述交易打包过程。主节点在配置区块执行完成之后,可以继续使用旧的共识集群或者使用更新后的共识集群进行区块的共识,此时主节点可以继续执行打包交易过程,将一批交易打包到一个区块中。在将交易打包到区块之后,主节点可以继续将打包好的区块广播至当前的共识集群的各个节点中,以在共识可信集群中对区块中的各个交易进行共识并执行。
示例性地,若检查点状态不包括所述集群变更信息,则可以说明配置区块无效,例如配置交易执行失败或配置交易中不包含集群状态变更,此时可以继续使用当前的共识集群进行配置区块之后的交易的共识,此时,可以恢复交易打包过程。
示例性地,若共识集群变更完成,例如配置交易包含集群状态变更且配置交易执行成功,则可以使用变更完成之后的共识集群进行配置区块之后的交易的共识,此时可以恢复交易打包过程。
此外,在共识集群变更时,可以生成集群变更证明。若检查点状态包括集群变更信息,则生成集群变更证明,集群变更证明中可以包括该配置区块对应的变更后的集群信息以及各个节点设备对配置区块进行投票的投票信息。例如,集群变更证明中可以包括变更后的集群中的节点信息、共识协议、各个节点的公钥以及在此次变更时,对集群变更进行确认投票的多个节点信息。基于集群变更证明,可以证明集群变更的合法性,相当于可以验证集群的变更之后的状态是否合法。
在一种可能的实现方式中,集群在每次变更时,均可以生成一个集群变更证明,各个集群变更证明可以组成一个证明列表,基于证明列表,可以对集群的每次变更进行验证,从而确定当前的集群状态是否正确。
集群变更证明可以用于进行集群状态同步。节点设备可以接收其他节点设备的集群状态同步请求,向其他节点设备返回共识集群当前的集群状态信息和集群变更证明,其他节点设备可以根据集群变更证明验证当前的集群状态信息是否合法,若根据集群变更证明可以验证当前集群状态合法,则可以同步该当前集群状态。
在一种可能的实现方式中,集群变更证明可以与对应的链上状态关联存储,在共识集群存在新增的共识节点时,可以直接从链上获取到对应的集群状态和集群变更证明,从而根据集群变更证明对集群状态进行验证,在验证通过后,可以直接同步集群状态。
在一种可能的实现方式中,新增的共识节点可以接收共识可信集群中其他共识节点发送的消息,该消息可以携带有其他共识节点的世代版本号。新增的共识节点可以从接收到的消息中确定最新的世代版本号,向该最新的世代版本号对应的节点发送集群世代同步请求。之后可以接收该节点返回的集群状态和集群变更证明,基于集群变更证明可以验证集群状态是否正确;当集群状态正确时,可以同步该集群状态。
在一种可能的实现方式中,当接收到其他节点设备的消息的世代版本号低于当前世代的世代版本号,可以向其他节点设备返回当前集群状态和集群变更证明,从而使得其他节点设备可以根据集群状态和集群变更证明同步集群状态。
在一种可能的方式中,区块链中除了共识节点外,还可以包括其他非共识节点,这些节点可以在集群变更证明验证通过后,可以直接拉取共识节点的集群状态。
本实施例中,可以在打包到配置区块之后,暂停正常的交易打包流程;并在共识集群变更或者确定配置区块不会使共识集群变更之后,可以继续打包流程,使得配置区块之后的区块可以为不包含交易的空区块,空区块的共识不涉及到交易的共识,从而使得共识集群变更之后,配置区块之后的所有包含交易的区块都可以使用更新后的共识集群进行共识。
需要说明的是,上述实施例中各步骤的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本申请实施例的实施过程构成任何限定。
参照图6,示出了本申请实施例提供的一种共识集群的变更装置的示意图,该装置可以应用于节点设备,具体可以包括生成模块61、丢弃模块62和变更模块63,其中:
生成模块61,用于若配置区块被提交执行,则生成检查点状态,所述配置区块中包括变更共识集群的配置交易,所述检查点状态为所述配置区块执行完成之后的所述共识集群的状态;
丢弃模块62,用于若所述检查点状态包括集群变更信息,则丢弃目标区块的共识数据,所述目标区块为所述配置区块之后的空区块;
变更模块63,用于基于所述检查点状态,对所述共识集群进行变更。
在一种可能的实现方式中,上述装置还包括:
确定模块,用于确定所述检查点状态中的节点数量是否被所述配置区块修改;
判断模块,用于若所述节点数量被所述配置区块修改,则确定所述检查点状态包括所述集群变更信息。
在一种可能的实现方式中,若所述节点设备为主节点设备,上述装置还包括:
配置区块打包模块,用于在交易打包过程中,将包含目标标记字段的配置交易打包到所述配置区块中,所述目标标记字段用于标识变更所述共识集群;
广播模块,用于将所述配置区块广播到所述共识集群的其他节点设备,所述配置区块由所述主节点设备和所述其他节点设备分别提交执行。
在一种可能的实现方式中,若所述节点设备为主节点设备,上述装置还包括:
继续打包模块,用于若所述检查点状态不包括所述集群变更信息或所述共识集群变更完成,则继续执行所述交易打包过程。
在一种可能的实现方式中,上述装置可以包括:
集群变更证明生成模块,用于生成集群变更证明,所述集群变更证明包括变更后的共识集群信息以及各个所述节点设备对所述配置区块进行投票的投票信息;
集群状态同步模块,用于若接收到其他节点设备的集群状态同步请求,则向所述其他节点设备返回所述共识集群当前的集群状态信息和所述集群变更证明,所述其他节点设备用于根据所述集群变更证明验证当前的所述集群状态信息是否合法。
在一种可能的实现方式中,上述变更模块可以包括:
共识初始区块建立子模块,用于根据所述检查点状态建立共识初始区块,所述共识初始区块与执行完成之后的所述配置区块的链上状态相对应;
初始区块确定子模块,用于将所述共识初始区块作为下一世代的共识集群的初始区块;
共识子模块,用于采用所述初始区块启动对所述配置区块之后的各个区块中的交易的共识。
在一种可能的实现方式中,上述装置还包括:
共识模块,用于基于当前的共识集群,对所述配置区块以及所述目标区块进行共识;
提交模块,用于若预设数量的所述目标区块共识完成,则提交执行所述配置区块。
对于装置实施例而言,由于其与方法实施例基本相似,所以描述得比较简单,相关之处参见方法实施例部分的说明即可。
图7为本申请实施例提供的一种计算机设备的结构示意图。如图7所示,该实施例的计算机设备7包括:至少一个处理器70(图7中仅示出一个)处理器、存储器71以及存储在所述存储器71中并可在所述至少一个处理器70上运行的计算机程序72,所述处理器70执行所述计算机程序72时实现上述任意各个方法实施例中的步骤。
所述计算机设备7可以是桌上型计算机、笔记本、掌上电脑及云端计算机设备等计算设备。该计算机设备可包括,但不仅限于,处理器70、存储器71。本领域技术人员可以理解,图7仅仅是计算机设备7的举例,并不构成对计算机设备7的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件,例如还可以包括输入输出设备、网络接入设备等。
所称处理器70可以是中央处理单元(Central Processing Unit,CPU),该处理器70还可以是其他通用处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现成可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
所述存储器71在一些实施例中可以是所述计算机设备7的内部存储单元,例如计算机设备7的硬盘或内存。所述存储器71在另一些实施例中也可以是所述计算机设备7的外部存储设备,例如所述计算机设备7上配备的插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)等。进一步地,所述存储器71还可以既包括所述计算机设备7的内部存储单元也包括外部存储设备。所述存储器71用于存储操作***、应用程序、引导装载程序(BootLoader)、数据以及其他程序等,例如所述计算机程序的程序代码等。所述存储器71还可以用于暂时地存储已经输出或者将要输出的数据。
本申请实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现可实现上述各个方法实施例中的步骤。
本申请实施例提供了一种计算机程序产品,当计算机程序产品在计算机设备上运行时,使得计算机设备执行时实现可实现上述各个方法实施例中的步骤。
以上所述实施例仅用以说明本申请的技术方案,而非对其限制。尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围,均应包含在本申请的保护范围之内。
Claims (10)
1.一种共识集群的变更方法,其特征在于,应用于节点设备,所述方法包括:
若配置区块被提交执行,则生成检查点状态,所述配置区块中包括变更共识集群的配置交易,所述检查点状态为所述配置区块执行完成之后的所述共识集群的状态;
若所述检查点状态包括集群变更信息,则丢弃目标区块的共识数据,所述目标区块为所述配置区块之后的空区块;
基于所述检查点状态,对所述共识集群进行变更。
2.如权利要求1所述的方法,其特征在于,在所述若配置区块被提交执行,则生成检查点状态之后,所述方法还包括:
确定所述检查点状态中的节点数量是否被所述配置区块修改;
若所述节点数量被所述配置区块修改,则确定所述检查点状态包括所述集群变更信息。
3.如权利要求1所述的方法,其特征在于,若所述节点设备为主节点设备,所述方法还包括:
在交易打包过程中,将包含目标标记字段的配置交易打包到所述配置区块中,所述目标标记字段用于标识变更所述共识集群。
4.如权利要求3所述的方法,其特征在于,所述方法还包括:
若所述检查点状态不包括所述集群变更信息或所述共识集群变更完成,则继续执行所述交易打包过程。
5.如权利要求1-4任一项所述的方法,其特征在于,所述方法还包括:
生成集群变更证明,所述集群变更证明包括变更后的共识集群信息以及各个所述节点设备对所述配置区块进行投票的投票信息;
若接收到其他节点设备的集群状态同步请求,则向所述其他节点设备返回所述共识集群当前的集群状态信息和所述集群变更证明,所述其他节点设备用于根据所述集群变更证明验证当前的所述集群状态信息是否合法。
6.如权利要求1-3任一项所述的方法,其特征在于,所述基于所述检查点状态,对所述共识集群进行变更,包括:
根据所述检查点状态建立共识初始区块;
将所述共识初始区块作为下一世代的共识集群的初始区块;
在所述初始区块的基础上,启动对所述配置区块之后的各个区块中的交易的共识。
7.如权利要求1所述的方法,其特征在于,在配置区块被提交执行之前,所述方法还包括:
基于当前的共识集群,对所述配置区块以及所述目标区块进行共识;
若预设数量的所述目标区块共识完成,则提交执行所述配置区块。
8.一种共识集群的变更装置,其特征在于,应用于节点设备,所述装置包括:
生成模块,用于若配置区块被提交执行,则生成检查点状态,所述配置区块中包括变更共识集群的配置交易,所述检查点状态为所述配置区块执行完成之后的所述共识集群的状态;
丢弃模块,用于若所述检查点状态包括集群变更信息,则丢弃目标区块的共识数据,所述目标区块为所述配置区块之后的空区块;
变更模块,用于基于所述检查点状态,对所述共识集群进行变更。
9.一种计算机设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现如权利要求1-7任一项所述的方法。
10.一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1-7任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211603619.2A CN116009940A (zh) | 2022-12-13 | 2022-12-13 | 共识集群的变更方法、装置、计算机设备及介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211603619.2A CN116009940A (zh) | 2022-12-13 | 2022-12-13 | 共识集群的变更方法、装置、计算机设备及介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116009940A true CN116009940A (zh) | 2023-04-25 |
Family
ID=86027452
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211603619.2A Pending CN116009940A (zh) | 2022-12-13 | 2022-12-13 | 共识集群的变更方法、装置、计算机设备及介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116009940A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116723200A (zh) * | 2023-08-11 | 2023-09-08 | 杭州趣链科技有限公司 | 集群变更方法、装置、电子设备及计算机可读存储介质 |
-
2022
- 2022-12-13 CN CN202211603619.2A patent/CN116009940A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116723200A (zh) * | 2023-08-11 | 2023-09-08 | 杭州趣链科技有限公司 | 集群变更方法、装置、电子设备及计算机可读存储介质 |
CN116723200B (zh) * | 2023-08-11 | 2023-11-10 | 武汉趣链数字科技有限公司 | 集群变更方法、装置、电子设备及计算机可读存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11249947B2 (en) | Distributed digital ledger transaction network for flexible, lazy deletion of data stored within an authenticated data structure | |
US20230161756A1 (en) | Scalable, secure, efficient, and adaptable distributed digital ledger transaction network | |
US20230116348A1 (en) | Scalable, secure, efficient, and adaptable distributed digital ledger transaction network | |
CN108648078B (zh) | 一种交易预处理方法、装置及电子设备 | |
US11405204B2 (en) | Scalable, secure, efficient, and adaptable distributed digital ledger transaction network | |
CN109815373B (zh) | 数据存储的控制方法、装置、服务器及可读存储介质 | |
US20200394648A1 (en) | Scalable, secure, efficient, and adaptable distributed digital ledger transaction network | |
WO2023184881A1 (zh) | 提案共识执行方法、区块链***、设备和存储介质 | |
EP4071649A1 (en) | Scalable, secure, efficient, and adaptable distributed digital ledger transaction network | |
US20200394177A1 (en) | Scalable, secure, efficient, and adaptable distributed digital ledger transaction network | |
CN115225639B (zh) | 共识可信集群的变更方法、装置、计算机设备及介质 | |
CN116009940A (zh) | 共识集群的变更方法、装置、计算机设备及介质 | |
WO2023040453A1 (zh) | 一种交易信息处理方法及装置 | |
Blackshear et al. | Sui lutris: A blockchain combining broadcast and consensus | |
CN116192395A (zh) | 用于分散式数据存储的可信*** | |
CN116710919A (zh) | 区块链机器网络加速引擎 | |
CN114119242A (zh) | 基于自适应窗口分片的联盟链性能优化方法及装置 | |
CN117955742B (zh) | 数据跨链交互的验证方法、装置、挑战节点及存储介质 | |
CN115438053A (zh) | 区块存储方法、区块链***、设备和存储介质 | |
Arun et al. | Revamping Byzantine Fault Tolerant State Machine Replication with Decentralization, Trusted Execution, and Practical Transformations | |
CN112598518A (zh) | 一种支持跨链原子交易的处理方法 | |
JP2023547817A (ja) | ブロックチェーンマシンネットワークアクセラレーションエンジン | |
CN112150286A (zh) | 基于区块链的交易处理方法、装置、电子设备及存储介质 | |
Carr et al. | Towards Formal Verification of HotStuff-based Byzantine Fault Tolerant Consensus in Agda: Extended Version | |
Durov | Catchain Consensus: An Outline |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |