具体实施方式
下面将结合附图对本申请技术方案的实施例进行详细的描述。以下实施例仅用于更加清楚地说明本申请的技术方案,因此只作为示例,而不能以此来限制本申请的保护范围。
除非另有定义,本文所使用的所有的技术和科学术语与属于本申请的技术领域的技术人员通常理解的含义相同;本文中所使用的术语只是为了描述具体的实施例的目的,不是旨在于限制本申请;本申请的说明书和权利要求书及上述附图说明中的术语“包括”和“具有”以及它们的任何变形,意图在于覆盖不排他的包含。
在本申请实施例的描述中,技术术语“第一”“第二”等仅用于区别不同对象,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量、特定顺序或主次关系。在本申请实施例的描述中,“多个”的含义是两个以上,除非另有明确具体的限定。
在本文中提及“实施例”意味着,结合实施例描述的特定特征、结构或特性可以包含在本申请的至少一个实施例中。在说明书中的各个位置出现该短语并不一定均是指相同的实施例,也不是与其它实施例互斥的独立的或备选的实施例。本领域技术人员显式地和隐式地理解的是,本文所描述的实施例可以与其它实施例相结合。
在本申请实施例的描述中,术语“和/或”仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如 A 和/或 B,可以表示:单独存在 A,同时存在 A 和 B,单独存在 B 这三种情况。另外,本文中字符“/”,一般表示前后关联对象是一种“或”的关系。
目前,区块链系统中共识轮次落后的共识节点的数据同步方式主要包括:落后的共识节点从头执行一遍所有接收到的交易,使得落后的共识节点的账本数据和被同步的共识节点一致;或者直接同步至被同步的共识节点的最终账本数据,而不再逐一执行交易。然而,区块链的数据更新需要共识协议的参与,共识过程也是连续的,每个共识节点需要依赖上一共识阶段的数据集,例如上一轮的共识结果、签名证书等。如果落后的共识节点仅更新了最新的账本数据,由于缺少历史共识协议的数据而无法参与后续的共识。
针对的传统的共识协议,例如工作量证明(Proof of Work,POW)、权益证明(Proofof Stake,POS)等共识协议,在数据同步过程中,仅对部分区块进行POW的计算结果或POS签名的复验即可实现共识协议的同步;而针对实用拜占庭容错(Practical Byzantine FaultTolerance,PBFT)算法、尤物拜占庭容错(HotStuffBFT)算法等基于半同步网络假设的拜占庭容错的共识协议,需要引入检查点或快照的机制,记录下当时的视图view或共识轮次round等共识信息,并经过法定数量的共识节点签名确认。当落后的共识节点需要进行快速同步时,对检查点或快照进行验证,并向其他共识节点请求检查点之后的共识数据,无需再对检查点之前的历史数据进行一一校验与处理。
然而,在完全异步网络下的拜占庭容算法中,由于每一轮共识过程都没有确定的主节点,共识节点提交的时机也是概率性的;而且在异步网络情景下,节点提案被提交的先后顺序可能都是错乱的(部分节点先于其他节点提出的提案,可能在其他节点的提案达成共识被提交后,才会被提交)。从而在基于检查点的快速同步机制下违反安全性保证,即检查点或快照之前的共识数据(提案、投票、证书)会在检查点之后被提交并改变区块链的账本状态。
基于上述无法参与共识以及违反安全性保证等问题,本申请实施例提供了一种在异步网络下的数据同步方法,使得共识协议无需从头再处理一遍交易而可以实现共识状态的同步,并可以参与新的共识轮次。
为了便于本领域技术人员对方案实现原理的理解,先对相关的技术术语进行介绍。
1、半同步网络:半同步网络假设也称为异步系统中的弱同步,它假定消息的发送和接收是在一个未知但有限的时间内完成的,也就是说,参与者之间的时钟可能存在不同步的情况。在半同步网络假设下,消息的可靠性和有序性不能完全保证,但是可以采取一些措施(超时机制)来降低错误的发生概率。
2、异步网络:异步网络假设假定消息的发送和接收是在一个完全不同步的情况下完成的,也就是说,参与者之间的时钟可能存在任何的差异。在异步网络假设下,消息的可靠性和有序性都不能得到保证,因此需要采取更加复杂的机制来保证通信的正确性和安全性。
3、拜占庭容错:指分布式系统可以容忍拜占庭将军问题,即允许集群中存在少部分恶意节点。
4、主节点:基于半同步的一致性算法中发起提案的共识节点,而在异步网络下每个参与共识的节点都可以同时发起提案。
5、法定数量(quorum):拜占庭容错算法中达成共识所需要的投票数,在共识集群中节点数量n=3f+1时,quorum为2f+1,f为最大容忍的拜占庭恶意节点数量,f为大于或等于1的整数。
6、法定证书:包含quorum个节点签名的证明集合。
7、引用:指新一轮的证书在创建时附加了前一轮的证书摘要,A引用B相当于在有向无环图结构中,A到B存在一条单向路径。
8、有向无环图(Directed Acyclic Graph,DAG):在DAG的每个顶点都是各共识节点在每一轮共识的法定证书,每个路径都是法定证书之间的引用。
9、可靠拜占庭广播:可靠拜占庭广播指确定消息被正确的广播到至少法定数量(quorum)个节点,发送方保证消息来源的可靠,接收方在保证消息正确接收后才可以做出响应。
下面通过具体实施例介绍本申请提出的数据同步方法的应用场景。
请参见图1,图1示出了本申请实施例提供异步网络集群的架构示意图。如图1所示,该异步网络集群的架构中可以包括多个共识节点,例如节点A、节点B、节点C以及节点D。该异步网络集群中的各个共识节点采用有向无环图的结构维护各个共识节点的交易提案;在每一轮共识过程,每个共识节点会产生一个交易提案,并引用前一轮共识的至少法定数量(2f+1)的交易提案,需要被提交时,每一轮至少有法定数量的交易提案被提交,而剩余数量(f)的交易提案会在任意不确定的时机被提交;例如,共识节点A的DAG图中在第r轮次包括与节点A、节点B、节点C和节点D的交易提案对应的顶点,在需要被提交时,该第m轮次的至少有三个节点的交易提案被提交,从而保证异步网络集群的区块链系统的安全性和一致性。
在一些实施例中,为了降低基于DAG的共识过程的存储开销,限制了交易提案被提交的轮次范围,即引入最大提交轮次限制m,每次提交新的共识轮次r时,不再提交r-m以及之前的共识轮次未提交的交易提案。例如m为5,当前需要提交第10共识轮次的交易提案时,则不再提交第1轮至第5轮中未提交的交易提案;若第6轮的交易提案还未被提交,可以继续提交,若第6轮的交易提案已被提交,则从第7轮开始提交至第10轮的交易提案。
相应地,在提交完第r轮的交易提案之后,若异步网络集群中的共识节点再发起r-m轮次及之前的交易提案、投票共识或者法定证书时,也不再进行合法性校验与处理。也即,每个共识节点在提交完成第r轮的交易提案时,可以只保留集合(r-m,r)轮次共识数据即可保证该区块链系统的安全性;而对于共识轮次落后的共识节点,需要向其他共识节点同步在自身视角下的集合(r′-m,r′)轮次的共识数据,即落后的共识节点需要同步其他法定数量的共识节点均完成的共识轮次r′的共识数据,该共识轮次r′可能为轮次r之前的轮次或者与轮次r相同的共识轮次。
本申请实施例,为了进一步保证落后的共识节点同步共识数据时的安全性,引入类似于检查点机制,通过检查点机制确定出法定数量的共识节点均完成提交的共识轮次,从而为落后的共识节点提供数据同步的参考,同时基于共识节点中DAG维护的提案交易以及对应的经过投票生成的法定证书,实现落后节点对共识数据的快速同步,提高异步网络集群在拜占庭容错假设下落后节点的同步效率,降低新加入节点参与共识的延迟。
图1仅示例性说明异步网络集群的架构,其中还可以包括更多数量的共识节点,在此不作具体限定。
下面通过实施例,基于上述异步网络集群架构,进一步介绍数据同步方法的具体实现过程。
参见图2A,本申请实施例提供的数据同步方法的实现流程示意图。该方法可以应用于上述图1中异步网络集群中的任意一个共识轮次落后的共识节点(以下同通过第一共识节点说明),如图2A所示,该方法可以包括以下步骤:
S201,获取异步网络集群中的第二共识节点在第二共识轮次发送的法定证书。
在一些实施例中,第一共识节点为异步网络集群中共识轮次落后的共识节点,第二共识节点可以为共识轮次相对于第一共识节点的共识轮次靠后的共识节点;例如在图1中的异步网络集群中,节点A为共识轮次落后的第一共识节点,其共识轮次处于第一共识轮次(如第5轮),节点B为共识轮次靠后的第二共识节点,其共识轮次处于第二共识轮次(如第10轮)。
示例性的,在异步网络集群中,每个共识节点基于DAG图维护各个节点发起的交易提案,并将各个共识节点发起共识的交易提案在投票通过后,将各个交易提案的法定证书存储到DAG的相应共识轮次的顶点。由于异步网络集群中的各个共识节点提交交易提案的时机不同,各共识节点所处的共识轮次不同,各共识节点所维护的DAG图的状态也不同,例如第一共识节点所处的共识轮次为第5轮,其对应生成的DAG图为5轮的结构,第二共识节点所处的共识轮次为第10轮,其对应生成的DAG图则为10轮的结构。
需要说明的是,异步网络集群中的每个共识节点在发起交易提案,并获得法定数量的共识节点投票通过后,基于投票结果生成法定证书,在接收其他节点的法定证书的同时,向其他共识节点发送法定证书,从而在生成的法定证书和接收到的其他共识节点的法定证书的数量达到法定数量时,将各个共识节点的法定证书存入到各自DAG图中的顶点。法定证书中包括各共识节点所处的共识轮次的标识,从而共识节点在接收到其他共识节点的法定证书后,可以基于法定证书中的共识轮次的标识,确定各个共识节点所处的共识轮次。
在一些实施例中,在获取异步网络集群中的第二共识节点在第二共识轮次发送的法定证书之前,该方法还包括:
向第二共识节点广播所述交易提案,交易提案基于交易提案引用关系引用上一共识轮次至少法定数量的共识节点的交易提案;基于至少法定数量的第二共识节点对交易提案的投票结果,生成交易提案的法定证书,并将生成的法定证书存储至有向无环图的顶点。
其中,有向无环图中的法定证书基于交易提案引用关系引用上一共识轮次至少法定数量的共识节点的法定证书。
示例性的,异步网络集群中各个共识节点在各自的共识轮次发起交易提案,向集群中的其他共识节点进行可靠广播该交易提案,发起投票共识,在接收到至少法定数量的共识节点投票通过后(签名通过后),基于至少法定数量的共识节点的投票结果(签名结果)生成法定证书,将法定证书存入DAG图的顶点,同时将接收到的其他共识节点的法定证书也存入DAG图的顶点;如图4中的(a)图所示,在每个共识轮次,依次将不同节点的法定证书存入DAG图中各个轮次的顶点,例如在第1轮,将节点A、节点B、节点C以及节点D分别在第1轮的法定证书存入各个顶点A1、B1、C1和D1,在第2轮,将节点A、节点C和节点D分别在第2轮的法定证书存入各个顶点A2、C2和D2。
示例性的,共识节点在发起交易提案时会引用前一共识轮次的至少法定数量的交易提案,从而基于该交易提案的引用关系,生成的法定证书引用上一共识轮次的至少法定数量的法定证书。如图4中的(a)图所示,第2轮的每个顶点的法定证书均引用第1轮的至少法定数量的顶点的法定证书。
需要说明的是,为了降低DAG存储的开销,实际存入DAG各个顶点的可以为法定证书的摘要哈希值,由于摘要哈希值仅为较短的字段,从而可以降低DAG存储空间的占用量。
如图5所示,每个共识节点可以包括可信交易池模块、确认模块、执行模块以及提交模块,通过各个模块实现快速同步的各项流程。
示例性的,每个共识节点的可信交易池模块运行可信交易池协议,负责将自己节点的提案通过可靠拜占庭广播的方式发送给其他共识节点,以搜集法定数量的投票并生成法定证书;同时接收其他共识节点发送的法定证书,根据法定证书与上一共识轮次的法定证书的引用关系,生成各自的有向无环图DAG的拓扑结构。
相应地,每个共识节点通过提交模块运行提交协议,接收来自可信交易池模块的法定证书,提交满足条件的法定证书以及其引用的所有父级法定证书。例如每个共识节点在运行一定轮次数的共识后,至少法定数量的共识节点投票,选择DAG中一个目标共识轮次的一个目标顶点的法定证书进行提交(提交满足条件的法定证书),例如图3中所示的被提交的顶点。
其中,提交模块的提交协议保证了提交的安全性,当被提交的法定证书所引用的父级法定证书未被提交时,会先提交该父级法定证书以及其引用的法定证书,例如图4中的(b)图所示,当被提交的顶点为B4时,则基于其引用的顶点从A1开始(均未被提交的情况下),按DAG结构维护的法定证书的顺序,依次将顶点A1-B1-C1-D1-A2-C2-D2-A3-B3-D3-B4的法定证书进行提交,从而即使在异步网络场景下各个共识节点的进度不一致,也不会出现提交先后顺序的错乱,保证提交的安全性。
相应地,每个共识节点通过执行模块接收来自提交模块提交的序列子图,如图3中的(b)图所示的按提交次序依次提交的顶点对应的第一序列子图和第二序列子图,将各个序列子图对应的交易提案按照提交的顶点及其引用的各个顶点的顺序排列并执行,并基于执行结果更新账本状态;账本状态随着执行的序列子图的数量或序号更新。例如执行一个序列子图对应的交易提案,该共识节点的账本状态高度加1。
需要说明的是,图3和图4中所示共识节点中的DAG图仅示例性说明,并不对每个共识节点中的DAG图的结构状态进行限定。
S202,若当前所处的第一共识轮次的轮次数小于第二共识轮次的轮次数,则向第二共识节点发送同步数据请求。
在一些实施例中,第一共识节点所处的第一共识轮次的轮次数可以定义为lR,第二共识节点所处的第二共识轮次的轮次数可以为hR;即第一共识节点的DAG维护的共识轮次达到lR,第二共识节点的DAG维护的共识轮次到达hR,当lR<hR时,且在第二共识节点没有生成检查点信息的情况下,落后的第一共识节点在接收到高轮次的第二共识节点的共识消息后,可以直接向高轮次的第二共识节点发送同步数据请求;该同步数据请求可以包括共识轮次范围的标识,例如共识轮次的范围可以是(lR-m,hR),其中,m为预设的最大提交轮次限制的轮次数量,lR-m可以为限制提交轮次的标识,即第lR-m共识轮次及之前的共识轮次中未被提交的交易提案不再被提交。
例如,第一共识节点处于第5轮,第二共识节点处于第10轮,m设置为3,当第一共识节点接收到第二共识节点的共识消息(例如第二共识节点的法定证书),发现落后于第二共识节点的共识轮次,则向第二共识节点发送同步数据请求,该同步数据请求中可以包括第2轮(5-3)和第10轮的标识,即向第二共识节点请求集合(2,10)共识轮次范围内的共识数据。
S203,接收并同步第二共识节点基于有向无环图反馈的第一共识轮次对应的限制提交轮次与第二共识轮次之间的第一目标法定证书和目标交易提案。
示例性的,第一共识节点接收第二共识节点基于同步数据请求发送的第一目标法定证书和目标交易提案。通过预设的最大提交轮次限制的轮次数量,以及基于有向无环图结构维护的法定证书以及相应的交易提案,可以保证在各个共识节点的共识进度不一致时不会出现提交先后顺序的错乱;而且DAG中的法定证书对应各个共识节点的投票结果以及与前面轮次的引用关系,可以直接基于第二共识节点的DAG图同步并生成相应共识轮次的DAG拓扑图,从而可以直接参与后续的共识过程,降低了落后节点参与共识的延迟;还可以基于最大提交轮次的限制,对限制提交轮次之前的历史数据定期清理,降低DAG存储的开销。
示例性的,第一共识节点可以接收第二共识节点发送的序列子图,该序列子图对应的法定证书包含各个共识轮次的投票情况(共识情况)以及相邻共识轮次的法定证书的引用关系,从而第一共识节点可以将获取到的序列子图同步到自己的DAG中,进而可以直接参与后续的共识过程;另外,由于DAG中存储的为交易提案经过投票后生成的法定证书(或者证书摘要哈希值),因此可以基于该序列子图获取对应的交易提案,并通过执行模块将该序列子图对应的交易提案按照DAG存储的顺序排列并执行,基于执行结果更新账本状态。
例如,第一共识节点的共识轮次落后于第二共识节点的共识轮次,第二共识节点提交了两次序列子图,如图3中的(b)图所示的第一序列子图和第二序列子图,则第一共识节点需要按提交次序依次同步两个序列子图,获取两个序列子图对应的法定证书和交易提案;并按每个序列子图的顺序第一共识节点执行对应的交易提案,基于对序列子图的执行结果,更新账本状态,例如执行完两个序列子图对应的交易提案,账本状态高度加2。
需要说明的是,第一共识轮次对应的限制提交轮次与第二共识轮次之间的第一目标法定证书和目标交易提案为第一共识节点在该共识轮次范围内缺少的证书和交易,同步过程还包括该共识轮次范围内法定证书以及交易提案的引用关系的同步。
在一种可能的实现方式中,当第二共识节点未生成第一共识节点的第一共识轮次与第二共识节点的第二共识轮次之间的检查点信息时,可以基于上述方式落后的共识节点实现数据快速同步;在另一种可能的实现方式中,异步网络集群中的共识节点在完成每轮的共识后,会周期性的生成检查点信息,该检查点信息用于记录共识节点的共识状态。
参见图2B,本申请另一实施例提供的数据同步方法的实现流程示意图,在向第二共识节点发送同步数据请求之后,该方法还包括:
S204,接收至少法定数量个第二共识节点发送的检查点信息,检查点信息用于指示目标共识轮次的共识状态。
其中,目标共识轮次为位于第一共识轮次与第二共识轮次之间的共识轮次。共识节点在完成每轮的共识后,会周期性的生成检查点信息,例如经过三个共识轮次或四个共识轮次生成一次检查点信息,记录相应的共识状态以及提交状态等信息。例如第二共识节点生成共识轮次cR(lR<cR<hR)的检查点信息,该检查点信息对应的限制提交轮次的范围为(cR-m,cR)。该检查点信息记录的目标共识轮次可以为共识节点在完成某一轮共识后,确定出的被提交的共识轮次;目标共识轮次的序列子图,可以为被提交的共识轮次中确定出的被提交的顶点对应的序列子图。
示例性的,如图5所示,每个共识节点的确认模块可以运行检查点协议,基于执行模块的执行结果以及提交模块提交的序列子图,生成检查点信息,检查点信息可以包括目标共识轮次对应的共识状态,以及在限制共识轮次范围内的DAG状态,即在集合(r-m,r]范围内,各个共识节点被提交的提案轮次集合。例如共识状态可以包括轮次r、证书标识id、序列子图序号s,提案轮次集合可以为检查点信息记录的被提交的顶点对应的各共识节点的提交状态{Vi:Ri}|i∈[1,n],其中i为共识节点的索引,V为共识节点对应的法定证书(或摘要哈希值),R为对应的轮次。例如图4中的(b)图所示,检查点信息记录的被提交的顶点B4对应的序列子图为第一次提交的序列子图,则相应的共识状态(轮次r,证书标识id,序列子图序号s)为(4,B4,1),对应的各共识节点的提案轮次集合为{A3:3,B4:4,C2:2,D3:3},即A的提案提交到A3,B的提交到B4,C的提交到C2,D的提交到D3。
示例性的,如图5所示,第二共识节点的确认模块基于执行模块的执行结果以及提交模块提交的序列子图定期生成检查点信息。在第一共识节点的确认模块在接收到来自至少法定数量个第二共识节点的检查点信息后,在对检查点信息记录的被提交的顶点的法定证书无误后,将检查点信息发送给自己的执行模块。
S205,基于检查点信息记录的有向无环图中的序列子图,同步目标共识轮次的共识状态。
示例性的,落后的第一共识节点的执行模块,在接收到检查点信息后,基于检查信息记录的有向无环图中的序列子图(例如图4中的(b)图所示的被提交的顶点B4对应的序列子图),同步目标共识轮次的共识状态,例如目标共识轮次对应的法定证书、提案轮次集合以及法定证书的引用关系等。
在一些实施例中,在接收至少法定数量个第二共识节点发送的检查点信息之后,该方法还包括:
若执行交易的状态高度落后于检查点信息记录的状态高度,则获取第二共识节点在目标共识轮次的账本数据;基于账本数据,将账本状态同步至检查点信息记录的状态高度。
示例性的,执行交易的状态高度可以为共识节点的执行高度,例如每执行一个序列子图对应的交易提案,其状态高度加1。检查点信息中还记录有第二共识节点在目标共识轮次对应的状态高度,即第二共识节点在目标共识轮次执行了几个序列子图对应的交易提案。
示例性的,若第一共识节点的执行模块在接收到检查点信息后,对比执行模块执行的状态高度与检查点信息记录的状态高度,若落后于检查点信息记录的状态高度,则直接同步检查点信息记录的目标轮次的账本数据,将账本状态同步至与检查点信息记录的状态高度。通过账本数据快速同步,无需再重新执行一遍交易提案进行账本数据的更新,提高了数据同步的效率。
示例性的,第一共识节点的执行模块同步账本状态后,将检查点信息发送给自己的提交模块,由于各个模块间相互独立,需要提交模块再次基于检查点信息进行判断。
在一些实施例中,基于检查点信息记录的有向无环图中的序列子图,同步目标共识轮次的所述共识状态,包括:
S2051,若第一共识节点的有向无环图中不存在检查点信息记录的序列子图,则获取检查点信息记录的序列子图的元数据。
示例性的,第一共识节点的提交模块基于检查点记录的序列子图,查找是否存在该序列子图(例如已经被提交过,则存在该序列子图,否则不存在),如果不存在,则基于检查点信息进一步获取该序列子图的元数据。
S2052,基于获取到的元数据,将提交状态更新为目标共识轮次对应的共识状态。
其中,该元数据可以包括该序列子图被提交时对应的法定证书的摘要哈希值,以及每个共识节点在提交该序列子图时的提案轮次集合{Vi:Ri}|i∈[1,n]。然后更新提交模块的共识状态,即检查点信息记录的目标共识轮次对应的共识状态。例如将提交的轮次更新为cR轮次对应的共识状态,然后将该cR轮次的共识状态发送给可信交易池模块。
S2053,基于共识状态,向第二共识节点请求目标共识轮次对应的限制提交轮次与目标共识轮次之间的第二目标法定证书。
示例性的,第一共识节点的可信交易池模块在接收到提交模块的共识状态(cR,cR)后,将DAG对应的限制提交轮次的范围更新为集合(cR-m,cR],并请求该集合中缺少的法定证书。第一共识节点的可信交易池模块在请求集合(cR-m,cR]的法定证书后,可以恢复正常的共识流程,并生成相应的DAG拓扑结构图,从而可以在提交模块提交cR轮次之后的序列子图。
本申请实施例,通过引入检查点信息的同步机制,生成的检查点信息无法向落后的共识节点回复集合(lR-m,cR-m]的共识数据,历史数据可以跟随检查点信息做定期的清理,在保证安全性的同时降低了基于有向无环图DAG的共识算法的存储开销;实现了异步网络下拜占庭容错的快速状态同步,以及DAG共识机制内存垃圾的回收与磁盘数据的清理。
如图6所示,本申请实施例提供的一种数据同步方法,可以应用于图1架构中高共识轮次的第二共识节点。基于与上述实施例中描述过程的实现原理相同,在此不再赘述。如图6所示,该方法可以包括以下步骤:
S601,在第二共识轮次,向异步网络集群中的第一共识节点发送第二共识轮次的法定证书。
S602,在第一共识节点所处的第一共识轮次的轮次数小于第二共识轮次的轮次数时,接收第一共识节点发送的同步数据请求。
S603,基于同步数据请求,向第一共识节点发有向无环图中所述第一共识轮次对应的限制提交轮次与所述第二共识轮次之间的第一目标法定证书和目标交易提案。
在一些实施例中,在向第一共识节点发送有向无环图中第一共识轮次对应的限制提交轮次与第二共识轮次之间的第一目标法定证书和目标交易提案之前,该方法还包括:
基于提交的有向无环图中的序列子图和交易提案的执行结果,生成检查点信息;基于同步数据请求,向第一共识节点发送所述检查点信息;检查点信息用于指示第一共识节点待同步的目标共识轮次的共识状态。
其中,检查点信息包括目标共识轮次的共识状态和目标共识轮次对应的序列子图的元数据,目标共识轮次为位于第一共识轮次与第二共识轮次之间的共识轮次。
在一些实施例中,在向第一共识节点发送检查点信息之后,该方法还包括:
在检查点信息记录的共识状态中的状态高度高于第一共识节点执行交易的状态高度时,向第一共识节点发送目标共识轮次对应的账本数据;账本数据用于指示第一共识节点的账本状态待同步的状态高度。
在一些实施例中,在向第一共识节点发送检查点信息之后,该方法还包括:
向第一共识节点发送目标共识轮次对应的限制提交轮次与目标共识轮次之间的第二目标法定证书;第二目标法定证书用于指示第一共识节点完成对目标共识轮次的共识状态的同步。
应理解,上述实施例中各步骤的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本申请实施例的实施过程构成任何限定。
对应于上文实施例提供的数据同步方法,图7示出了本申请实施例提供的数据同步装置的结构示意图,为了便于说明,仅示出了与本申请实施例相关的部分。
参照图7,该数据同步装置包括:
获取单元71,用于获取异步网络集群中的所述第二共识节点在第二共识轮次发送的法定证书;
发送单元72,用于若当前所处的第一共识轮次的轮次数小于所述第二共识轮次的轮次数,则向所述第二共识节点发送同步数据请求;
同步单元73,用于接收并同步所述第二共识节点基于所述有向无环图反馈的所述第一共识轮次对应的限制提交轮次与第二共识轮次之间的第一目标法定证书和目标交易提案;
其中,所述异步网络集群中的第一共识节点和所述第二共识节点基于有向无环图的结构存储各个共识节点在每个共识轮次的交易提案的法定证书。
在一种可能的实现方式中,同步单元73,还用于接收至少法定数量个所述第二共识节点发送的检查点信息,所述检查点信息用于指示目标共识轮次的共识状态;基于所述检查点信息记录的所述有向无环图中的序列子图,同步所述目标共识轮次的所述共识状态;其中,所述目标共识轮次为位于所述第一共识轮次与所述第二共识轮次之间的共识轮次。
在一种可能的实现方式中,该装置还包括共识单元,用于向所述第二共识节点广播所述交易提案,所述交易提案基于交易提案引用关系引用上一共识轮次至少法定数量的共识节点的交易提案;基于至少法定数量的所述第二共识节点对所述交易提案的投票结果,生成所述交易提案的法定证书,并将生成的法定证书存储至所述有向无环图的顶点;其中,所述有向无环图中的法定证书基于所述交易提案引用关系引用上一共识轮次至少法定数量的共识节点的法定证书。
在一种可能的实现方式中, 同步单元73,还用于若执行交易的状态高度落后于所述检查点信息记录的状态高度,则获取所述第二共识节点在所述目标共识轮次的账本数据;基于所述账本数据,将账本状态同步至所述检查点信息记录的状态高度。
在一种可能的实现方式中, 同步单元73,还用于若所述第一共识节点的有向无环图中不存在所述检查点信息记录的序列子图,则获取所述检查点信息记录的序列子图的元数据;基于获取到的所述元数据,将提交状态更新为所述目标共识轮次对应的共识状态;基于所述共识状态,向所述第二共识节点请求所述目标共识轮次对应的限制提交轮次与所述目标共识轮次之间的第二目标法定证书。
对应于上文实施例提供的数据同步方法,图8示出了本申请实施例提供的数据同步装置的结构示意图,为了便于说明,仅示出了与本申请实施例相关的部分。
参照图8,该数据同步装置包括:
发送单元81,用于在第二共识轮次向异步网络集群中的所述第一共识节点发送所述法定证书;
接收单元82,用于在所述第一共识节点所处的第一共识轮次的轮次数小于所述第二共识轮次的轮次数时,接收所述第一共识节点发送的同步数据请求;
所述发送单元81,还用于基于所述同步数据请求,向所述第一共识节点发送所述有向无环图中所述第一共识轮次对应的限制提交轮次与第二共识轮次之间的第一目标法定证书和目标交易提案;
其中,所述异步网络集群中的所述第一共识节点和第二共识节点基于有向无环图的结构存储各个共识节点在每个共识轮次的交易提案的法定证书。
在一种可能的实现方式中,该装置还包括确认模块,用于基于提交的所述有向无环图中的序列子图和所述交易提案的执行结果,生成检查点信息;基于所述同步数据请求,向所述第一共识节点发送所述检查点信息;所述检查点信息用于指示所述第一共识节点待同步的目标共识轮次的共识状态;其中,所述检查点信息包括所述目标共识轮次的共识状态和所述目标共识轮次对应的序列子图的元数据,所述目标共识轮次为位于所述第一共识轮次与所述第二共识轮次之间的共识轮次。
在一种可能的实现方式中,发送单元81,还用于在所述检查点信息记录的所述共识状态中的状态高度高于所述第一共识节点执行交易的状态高度时,向所述第一共识节点发送所述目标共识轮次对应的账本数据;所述账本数据用于指示所述第一共识节点的账本状态待同步的状态高度。
在一种可能的实现方式中,发送单元81,还用于向所述第一共识节点发送所述目标共识轮次对应的限制提交轮次与所述目标共识轮次之间的第二目标法定证书;所述第二目标法定证书用于指示所述第一共识节点完成对所述目标共识轮次的所述共识状态的同步。
图9示出了电子设备9的硬件结构示意图。
如图9所示,该实施例的电子设备9包括:至少一个处理器90(图9中仅示出一个)、存储器91,所述存储器91中存储有可在所述处理器90上运行的计算机程序92。所述处理器90执行所述计算机程序92时实现上述方法实施例中的步骤,例如图2A所示的S201至S203或者如图6所示的S601至S603。或者,所述处理器90执行所述计算机程序92时实现上述各装置实施例中各模块/单元的功能。
可以理解的是,本申请实施例示意的结构并不构成对电子设备9的具体限定。在本申请另一些实施例中,电子设备9可以包括比图示更多或更少的部件,或者组合某些部件,或者拆分某些部件,或者不同的部件布置。图示的部件可以以硬件,软件或软件和硬件的组合实现。
该电子设备9可以是上述异步网络集群中的共识节点,例如可以是桌上型计算机、笔记本、掌上电脑及云端服务器等计算设备。该电子设备9可包括,但不仅限于,处理器90、存储器91。本领域技术人员可以理解,图9仅仅是电子设备9的示例,并不构成对电子设备9的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件,例如该服务器还可以包括输入发送设备、网络接入设备、总线等。
上述处理器90可以是中央处理单元(Central Processing Unit,CPU),还可以是其他通用处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现成可编程门阵列 (Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
处理器90中还可以设置存储器,用于存储指令和数据。在一些实施例中,处理器90中的存储器为高速缓冲存储器。该存储器可以保存处理器90刚用过或循环使用的指令或数据。如果处理器90需要再次使用该指令或数据,可从所述存储器中直接调用。避免了重复存取,减少了处理器90的等待时间,因而提高了系统的效率。
上述存储器91在一些实施例中可以是所述电子设备9的内部存储单元,例如电子设备9的硬盘或内存。该存储器91也可以是所述电子设备9的外部存储设备,例如该电子设备9上配备的插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(SecureDigital,SD)卡,闪存卡(Flash Card)等。进一步地,该存储器91还可以既包括该电子设备9的内部存储单元也包括外部存储设备。该存储器91用于存储操作系统、应用程序、引导装载程序(BootLoader)、数据以及其他程序等,例如计算机程序的程序代码等。该存储器91还可以用于暂时地存储已经发送或者将要发送的数据。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
需要说明的是,上述电子设备的结构仅示例性说明,基于不同的应用场景,还可以包括其他实体结构,在此不对电子设备的实体结构进行限定。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述或记载的部分,可以参见其它实施例的相关描述。
本申请实施例还提供了一种计算机可读存储介质,该计算机可读存储介质存储有计算机程序,该计算机程序被处理器执行时实现可实现上述各个方法实施例中的步骤。
本申请实施例提供了一种计算机程序产品,当计算机程序产品在服务器上运行时,使得服务器执行时实现可实现上述各个方法实施例中的步骤。
所集成的模块/单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请实现上述实施例方法中的全部或部分流程,也可以通过计算机程序来指令相关的硬件来完成,计算机程序可存储于一计算机可读存储介质中,该计算机程序在被处理器执行时,可实现上述各个方法实施例的步骤。其中,计算机程序包括计算机程序代码,计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。计算机可读介质可以包括:能够携带计算机程序代码的任何实体或装置、记录介质、U盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(Read-Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)、电载波信号、电信信号以及软件分发介质等。
上述本申请实施例提供的算法开发平台、电子设备、计算机存储介质、计算机程序产品均用于执行上文所提供的方法,因此,其所能达到的有益效果可参考上文所提供的方法对应的有益效果,在此不再赘述。
应理解,上述只是为了帮助本领域技术人员更好地理解本申请实施例,而非要限制本申请实施例的范围。本领域技术人员根据所给出的上述示例,显然可以进行各种等价的修改或变化,例如,上述检测方法的各个实施例中某些步骤可以是不必须的,或者可以新加入某些步骤等。或者上述任意两种或者任意多种实施例的组合。这样的修改、变化或者组合后的方案也落入本申请实施例的范围内。
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
应理解,上述只是为了帮助本领域技术人员更好地理解本申请实施例,而非要限制本申请实施例的范围。本领域技术人员根据所给出的上述示例,显然可以进行各种等价的修改或变化,例如,上述检测方法的各个实施例中某些步骤可以是不必须的,或者可以新加入某些步骤等。或者上述任意两种或者任意多种实施例的组合。这样的修改、变化或者组合后的方案也落入本申请实施例的范围内。
还应理解,本申请实施例中的方式、情况、类别以及实施例的划分仅是为了描述的方便,不应构成特别的限定,各种方式、类别、情况以及实施例中的特征在不矛盾的情况下可以相结合。
还应理解,在本申请的各个实施例中,如果没有特殊说明以及逻辑冲突,不同的实施例之间的术语和/或描述具有一致性、且可以相互引用,不同的实施例中的技术特征根据其内在的逻辑关系可以组合形成新的实施例。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
在本申请所提供的实施例中,应该理解到,所揭露的装置/网络设备和方法,可以通过其它的方式实现。例如,以上所描述的装置/网络设备实施例仅仅是示意性的,例如,所述模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通讯连接可以是通过一些接口,装置或单元的间接耦合或通讯连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
以上所述实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围,均应包含在本申请的保护范围之内。
最后应说明的是:以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何在本申请揭露的技术范围内的变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以所述权利要求的保护范围为准。