数据处理方法、装置、设备及存储介质
文献发布时间:2023-06-19 11:35:49
技术领域
本公开涉及计算机技术领域,尤其涉及区块链技术,具体涉及一种数据处理方法、装置、设备及存储介质。
背景技术
区块链系统是一种分布式账本系统,在这种分布式环境中,多个节点通过通信方式组成大规模网络集群,以实现一个安全可追溯的系统环境。共识机制是实现区块链系统中多节点账本数据一致的基础,以实现数据的统一调度。
共识机制中的三阶段链式校验(Chained-HotStuff)算法虽然实现了并发投票,规避了传统共识机制所存在的网络开销较大的问题,但是对于区块生成节点(或者可以称主节点)无法正常出块等异常事件,该算法通过超时机制进行异常处理时,处理过程的实现较为复杂。
发明内容
本公开提供了一种数据处理方法、装置、设备以及存储介质。
根据本公开的一方面,提供了一种数据处理方法,该方法包括:
若监测到异常事件,则根据本地消息状态树中签名消息的高度值与本地区块链中区块的高度值之间的关系,以及所述签名消息中区块标识与所述本地区块链中区块标识之间的关系,确定待回滚对象;其中,所述待回滚对象包括待回滚区块和/或待回滚消息;
对所述待回滚对象进行回滚处理。
根据本公开的另一方面,提供了一种数据处理装置,该装置包括:
对象确定模块,用于若监测到异常事件,则根据本地消息状态树中签名消息的高度值与本地区块链中区块的高度值之间的关系,以及所述签名消息中区块标识与所述本地区块链中区块标识之间的关系,确定待回滚对象;其中,所述待回滚对象包括待回滚区块和/或待回滚消息;
回滚处理模块,用于对所述待回滚对象进行回滚处理。
根据本公开的另一方面,提供了一种电子设备,该电子设备包括:
至少一个处理器;以及
与所述至少一个处理器通信连接的存储器;其中,
所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行本公开任一实施例所述的数据处理方法。
根据本公开的另一方面,提供了一种存储有计算机指令的非瞬时计算机可读存储介质,其中,所述计算机指令用于使计算机执行本公开任一实施例所述的数据处理方法。
根据本公开的另一方面,提供了一种计算机程序产品,包括计算机程序,所述计算机程序在被处理器执行时实现本公开任一实施例所述的数据处理方法。
根据本公开的技术方案,为区块链网络在异常场景下进行数据处理提供了一种新思路。
应当理解,本部分所描述的内容并非旨在标识本公开的实施例的关键或重要特征,也不用于限制本公开的范围。本公开的其它特征将通过以下的说明书而变得容易理解。
附图说明
附图用于更好地理解本方案,不构成对本公开的限定。其中:
图1是本公开所提供的HotStuff算法的基本共识过程示意图;
图2是本公开所提供的Chained-HotStuff算法的共识过程示意图;
图3是根据本公开实施例提供的一种数据处理方法的流程图;
图4A是根据本公开实施例提供的一种本地消息状态树的示意图;
图4B是根据本公开实施例提供的另一种本地消息状态树的示意图;
图4C是根据本公开实施例提供的又一种本地消息状态树的示意图;
图5是根据本公开实施例提供的另一种数据处理方法的流程图;
图6是根据本公开实施例提供的一种数据处理装置的结构示意图;
图7是用来实现本公开实施例的数据处理方法的电子设备的框图。
具体实施方式
以下结合附图对本公开的示范性实施例做出说明,其中包括本公开实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施例做出各种改变和修改,而不会背离本公开的范围和精神。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。
在介绍本公开各实施例之前,先对采用Chained-HotStuff算法实现共识的过程进行介绍。
在HotStuff算法下,针对一个区块的共识,分为四个阶段:预备阶段(Prepare)、预提交阶段(Pre-commit)、提交阶段(Commit)和决定阶段(Decide),其中前三个阶段本质上都是通过“投票”动作来实现,即在预备阶段、预提交阶段和提交阶段均进行一次投票,并在投票票数超过节点总数的2/3表示该阶段的共识成功,进入下一阶段。所谓投票即为认同者签名,不认同者不签名。
具体的,基本共识过程如图1所示,当前主节点对事务请求进行打包生成一个区块,以及生成一个针对该区块的签名消息,并分别将该区块和签名消息(统称为一个新提案)广播给区块链网络中的其他节点(具体可以为区块链网络中其他参与共识的节点,比如图1中的从节点0、从节点1和从节点3)(图1中的1阶段结束),其中,签名消息中至少可以包括区块标识、消息高度以及签名列表等字段,区块标识字段中至少可以包括该区块的区块标识,消息高度字段中至少可以包括该签名消息的高度值,以及签名列表字段中可以包括当前主节点的签名以及空白签名区域,进一步的,签名消息即为候选人签名计票(QuorumCert,QC)消息;其他节点对该区块进行验证(或者可以说对签名消息的有效性进行验证),且在验证通过的情况下,在签名消息的签名字段中写上自己的签名并反馈给当前主节点(图1中的2阶段结束);当前主节点收集上阶段所有的签名,并在签名数量超过n-f的情况下,基于所有签名组成一个HighQC且广播给其他节点(图1中的3阶段结束),其中,n为区块链网络中的节点总数量,f为拜占庭错误节点,且n>=3f+1;其他节点收到HighQC之后,在验证HighQC有效的情况下,对HighQC进行签名并返回给当前主节点(图1中的4阶段结束);当前主节点收集上一阶段的各个签名,并在签名数量超过n-f的情况下,基于所有签名组成一个GenericQC且广播给其他节点(图1中的5阶段结束);其他节点收到GenericQC之后,在验证GenericQC有效的情况下,对GenericQC进行签名并返回给当前主节点(图1中的6阶段结束);当前主节点收集上一阶段的各个签名,并在签名数量超过n-f的情况下,基于所有签名组成一个LockedQC且广播给其他节点(图1中的7阶段结束);其他节点收到LockedQC之后,若验证LockedQC有效,则该区块共识成功,即该区块中的事务请求生效,可执行该区块中事务请求的处理逻辑。进一步的,进入决定阶段后,当前主节点将LockedQC作为CommitQC进行存储。
上述基本共识过程通信复杂度和计算复杂度都比较大,为降低复杂度,在上述共识基础上,引入流水线模式,即Chained-HotStuff算法。所谓Chained-HotStuff算法即为将相邻区块的共识阶段的“投票”动作进行复用,即第一个区块的预提交阶段同时完成第二个区块的预备阶段,第一个区块的提交阶段同时完成第二个区块的预提交阶段以及第三个区块的预备阶段,以此类推。具体的共识过程可以参见图2所示,其中,区块与签名消息即QC消息绑定。比如,当前主节点1向其他节点发送区块1,以及签名消息即QC1;下一主节点2收集其他节点对QC1的签名,并在所收集的签名数量大于n-f的情况下,将所接收的区块1存储于本地区块链,之后生成一个新的区快2,并将区块2和包含签名的QC1绑定(比如将包含签名的QC1添加到区块2的设定字段中)传输至其他节点,同时主节点2还会向其他节点传输针对区块2的签名消息即QC2,以此类推。进一步的,区块1中的事务请求在区块4被添加到本地区块链后生效,区块2中的事务请求在区块5被添加到本地区块链后生效,以此类推。此外,在一个区块从生成到生效的过程中,该区块所对应的签名消息即QC消息实质经历了HighQC、GenericQC、LockedQC、以及CommitQC。与区块相对应,QC2成为HighQC时,QC1作为GenericQC;QC3成为HighQC时,QC2成为GenericQC,QC1成为LockedQC,以此类推。进一步的,HighQC所标识的区块的前一个区块是GenericQC所标识的区块,以此类推。
可选的,所谓HighQC为当前主节点中最新或最高QC,即当前通过验证的最新的候选人签名数据集,或者可以称为最新合法签名数据集;所谓GenericQC为当前主节点中次新QC,即当前通过验证的次新的候选人签名数据集,或者可以成为次新的合法签名数据集;所谓LockedQC为当前主节点中第三新QC,即当前通过验证的第三新的候选人签名数据集,或者可以成为第三新的合法签名数据集;所谓CommitQC为待执行账本或者说待执行区块的合法签名数据集。
图3是根据本公开实施例提供的一种数据处理方法的流程图。本公开实施例适用于如何对基于区块链的数据进行处理的情况,尤其适用于在Chained-HotStuff算法的基础上,对于在异常场景下,如何对数据进行处理的情况。本实施例中数据处理方法可以由区块链网络中的节点来执行,具体可以由区块链网络中的区块生成节点(或者可以称为矿工节点或主(即leader)节点)来执行。该方法可以由数据处理装置来执行,该装置可以采用软件和/或硬件的方式实现,并可集成于承载区块链网络中节点的计算设备中。如图3所示,本实施例提供的数据处理方法可以包括:
S301,若监测到异常事件,则根据本地消息状态树中签名消息的高度值与本地区块链中区块的高度值之间的关系,以及签名消息中区块标识与本地区块链中区块标识之间的关系,确定待回滚对象。
本实施例中,所谓异常事件即为本机节点所监测到的区块链网络异常的事件,可以包括但不限于下述至少一种。其中,第一种可以是,若在本机节点的轮值时间开始时,识别到未接收到上一轮值节点所生成的区块和/或签名消息,则确定监测到异常事件。所谓轮值时间即为本机节点作为主节点或者说区块生成节点打包生成区块的时间;可选的,区块链网络中参与共识的各个节点可以轮换的作为主节点,且在区块链网络每一次运行时,确定参与共识的各个节点作为主节点的轮值顺序和轮值时间开始时刻;进一步的,本实施例中参与共识的各个节点作为主节点的轮值时长相同,具体的参与共识的各个节点的轮值时间开始时刻可通过如下方式确定,根据区块链网络的任务总量确定需要生成的区块总量,根据参与共识的各个节点的硬件能力等确定生成一个区块所需要的时间,并根据区块链网络开始运行时间、区块总量、生成一个区块所需要的时间、以及参与共识的节点数量等,可以确定每一个参与共识的节点的轮值时间开始时刻。比如区块链网络开始运行时间为ts,参与共识的各个节点的轮值时长为30s,如果本机节点第二个作为主节点,则本机节点的轮值时间开始时刻为(t+30)s。
可选的,本实施例中区块链网络中所有参与共识的节点的本地时钟同步,且每个参与共识的节点在确定本地时间达到其轮值时间开始时刻时,作为主节点承担出块等任务。进而如果上一轮值节点无法正常出块或者无法将所产生的区块和/或签名消息发送给区块链网络中的其他节点,则在上一轮值节点的轮值时间结束后,即本机节点的轮值时间开始时,本机节点作为当前主节点,识别到未接收到上一轮值节点所生成的区块和/或签名消息,确定监测到异常事件,之后可执行异常处理逻辑。
需要说明的是,本实施例中引入轮值时间进行主节点切换,保证了区块链网络的正常运行;同时,提供了一种监测到异常事件的方式,为后续执行异常处理逻辑提供了数据支持。
可选的,第二种可以是,本机节点识别到所收集的上一轮值节点的签名消息的签名数量小于n-f,则确定监测到异常事件。比如,上一轮值节点生成区块5和签名消息5即QC5之后轮值时间结束,本机节点作为上一轮值时间的下一轮值节点,收集区块链网络中其他节点对QC5的签名,如果所收集的签名数量小于n-f,则确定监测到异常事件,之后执行异常处理逻辑。
进一步的,异常事件还可以是区块链网络中其他异常的事件,比如本机节点在其轮值时间内,如果识别到所收集的其他节点对其所生成的任一签名消息的签名数量小于n-f,则确定监测到异常事件等。
本实施例中,本机节点在监测到异常事件的情况下,可以执行异常处理逻辑,即确定待回滚对象,并对待回滚对象进行回滚处理。其中,待回滚对象可以包括待回滚区块和/或待回滚消息。所谓待回滚区块即为本机节点的本地区块链中需要进行回滚处理的区块;所谓待回滚消息即为本机节点的本地消息状态树中需要进行回滚处理的签名消息。可选的,本地消息状态树基于签名消息构建,进一步的,本地消息状态树基于签名消息之间高度值的大小关系构建。为便于识别签名消息以及构建本地消息状态树,对于任一签名消息,该签名消息的消息高度字段中不仅可以包括该签名消息的高度值,还可以包括该签名消息的上一签名消息的高度值,签名消息的高度值与区块的高度值类似,比如第5个签名消息的高度值为5;对应的,该签名消息的区块标识字段中不仅可以包括该签名消息所对应的区块的区块标识,还可以包括所对应的区块的上一区块的区块标识。其中,区块标识用于唯一标识区块,可以为区块哈希值。此外,本地消息状态树中可以包括已生效签名消息和未生效签名消息,已生效签名消息的签名列表字段中可以包括区块链网络中所有参与共识的节点中认同该签名消息的节点的签名,未生效签名消息的签名列表字段中可以包括生成该签名消息的节点的签名以及空白签名区域。
可选的,本实施例中可以根据本地消息状态树中签名消息的高度值与本地区块链中区块的高度值之间的关系,以及签名消息中区块标识与本地区块链中区块标识之间的关系,确定待回滚对象。
具体可以是,将本地消息状态树中已生效签名消息的高度值与本地区块链中区块的高度值进行比较,同时将本地消息状态树中已生效签名消息中签名消息所对应的区块的区块标识,与本地区块链中区块标识进行比较;进一步的,为提高比较速度,基于本地消息状态树中签名消息之间高度值变化情况,可以按照本地消息状态树中已生效签名消息的高度值从大到小的顺序,将本地消息状态树中已生效签名消息的高度值与本地区块链中对应区块的高度值进行比较,同时将本地消息状态树中已生效签名消息中签名消息所对应的区块的区块标识,与本地区块链中区块标识进行比较。
之后可以根据两者的比较结果,将本地区块链中高度值不等于本地消息状态树中已生效的签名消息的高度值的区块,以及本地区块链中高度值等于本地消息状态树中已生效的签名消息的高度值,且本地区块链中区块标识不等于已生效签名消息中区块标识的区块,作为待回滚区块;对应的,可以将本地消息状态树中高度值不等于本地区块链中区块的高度值的已生效签名消息,以及本地消息状态树中高度值等于本地区块链中区块的高度值,且本地消息状态树中区块标识不等于本地区块链中区块的区块标识的已生效签名消息,作为待回滚消息。
S302,对待回滚对象进行回滚处理。
本实施例中,对于待回滚区块,可以将该待回滚区块,从本地区块链中剔除;同理,对于待回滚消息,可以将该待回滚消息,从本地消息状态树中剔除;进而保证本地区块链和本地消息状态树存储一致。
可选的,对待回滚对象进行回滚处理之后,本机节点可以在回滚处理后的本地区块链和本地状态树的基础上,继续生成新的区块和签名消息。
需要说明的是,现有的Chained-HotStuff算法,通过引入超时机制,下一主节点在监测到当前主节点出块时间大于设定的超时时间时,执行超时逻辑,比如引入一个空区块,同时发起超时投票的签名消息,其他参与共识的节点进行签名投票;下一主节点收集所有节点的签名,且在确定签名数量大于n-f的情况下,说明区块链网络中参与共识的节点认同当前主节点超时即存在异常,此时下一主节点才会进行真正的异常处理,比如重新生成当前主节点未生成的区块等。
而本公开摒弃了现有的Chained-HotStuff算法的超时机制,本机节点即当前主节点在监测到异常事件时,直接根据本地消息状态树和本地区块链确定待回滚对象,进行回滚处理。相比于现有的Chained-HotStuff算法,不仅能够精准定位异常签名消息和异常区块,而且进一步的减少了消息所带来的网络开销,简化了异常情况下的处理过程。
本公开实施例的技术方案,通过在监测到异常事件的情况下,引入本地消息状态树中签名消息中区块标识和高度值,与本地区块链中区块的区块标识和高度值之间的关系,精准定位异常对象即待回滚对象,并对待回滚对象进行回滚处理。相比于现有的Chained-HotStuff算法而言,在保证区块链网络能够正常运行的情况下,进一步的减少了消息所带来的网络开销,简化了异常情况下的处理过程。
进一步的,在详细介绍如何确定待回滚对象之前,在上述实施例的基础上,结合图4A至图4C,先对本地消息状态树进行详细说明,具体可以包括如何将签名消息添加至本地消息状态树中,以及添加至本地消息状态树中的签名消息如何生效等过程。
首先介绍本机节点如何将所获取的任一签名消息添加至本地消息状态树中,具体实现过程可以是,本机节点获取待处理消息;根据待处理消息的高度值,确定本地消息状态树中是否存在待处理消息的前续相邻消息;若存在,则将待处理消息作为前续相邻消息的一个分支,添加至本地消息状态树中。
其中,待处理消息即为未添加至本地消息状态树中的签名消息。可选的,在本机节点为当前主节点的情况下,本机节点可以获取自己所产生的待处理消息;在本机节点为参与共识的普通节点(即本机节点不是当前主节点)的情况下,本机节点还可以获取当前主节点所发送的待处理消息。
在区块链网络中签名消息的高度值是顺序递增的情况下,所谓待处理消息的前续相邻消息即为在高度值上与待处理消息前续相邻的签名消息。可选的,将待处理消息的高度值减去1,即可得到待处理消息的前续相邻消息的高度值。
可选的,本机节点在获取待处理消息之后,可以从待处理消息的消息高度字段中获取该待处理消息的高度值;根据该待处理消息的高度值,确定待处理消息的前续相邻消息的高度值;进而根据前续相邻消息的高度值,查询本地消息状态树中是否存在高度值等于前续相邻消息的高度值的签名消息,若存在,则说明本地消息状态树中存在待处理消息的前续相邻消息,此时可以将待处理消息作为前续相邻消息的一个分支,添加至本地消息状态树中。比如,图4A中,QC3的前续相邻消息为QC2,将QC3作为QC2的一个分支。
进一步的,由于网络延迟等原因,实际场景中可能存在两个签名消息的高度值相等,比如图4B中的QC2和QC2
示例性的,如果基于所获取的区块标识,无法确定QC3的前续相邻消息为QC2,还是QC2
可选的,本地孤立消息列表用于临时存储不能直接添加到本地消息状态树中的签名消息。比如,本地消息状态树中不存在待处理消息的前续相邻消息,则将待处理消息存储于本地孤立消息列表中;又如,无法从本地消息状态树中确定待处理消息的前续相邻消息到底是哪一个的情况下,也可以先将待处理消息添加至本地孤立消息列表中。
值得注意的是,一个区块中的事务请求生效,则说明该区块及该区块之前的所有区块均已达成共识,因此在确定待回滚区块时,无需考虑已生效的区块;同理,一个区块中的事务请求生效,则说明该区块所对应的签名消息即QC消息以及该签名消息的所有前续签名消息均已验证有效,因此在确定待回滚消息时,无需考虑已验证有效的签名消息。为便于统计,以及降低计算的复杂度,本实施例中以最新验证有效的签名消息,即转化为CommitQC的签名消息,作为根节点,高度值大于该根节点的签名消息作为叶节点,构建本地消息状态树。进一步的,本实施例中的本地消息状态树基于签名消息的添加以及生效,而动态更新。此外,本地孤立消息列表中所存储的签名消息的高度值大于本地消息状态树中当前根节点所对应的签名消息的高度值。
示例性的,在将待处理消息作为前续相邻消息的一个分支,添加至本地消息状态树中之后,本机节点可以执行待处理消息的生效逻辑。具体实现过程可以是,获取待处理消息的签名集合;且若识别到签名集合中签名数量大于设定数量,则控制待处理消息生效。可选的,本机节点在作为当前主节点的情况下,可以从区块链网络中收集其他节点对待处理消息的签名;在本机节点为参与共识的普通节点(即本机节点不是当前主节点)的情况下,本机节点还可以从本地区块链中高度值与待处理消息的高度值相等的区块的下一区块中,获取待处理消息的签名集合。设定数量即为n-f。
如图4C所示,比如QC4生效,QC4是本地消息状态树中高度值最高的签名消息,此时HighQC指向QC4;基于上述图2的描述可知,GenericQC指向QC3,LockedQC指向QC2,CommitQC指向QC1,QC1作为根节点。与此同时可以将QC2
进一步的,作为本公开实施例的一种可选方式,本机节点将待处理消息作为前续相邻消息的一个分支,添加至本地消息状态树中之后,还可以查询本地孤立消息列表中是否存在待处理消息的后续相邻消息;若存在,则将后续相邻消息作为待处理消息的一个分支,添加至本地消息状态树中。
与待处理消息的前续相邻消息相对应,所谓待处理消息的后续相邻消息即为在高度值上与待处理消息后续相邻的签名消息。可选的,将待处理消息的高度值加1,即可得到待处理消息的后续相邻消息的高度值。
具体的,本机节点在将待处理消息作为前续相邻消息的一个分支,添加至本地消息状态树中之后,可以根据该待处理消息的高度值,确定待处理消息的后续相邻消息的高度值;进而根据后续相邻消息的高度值,查询本地孤立消息列表中是否存在高度值等于后续相邻消息的高度值的签名消息,若存在,则说明本地孤立消息列表中存在待处理消息的后续相邻消息,此时可以将后续相邻消息作为待处理消息的一个分支,添加至本地消息状态树中。
需要说明的是,上述实现将签名消息添加至本地消息状态树中,以及控制添加至本地消息状态树中的签名消息生效等过程,可以在本机节点监测到异常事件之前执行,也可以在本机节点监测到异常事件且对待回滚对象进行回滚处理后,进入正常进行出块等任务阶段时执行。
值得注意的是,本实施例引入将签名消息添加至本地消息状态树中,以及控制添加至本地消息状态树中的签名消息生效等实现过程,丰富了节点的功能,为确定待回滚对象提供了数据支撑。
在详细介绍本地消息状态树之后,本公开在下述实施例中又提供了一种数据处理方法。如图5所示,本实施例在上述实施例的基础上,进一步对如何确定待回滚对象进行解释说明。具体的,本实施例提供的数据处理方法可以包括:
S501,开始。
S502,若监测到异常事件,则确定本地消息状态树中最新生效签名消息的高度值,是否与本地区块链中最新区块的高度值相同。若否,则执行S503;若是,则执行S504。
可选的,为提高比较速度,基于本地消息状态树中签名消息之间高度值变化情况,本实施例优选按照本地消息状态树中已生效签名消息的高度值从大到小的顺序,将本地消息状态树中已生效签名消息的高度值与本地区块链中对应区块的高度值进行比较。
进一步的,本实施例中,最新生效签名消息即为本机节点监测到异常事件之前,本地消息状态树中最后一个生效的签名消息。基于上述对本地消息状态树的相关介绍可知,本地消息状态树中HighQC所指向的签名消息一定是本地消息状态树中高度值最高的签名消息;而最新生效签名消息一定是本地消息状态树中高度值最高的签名消息,进而HighQC一定会指向最新生效签名消息。
因此,本机节点在监测到异常事件时,可以先将本地消息状态树中最新生效签名消息的高度值,与本地区块链中最新区块的高度值进行比较。如果本地消息状态树中最新生效签名消息的高度值与本地区块链中最新区块的高度值相同,则执行S504;如果本地消息状态树中最新生效签名消息的高度值与本地区块链中最新区块的高度值不相同,则执行S503。其中,所谓最新区块即为最后一个添加至本地区块链中的区块。
S503,根据本地消息状态树中的区块标识与本地区块链中的区块标识之间的关系,确定待回滚对象。
本实施例中,本地消息状态树中最新生效签名消息的高度值与本地区块链中最新区块的高度值不相同可以包括两种情况。其中,第一种情况是,本地消息状态树中最新生效签名消息的高度值,大于本地区块链中最新区块的高度值;第二种情况是,本地消息状态树中最新生效签名消息的高度值,小于本地区块链中最新区块的高度值。可选的,不同情况下,本机节点根据本地消息状态树中的区块标识与本地区块链中的区块标识之间的关系确定待回滚对象的方式不同。
可选的,本机节点在确定本地消息状态树中最新生效签名消息的高度值,大于本地区块链中最新区块的高度值的情况下,可以将本地消息状态树中区块标识与最新区块的区块标识相同的签名消息,作为目标签名消息;将本地消息状态树中目标签名消息之后的消息,作为待回滚消息。
具体的,本机节点在确定本地消息状态树中最新生效签名消息的高度值,大于本地区块链中最新区块的高度值的情况下,可以根据最新区块的区块标识,从本地消息状态树中进行查找;如果本地消息状态树中存在签名消息所对应的区块的区块标识,等于本地区块链中最新区块的区块标识,则将该签名消息作为目标签名消息,以及将本地消息状态树中目标签名消息之后的消息作为待回滚消息。
比如,上一轮值节点产生区块1和QC1;本机节点接收到了QC1,没有接收到区块1;如果本机节点接收到了其他参与共识节点对QC1的签名,并且确定签名数量满足n-f,此时本机节点控制QC1生效,并将HighQC指向QC1;需要说明的是,区块链网络设置有默认条件,比如初始QC0默认有效,进而即使本机节点没有接收到区块1,也会使QC0生效。此时本地消息状态中HighQC所指向的签名消息为QC1,即QC1为最新生效签名消息;而本地区块链中最新区块为区块0,区块0的高度值小于最新生效签名消息QC1的高度值,进而本机节点可以根据区块0的区块标识从本地消息状态树中进行查找;如果本地消息状态树中存在签名消息所对应的区块的区块标识,等于本地区块链中最新区块的区块标识,则将该签名消息作为目标签名消息,此时可以将本地消息状态树中的QC0作为目标签名消息,将本地消息状态树中的QC1作为待回滚消息。
可选的,本机节点在确定本地消息状态树中最新生效签名消息的高度值,小于本地区块链中最新区块的高度值的情况下,可以将本地区块链中区块标识与最新生效签名消息中区块标识相同的区块,作为目标区块;将本地区块链中目标区块之后的区块作为待回滚区块。
具体的,本机节点在确定本地消息状态树中最新生效签名消息的高度值,小于本地区块链中最新区块的高度值的情况下,可以根据最新生效签名消息所对应的区块的区块标识,从本地区块链中查找目标区块;若查找到,则将本地区块链中目标区块之后的区块作为待回滚区块。
比如,本机节点没有接收到上一轮值节点所生成的区块5,进而本机节点无法验证本地消息状态树中QC4的有效性,因此QC4是无效签名消息,本地消息状态中HighQC所指向的签名消息为QC3,即QC3为最新生效签名消息,且高度值为3;而本地区块链中最新区块为区块4,区块4的高度值4大于最新生效签名消息QC3的高度值3;进而本机节点可以从QC3中获取QC3所对应的区块的区块标识,并在本地区块链中进行查找,若本地区块链中存在区块标识与所获取的区块标识相等的区块,则将查找到的区块作为目标区块,此时将本地区块链中的区块3作为目标区块,将区块4作为待回滚区块,还可以将QC4作为待回滚消息。
S504,在确定最新生效签名消息中区块标识与最新区块的区块标识不相同的情况下,从本地区块链中确定一个目标区块,以及从本地消息状态树中确定一个目标签名消息;并将本地区块链中目标区块之后的区块作为待回滚区块,以及将本地消息状态树中目标签名消息之后的消息,作为待回滚消息。
可选的,若本地消息状态树中最新生效签名消息的高度值与本地区块链中最新区块的高度值相同,则确定最新生效签名消息中区块标识与最新区块的区块标识是否相同;若不相同,则可以同时对本地区块链和本地消息状态树进行回溯,直至从本地区块链中确定一个目标区块,以及从本地消息状态树中确定一个目标签名消息。其中,目标区块的区块标识与目标签名消息中区块标识相同,且目标区块的高度值与目标签名消息的高度值相同。之后,可以将本地区块链中目标区块之后的区块作为待回滚区块,以及将本地消息状态树中目标签名消息之后的消息,作为待回滚消息。
S505,对待回滚对象进行回滚处理。
S506,结束。
本实施例中S506结束表示异常处理逻辑结束。
本公开实施例的技术方案,在监测到异常事件的情况下,通过根据本地消息状态树中最新生效签名消息的高度值与本地区块链中最新区块的高度值之间的关系,采用不同处理逻辑确定待回滚对象,不仅丰富了异常处理方式,而且减少了计算的复杂度,提升了异常处理效率;此外,本实施例相比于现有的Chained-HotStuff算法而言,在保证区块链网络能够正常运行的情况下,进一步的减少了消息所带来的网络开销,简化了异常情况下的处理过程。
图6是根据本公开实施例提供的一种数据处理装置的结构示意图。该装置可实现本公开实施例所述的数据处理方法。该装置可集成于承载区块链网络中节点的计算设备中。该数据处理装置600具体包括:
对象确定模块601,用于若监测到异常事件,则根据本地消息状态树中签名消息的高度值与本地区块链中区块的高度值之间的关系,以及签名消息中区块标识与本地区块链中区块标识之间的关系,确定待回滚对象;其中,待回滚对象包括待回滚区块和/或待回滚消息;
回滚处理模块602,用于对待回滚对象进行回滚处理。
本公开实施例的技术方案,通过在监测到异常事件的情况下,引入本地消息状态树中签名消息中区块标识和高度值,与本地区块链中区块的区块标识和高度值之间的关系,精准定位异常对象即待回滚对象,并对待回滚对象进行回滚处理。相比于现有的Chained-HotStuff算法而言,在保证区块链网络能够正常运行的情况下,进一步的减少了消息所带来的网络开销,简化了异常情况下的处理过程。
示例性的,对象确定模块601包括:
第一对象确定单元,用于若本地消息状态树中最新生效签名消息的高度值,与本地区块链中最新区块的高度值不相同,则根据本地消息状态树中的区块标识与本地区块链中的区块标识之间的关系,确定待回滚对象。
示例性的,第一对象确定单元具体用于:
将本地区块链中区块标识与最新生效签名消息中区块标识相同的区块,作为目标区块;
将本地区块链中目标区块之后的区块作为待回滚区块。
示例性的,第一对象确定单元还具体用于:
将本地消息状态树中区块标识与最新区块的区块标识相同的签名消息,作为目标签名消息;
将本地消息状态树中目标签名消息之后的消息,作为待回滚消息。
示例性的,对象确定模块601还包括第二对象确定单元,第二对象确定单元具体用于:
若本地消息状态树中最新生效签名消息的高度值,与本地区块链中最新区块的高度值相同,则确定最新生效签名消息中区块标识与最新区块的区块标识是否相同;
若不相同,则从本地区块链中确定一个目标区块,以及从本地消息状态树中确定一个目标签名消息;其中,目标区块的区块标识与目标签名消息中区块标识相同,且目标区块的高度值与目标签名消息的高度值相同;
将本地区块链中目标区块之后的区块作为待回滚区块,以及将本地消息状态树中目标签名消息之后的消息,作为待回滚消息。
示例性的,上述装置还包括:
事件监测模块,用于若在本机节点的轮值时间开始时,识别到未接收到上一轮值节点所生成的区块和/或签名消息,则确定监测到异常事件。
示例性的,上述装置包括:
消息获取模块,用于获取待处理消息;
前续消息确定模块,用于根据待处理消息的高度值,确定本地消息状态树中是否存在待处理消息的前续相邻消息;
消息添加模块,用于若存在,则将待处理消息作为前续相邻消息的一个分支,添加至本地消息状态树中。
示例性的,上述装置还包括:
查询模块,用于查询本地孤立消息列表中是否存在待处理消息的后续相邻消息;
消息添加模块,还用于若存在,则将后续相邻消息作为待处理消息的一个分支,添加至本地消息状态树中。
示例性的,上述装置还包括:
签名获取模块,用于获取待处理消息的签名集合;
生效模块,用于若识别到签名集合中签名数量大于设定数量,则控制待处理消息生效。
根据本公开的实施例,本公开还提供了一种电子设备、一种可读存储介质和一种计算机程序产品。
图7示出了可以用来实施本公开的实施例的示例电子设备700的示意性框图。电子设备旨在表示各种形式的数字计算机,诸如,膝上型计算机、台式计算机、工作台、个人数字助理、服务器、刀片式服务器、大型计算机、和其它适合的计算机。电子设备还可以表示各种形式的移动装置,诸如,个人数字处理、蜂窝电话、智能电话、可穿戴设备和其它类似的计算装置。本文所示的部件、它们的连接和关系、以及它们的功能仅仅作为示例,并且不意在限制本文中描述的和/或者要求的本公开的实现。
如图7所示,电子设备700包括计算单元701,其可以根据存储在只读存储器(ROM)702中的计算机程序或者从存储单元708加载到随机访问存储器(RAM)703中的计算机程序,来执行各种适当的动作和处理。在RAM 703中,还可存储电子设备700操作所需的各种程序和数据。计算单元701、ROM 702以及RAM 703通过总线704彼此相连。输入/输出(I/O)接口705也连接至总线704。
电子设备700中的多个部件连接至I/O接口705,包括:输入单元706,例如键盘、鼠标等;输出单元707,例如各种类型的显示器、扬声器等;存储单元708,例如磁盘、光盘等;以及通信单元709,例如网卡、调制解调器、无线通信收发机等。通信单元709允许电子设备700通过诸如因特网的计算机网络和/或各种电信网络与其他设备交换信息/数据。
计算单元701可以是各种具有处理和计算能力的通用和/或专用处理组件。计算单元701的一些示例包括但不限于中央处理单元(CPU)、图形处理单元(GPU)、各种专用的人工智能(AI)计算芯片、各种运行机器学习模型算法的计算单元、数字信号处理器(DSP)、以及任何适当的处理器、控制器、微控制器等。计算单元701执行上文所描述的各个方法和处理,例如数据处理方法。例如,在一些实施例中,数据处理方法可被实现为计算机软件程序,其被有形地包含于机器可读介质,例如存储单元708。在一些实施例中,计算机程序的部分或者全部可以经由ROM 702和/或通信单元709而被载入和/或安装到电子设备700上。当计算机程序加载到RAM 703并由计算单元701执行时,可以执行上文描述的数据处理方法的一个或多个步骤。备选地,在其他实施例中,计算单元701可以通过其他任何适当的方式(例如,借助于固件)而被配置为执行数据处理方法。
本文中以上描述的系统和技术的各种实施方式可以在数字电子电路系统、集成电路系统、场可编程门阵列(FPGA)、专用集成电路(ASIC)、专用标准产品(ASSP)、芯片上系统的系统(SOC)、负载可编程逻辑设备(CPLD)、计算机硬件、固件、软件、和/或它们的组合中实现。这些各种实施方式可以包括:实施在一个或者多个计算机程序中,该一个或者多个计算机程序可在包括至少一个可编程处理器的可编程系统上执行和/或解释,该可编程处理器可以是专用或者通用可编程处理器,可以从存储系统、至少一个输入装置、和至少一个输出装置接收数据和指令,并且将数据和指令传输至该存储系统、该至少一个输入装置、和该至少一个输出装置。
用于实施本公开的方法的程序代码可以采用一个或多个编程语言的任何组合来编写。这些程序代码可以提供给通用计算机、专用计算机或其他可编程数据处理装置的处理器或控制器,使得程序代码当由处理器或控制器执行时使流程图和/或框图中所规定的功能/操作被实施。程序代码可以完全在机器上执行、部分地在机器上执行,作为独立软件包部分地在机器上执行且部分地在远程机器上执行或完全在远程机器或服务器上执行。
在本公开的上下文中,机器可读介质可以是有形的介质,其可以包含或存储以供指令执行系统、装置或设备使用或与指令执行系统、装置或设备结合地使用的程序。机器可读介质可以是机器可读信号介质或机器可读储存介质。机器可读介质可以包括但不限于电子的、磁性的、光学的、电磁的、红外的、或半导体系统、装置或设备,或者上述内容的任何合适组合。机器可读存储介质的更具体示例会包括基于一个或多个线的电气连接、便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPROM或快闪存储器)、光纤、便捷式紧凑盘只读存储器(CD-ROM)、光学储存设备、磁储存设备、或上述内容的任何合适组合。
为了提供与用户的交互,可以在计算机上实施此处描述的系统和技术,该计算机具有:用于向用户显示信息的显示装置(例如,CRT(阴极射线管)或者LCD(液晶显示器)监视器);以及键盘和指向装置(例如,鼠标或者轨迹球),用户可以通过该键盘和该指向装置来将输入提供给计算机。其它种类的装置还可以用于提供与用户的交互;例如,提供给用户的反馈可以是任何形式的传感反馈(例如,视觉反馈、听觉反馈、或者触觉反馈);并且可以用任何形式(包括声输入、语音输入或者、触觉输入)来接收来自用户的输入。
可以将此处描述的系统和技术实施在包括后台部件的计算系统(例如,作为数据服务器)、或者包括中间件部件的计算系统(例如,应用服务器)、或者包括前端部件的计算系统(例如,具有图形用户界面或者网络浏览器的用户计算机,用户可以通过该图形用户界面或者该网络浏览器来与此处描述的系统和技术的实施方式交互)、或者包括这种后台部件、中间件部件、或者前端部件的任何组合的计算系统中。可以通过任何形式或者介质的数字数据通信(例如,通信网络)来将系统的部件相互连接。通信网络的示例包括:局域网(LAN)、广域网(WAN)、区块链网络和互联网。
计算机系统可以包括客户端和服务器。客户端和服务器一般远离彼此并且通常通过通信网络进行交互。通过在相应的计算机上运行并且彼此具有客户端-服务器关系的计算机程序来产生客户端和服务器的关系。服务器可以是云服务器,又称为云计算服务器或云主机,是云计算服务体系中的一项主机产品,以解决了传统物理主机与VPS服务中,存在的管理难度大,业务扩展性弱的缺陷。
应该理解,可以使用上面所示的各种形式的流程,重新排序、增加或删除步骤。例如,本发公开中记载的各步骤可以并行地执行也可以顺序地执行也可以不同的次序执行,只要能够实现本公开公开的技术方案所期望的结果,本文在此不进行限制。
上述具体实施方式,并不构成对本公开保护范围的限制。本领域技术人员应该明白的是,根据设计要求和其他因素,可以进行各种修改、组合、子组合和替代。任何在本公开的精神和原则之内所作的修改、等同替换和改进等,均应包含在本公开保护范围之内。
- 移动设备的数据处理方法、装置、存储介质和移动设备
- 行驶设备的数据处理方法、装置、设备及存储介质