本发明涉及区块链技术领域,尤其涉及一种区块链数据处理方法、装置及电子设备。
背景技术:
随着计算机技术的发展,越来越多的技术,例如,区块链(blockchain)、大数据、分布式等被应用在金融领域,传统金融业正在逐步向金融科技转变,然而,由于金融行业的安全性、实时性要求,金融科技也对技术提出了更高的要求。金融科技的数据安全检查场景下,电子设备通常基于安全检查服务对接收到的数据进行处理,但是,在数据处理过程中,可能因业务流程处理时长过长而导致数据处理效率较低,或者,因安全检查服务反馈的结果延迟而导致流入恶意数据,进而引发数据安全问题。其中,安全检查服务用于检测接收到的数据是否为恶意数据。
技术实现要素:
有鉴于此,本发明实施例期望提供一种区块链数据处理方法、装置及电子设备,以解决相关技术中在基于安全检查服务对数据进行处理时,数据处理效率较低或因流入恶意数据而引发数据安全的技术问题。
为达到上述目的,本发明的技术方案是这样实现的:
本发明实施例提供一种区块链数据处理方法,应用于第一共识节点,所述方法包括:
向安全节点发送第一数据;所述第一数据用于供所述安全节点校验所述第一数据是否为恶意数据;
基于内存池中的数据生成第一签名包;所述第一签名包中包括所述第一数据;
在接收到所述安全节点广播的第一消息的情况下,基于所述第一签名包向所有第二共识节点广播第二签名包;其中,所述第一消息用于标识所述第一数据为恶意数据;所述第二共识节点表征区块链集群中除所述第一共识节点之外的共识节点;所述第二签名包中未包括所述第一数据。
上述方案中,所述向安全节点发送第一数据,包括:
基于最新的区块对应的区块高度和最新的视图编号,以及基于所述区块链集群中所有共识节点的总数,确定出共识主节点的编号;
在所述第一共识节点的编号与确定出的共识主节点的编号相同的情况下,向所述安全节点发送第一数据。
上述方案中,所述方法还包括:
在未接收到所述安全节点广播的第一消息,且接收到的重新打包请求的总数大于或等于第一设定数量的情况下,基于所述第一签名包向所有第二共识节点广播所述第二签名包;其中,
所述第一设定数量表征达成共识的共识节点的最小数量;所述重新打包请求由第二共识节点在接收到所述第一共识节点广播的所述第一签名包,且满足第一设定条件的情况下发送;所述重新打包请求用于指示所述第一共识节点删除所述第一签名包中的所述第一数据。
上述方案中,所述第一设定条件包括以下之一:
第二共识节点获取到的所有签名包的总数大于或等于所述第一设定数量,且接收到所述安全节点广播的第一消息;
第二共识节点获取到的第一数据包的总数小于所述第一设定数量,且接收到所述安全节点广播的第一消息;其中,
所述第一数据包由任一共识节点在获取到的所有签名包的总数大于或等于所述第一设定数量的情况下生成;获取到的签名包包括所述第一签名包和对所述第一签名包进行签名得到的第三签名包。
上述方案中,所述方法还包括:
在未接收到所述安全节点广播的第一消息,且接收到至少一个回滚请求的情况下,向所有第二共识节点广播视图切换请求;其中,
所述回滚请求由第二共识节点在接收到所述安全节点广播的第一消息,且获取到的第一数据包的总数大于或等于第一设定数量的情况下发送;
所述视图切换请求用于请求切换视图,以及用于触发新的第一共识节点基于所述第一签名包广播所述第二签名包;
所述第一设定数量表征达成共识的共识节点的最小数量;所述第一数据包由任一共识节点在获取到的所有签名包的总数大于或等于所述第一设定数量的情况下生成;获取到的签名包包括所述第一签名包和对所述第一签名包进行签名得到的第三签名包。
本发明实施例还提供了一种区块链数据处理方法,应用于至少一个第二共识节点中的每个第二共识节点,所述方法包括:
接收第一共识节点广播的第一签名包;所述第一签名包包括第一数据;
在接收到安全节点广播的第一消息的情况下,删除包含所述第一数据的所有数据包;其中,
所述第一消息由所述安全节点在确定出所述第一共识节点发送的第一数据为恶意数据的情况下发送;所述包含所述第一数据的所有数据包包括所述第一签名包。
上述方案中,所述接收第一共识节点广播的第一签名包,包括:
基于最新的区块对应的区块高度和最新的视图编号,以及基于所述区块链集群中所有共识节点的总数,确定出共识主节点的编号;
在所述第二共识节点的编号与确定出的共识主节点的编号不同的情况下,接收第一共识节点广播的第一签名包。
上述方案中,还包括以下之一:
在获取到的所有签名包的总数大于或等于第一设定数量,且接收到所述安全节点广播的第一消息的情况下,向所述第一共识节点发送重新打包请求;
在获取到的所有第一数据包的总数小于所述第一设定数量,且接收到所述安全节点广播的第一消息的情况下,向所述第一共识节点发送重新打包请求;
在获取到的所有第一数据包的总数大于或等于所述第一设定数量,且接收到所述安全节点广播的第一消息的情况下,向所述第一共识节点发送回滚请求;其中,
所述第一数据包由任一共识节点在获取到的所有签名包的总数大于或等于第一设定数量的情况下生成;获取到的签名包包括所述第一签名包和第二共识节点对所述第一签名包进行签名得到的签名包;所述第一设定数量表征达成共识的共识节点的最小数量;所述重新打包请求用于指示所述第一共识节点删除所述第一签名包中的所述第一数据;所述回滚请求用于触发所述第一共识节点向所有第二共识节点广播视图切换请求。
本发明实施例还提供了一种区块链数据处理方法,应用于安全节点,所述方法包括:
校验第一共识节点发送的第一数据是否为恶意数据,得到校验结果;
基于所述校验结果向第一共识节点和所有第二共识节点发送广播消息;其中,所述广播消息用于标识所述第一数据是否为恶意数据。
上述方案中,所述基于所述校验结果向第一共识节点和所有第二共识节点发送广播消息,包括:
在所述校验结果表征所述第一数据为恶意数据的情况下,向所述第一共识节点和所有第二共识节点广播第一消息;其中,所述第一消息用于标识所述第一数据为恶意数据。
本发明实施例还提供了一种区块链数据处理装置,包括:
第一发送单元,用于向安全节点发送第一数据;所述第一数据用于供所述安全节点校验所述第一数据是否为恶意数据;
打包单元,用于基于内存池中的数据生成第一签名包;所述第一签名包中包括所述第一数据;
第二发送单元,用于在接收到所述安全节点广播的第一消息的情况下,基于所述第一签名包向所有第二共识节点广播第二签名包;其中,所述第一消息用于标识所述第一数据为恶意数据;所述第二共识节点表征区块链集群中除所述第一共识节点之外的共识节点;所述第二签名包中未包括所述第一数据。
本发明实施例还提供了一种区块链数据处理装置,包括:
接收单元,用于接收第一共识节点广播的第一签名包;所述第一签名包包括第一数据;
删除单元,用于在接收到安全节点广播的第一消息的情况下,删除包含所述第一数据的所有数据包;其中,
所述第一消息由所述安全节点在确定出所述第一共识节点发送的第一数据为恶意数据的情况下发送;所述包含所述第一数据的所有数据包包括所述第一签名包。
本发明实施例还提供了一种区块链数据处理装置,包括:
校验单元,用于校验第一共识节点发送的第一数据是否为恶意数据,得到校验结果;
发送单元,用于基于所述校验结果向第一共识节点和所有第二共识节点发送广播消息;其中,所述广播消息用于标识所述第一数据是否为恶意数据。
本发明实施例还提供了一种电子设备,包括:处理器和用于存储能够在处理器上运行的计算机程序的存储器,
其中,所述处理器用于运行所述计算机程序时,执行以下至少之一:
应用于第一共识节点的任一种区块链数据处理方法的步骤;
应用于第二共识节点的任一种区块链数据处理方法的步骤;
应用于安全节点的任一种区块链数据处理方法的步骤。
本发明实施例还提供了一种存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现以下至少之一:
应用于第一共识节点的任一种区块链数据处理方法的步骤;
应用于第二共识节点的任一种区块链数据处理方法的步骤;
应用于安全节点的任一种区块链数据处理方法的步骤。
本发明实施例,第一共识节点在接收到第一数据时,向安全节点发送第一数据,以及基于内存池中的数据生成包含第一数据的第一签名包;在接收到安全节点广播的第一消息标识第一数据为恶意数据的情况下,基于第一签名包向所有第二共识节点广播未包含第一数据的第二签名包,以便任一共识节点在对第二签名包达成共识的情况下,将第二签名包中的相关数据存储至区块链。上述方案,在区块链集群中增加了至少一个安全节点,安全节点校验数据和第一共识节点打包数据可以并行实现,因此可以提高数据处理效率。另外,第一共识节点无论在向所有第二共识节点广播第一签名包之前,还是在广播第一签名包之后,第一共识节点在接收到安全节点广播的第一消息的情况下,均基于第一签名包向所有第二共识节点广播第二签名包,这样区块链集群中的共识节点无论在对第一签名包进行共识之前还是在对第一签名包进行共识的过程中,均可以删除恶意数据。相对于相关技术中,在将恶意数据存储至区块链之后再对恶意数据进行事后打击的方式,本方案可以避免恶意数据流入区块链,提高数据的安全性。
附图说明
图1为本发明实施例提供的一种区块链集群的结构示意图;
图2为本发明实施例提供的区块链数据处理方法的交互图;
图3为本发明另一实施例提供的区块链数据处理方法的交互图;
图4为本发明再实施例提供的区块链数据处理方法的交互图;
图5为本发明又一实施例提供的区块链数据处理方法的交互图;
图6为本发明实施例提供的区块链数据处理装置的结构示意图;
图7为本发明另一实施例提供的区块链数据处理的结构示意图;
图8为本发明再一实施例提供的区块链数据处理装置的结构示意图;
图9为本发明实施例提供的电子设备的硬件组成结构示意图。
具体实施方式
在介绍本发明的技术方案之前,先介绍相关技术中的数据处理方法:
全球物联网设备高速增长,给物联网安全防护能力带来巨大挑战。物联网设备数据是物联网设备安全的重中之重,对于传统中心化物联网设备管理服务,高效的安全防护能力是支撑海量设备的关键。由于区块链具有去中心化、不可篡改、共识机制等特性,因此,将区块链技术应用于物联网可以有效降低中心化服务的运维成本,同时数据加密处理增强隐私保护;而作为区块链种类之一的联盟链具有身份权限管理和共识机制,可以识别非法接入,能够一定程度的阻止恶意设备的接入和作恶,本身自带着安全防护能力,适合用于物联网上报数据的存储及处理。
相关技术中,区块链用来存储数据,同时又需要利用安全检查服务对数据进行安全监测。对数据进行安全监测的方案包括以下两种方案:
在一种方案中,区块链节点利用安全检查服务,基于设定的安全检查策略确定接收到的数据是否为恶意数据,在确定出接收到的数据为恶意数据的情况下,丢弃该数据;在确定出接收到的数据可信(不是恶意数据)的情况下,基于设定的共识机制对接收到的数据进行处理;在对该数据达成共识的情况下,对该数据进行上链,从而将该数据存储至区块链。但是,这种方案,安全检查服务成为业务流程中的关键节点,对安全检查服务有着极高的稳定性及性能要求,一旦安全检查服务宕机或者出现安全检查耗时过久的情况,会导致数据存储的业务流程处理时长过长,进而导致数据处理效率较低。
在另一种方案中,区块链节点基于设定的共识机制对接收到的数据进行处理,并利用安全检查服务确定接收到的数据是否为恶意数据;在对接收到的数据达成共识的情况下,对该数据进行上链;在将该数据存储至区块链的情况下,获取安全检查服务反馈的用于标识接收到的数据是否为恶意数据的确定结果,在确定结果表征接收到的数据为恶意数据时,对确定出的恶意数据进行处理。这种对恶意数据进行事后打击的方式,虽然安全检查服务确定数据是否合法的处理逻辑不会影响到数据存储的业务流程处理时长,但是可能因安全检查服务反馈的结果延迟而导致区块链中流入恶意数据,进而引发数据安全问题。
其中,共识机制用于供多个区块链节点对数据进行验证和确认,多个区块链节点中的若干个区块链节点对同一数据达成共识的情况下,区块链集群对该数据达成共识,该数据是可信数据。
针对相关技术中,在基于安全检查服务对数据进行处理时,数据处理效率较低或因流入恶意数据而引发数据安全的技术问题,本发明提供了一种区块链数据处理方法:第一共识节点在接收到第一数据时,向安全节点发送第一数据,以及基于内存池中的数据生成包含第一数据的第一签名包;在接收到安全节点广播的第一消息标识第一数据为恶意数据的情况下,基于第一签名包向所有第二共识节点广播未包含第一数据的第二签名包,以便任一共识节点在对第二签名包达成共识的情况下,将第二签名包中的相关数据存储至区块链。
本发明提供的方案中,在区块链集群中增加了至少一个安全节点,安全节点校验数据和第一共识节点打包数据可以并行实现,因此可以提高数据处理效率。另外,第一共识节点无论在向所有第二共识节点广播第一签名包之前,还是在广播第一签名包之后,第一共识节点在接收到安全节点广播的第一消息的情况下,均基于第一签名包向所有第二共识节点广播第二签名包,这样区块链集群中的共识节点无论在对第一签名包进行共识之前还是在对第一签名包进行共识的过程中,均可以删除恶意数据,相对于相关技术中,在将恶意数据存储至区块链之后再对恶意数据进行事后打击的方式,本方案可以避免恶意数据流入区块链,提高数据的安全性。
以下结合说明书附图及具体实施例对本发明的技术方案做进一步的详细阐述。
图1示出了本发明实施例提供的一种区块链集群的结构示意图。如图1所示,区块链集群包括至少两个共识节点11和至少一个安全节点12。共识节点11和安全节点12可以为终端、服务器等电子设备。其中,
共识节点11是参与共识的节点,拥有区块链集群中的所有数据;安全节点12是一种特权节点,不参与共识,但是具有一票否决权和发起交易权。
至少两个共识节点11中包括一个共识主节点和至少一个共识辅节点;共识主节点也称为leader。需要说明的是,在相邻的两轮共识中,共识主节点不同。在实际应用中,在视图切换成功的情况下,由至少两个共识节点确定出新的共识主节点。
共识主节点,用于向安全节点12发送接收到的第一数据,以及从内存池(或称交易池)中存储的数据打包新区块,并基于新区块生成prepare包,并向所有共识辅节点广播prepare包。
共识主节点,还用于在接收到安全节点12发送的广播消息表征第一数据为恶意数据的情况下,基于包含第一数据的prepare包生成新的prepare包,并向所有共识辅节点广播新的prepare包;以及用于参与共识。
其中,基于包含第一数据的prepare包生成新的prepare包的方法包括以下之一:
删除包含第一数据的prepare包中的第一数据,更新该prepare包的时间戳,得到新的prepare包;
从内存池中删除第一数据,基于内存池中的数据重新打包新区块,并基于新区快生成prepare包。
安全节点12,用于校验共识主节点发送的第一数据是否为恶意数据,得到校验结果;以及基于所述校验结果向区块链集群中的所有共识节点发送广播消息;其中,所述广播消息用于标识所述第一数据是否为恶意数据。
共识辅节点,用于基于共识主节点广播的prepare包进行共识;以及用于在接收到安全节点12发送的广播消息表征第一数据为恶意数据的情况下,删除包含第一数据的所有数据包;包含第一数据的数据包包括prepare包、基于prepare包生成的签名包以及基于对应的签名包生成的commit包。
共识辅节点,还用于在接收到安全节点12广播的第一消息,且满足第一设定条件的情况下,向共识主节点发送重新打包请求;以及用于在接收到安全节点12发送的广播消息表征第一数据为恶意数据,且满足第二设定条件的情况下,向共识主节点发送回滚请求。其中,
重新打包请求用于指示所述共识主节点删除第一签名包中的第一数据;
回滚请求用于触发共识主节点向所有共识辅节点广播视图切换请求;视图切换请求用于请求切换视图,以及用于在切换视图成功的情况下,触发新的共识主节点基于第一签名包广播第二签名包。
下面结合区块链数据处理方法的交互图,详细说明图1中的各节点的工作原理:
图2示出了本发明实施例提供的一种区块链数据处理方法的交互图。参照图2,本发明实施例提供的区块链数据处理方法包括:
s101:第一共识节点向安全节点发送第一数据;所述第一数据用于供所述安全节点校验所述第一数据是否为恶意数据。
这里,第一共识节点在接收到待处理的第一数据的情况下,向安全节点发送第一数据。第一数据由其他设备向第一共识节点发送。在实际应用中,第一数据也称交易。第一共识节点为共识主节点。第二共识节点为共识辅节点。
在一些实施例中,所述第一共识节点向安全节点发送第一数据,包括:
基于最新的区块对应的区块高度和最新的视图编号,以及基于所述区块链集群中所有共识节点的总数,确定出共识主节点的编号;
在所述第一共识节点的编号与确定出的共识主节点的编号相同的情况下,向所述安全节点发送第一数据。
这里,区块链集群中的共识节点轮流出块,每一轮共识仅有一个共识主节点(leader)打包区块。区块链集群中的每个共识节点在视图切换成功的情况下,基于最新的区块对应的区块高度和最新的视图编号,以及基于区块链集群中所有共识节点的总数,确定出共识主节点的编号;在第一共识节点的编号与确定出的共识主节点的编号相同的情况下,表征第一共识节点为共识主节点,第一共识节点接收第一数据,并向安全节点发送接收到的第一数据。,进行取模运算,得到取模运算结果,取模运算结果即为
在实际应用中,每个共识节点可以基于最新的区块对应的区块高度和最新的视图编号,以及基于区块链集群中所有共识节点的总数进行取模运算,得到共识主节点的编号。其中,通过以下公式确定出共识主节点的编号:
p=(k v)mod(r)
p表征共识主节点的编号;k表征最新的区块对应的区块高度;v表征最新的区块对应的视图编号;r表征当前的区块链集群中所有共识节点的总数;“(k v)mod(r)”表征(k v)对r取模。
需要说明的是,在确定出leader时,leader缓存由leader组装的区块的全量信息,全量信息包括区块对应的prepare包、prepare包对应的签名包、prepare包对应的commit包、其他共识节点发送的重新打包请求。全量信息用于在对应的区块中包含恶意数据时能够重新打包prepare包。
s102:第一共识节点基于内存池中的数据生成第一签名包;所述第一签名包中包括所述第一数据。
这里,内存池也称交易池,用于存储待处理的数据,或待确认的交易。
第一共识节点启动打包线程,从内存池中打包数据,组装成新区块,基于新区块生成第一签名包。
需要说明的是,第一签名包中至少包括第一数据,还可以包括从内存池中打包的至少一个第二数据。
在实际应用中,第一签名包为prepare包。第一签名包中包括第一共识节点的编号、当前视图的编号、对应的区块中包含的所有数据的编号、对应的区块中包含的所有数据和所有数据的摘要。
需要说明的是,s101和s102不分先后顺序,可以同时执行。
s103:安全节点校验第一共识节点发送的第一数据是否为恶意数据,得到校验结果。
这里,安全节点基于设定的安全检查策略,校验第一共识节点发送的第一数据是否为恶意数据,得到校验结果。其中,设定的安全检查策略用于检测恶意数据,设定的安全检查策略可以根据实际情况进行设置。
在实际应用中,设定的安全检查策略可以包括:
检测第一数据携带的设备标识是否与设定的黑名单列表中记录的设备标识相同;第一数据携带的设备标识用于标识向第一共识节点发送第一数据的设备;
检测向第一共识节点发送第一数据的设备的数据上报频率是否处于设定的频率范围;设定的频率范围表征正常上报数据的频率范围;
检测第一数据中是否包含设定的敏感词;
检测第一数据的数据格式是否符合设定的数据格式。
其中,在第一数据携带的设备标识与设定的黑名单列表中记录的设备标识相同的情况下,第一数据为恶意数据。
在向第一共识节点发送第一数据的设备的数据上报频率未处于设定的频率范围的情况下,第一数据为恶意数据。
在第一数据中未包含设定的敏感词的情况下,第一数据为恶意数据。
在第一数据的数据格式符合设定的数据格式的情况下,第一数据为恶意数据。
s104:安全节点基于所述校验结果向第一共识节点和所有第二共识节点发送广播消息;其中,所述广播消息用于标识所述第一数据是否为恶意数据。
这里,安全节点可以基于校验结果向区块链集群中的第一共识节点和所有第二共识节点广播第一消息或第二消息。其中,第一消息用于标识第一数据为恶意数据;第二消息用于标识第一数据为可信数据,即第一数据不是恶意数据。
在一实施例中,所述基于所述校验结果向第一共识节点和所有第二共识节点发送广播消息,包括:
在所述校验结果表征所述第一数据为恶意数据的情况下,向所述第一共识节点和所有第二共识节点广播第一消息;其中,所述第一消息用于标识所述第一数据为恶意数据。
这里,安全节点在校验结果表征第一数据不是恶意数据的情况下,不发送广播消息。
s105:第一共识节点在接收到所述安全节点广播的第一消息的情况下,基于所述第一签名包向所有第二共识节点广播第二签名包;其中,所述第一消息用于标识所述第一数据为恶意数据;所述第二共识节点表征区块链集群中除所述第一共识节点之外的共识节点;所述第二签名包中未包括所述第一数据。
第一共识节点在接收到安全节点广播的第一消息的情况下,基于第一签名包生成第二签名包,并向所有第二共识节点广播第二签名包。其中,第二签名包与第一签名包的区别在于:第二签名包中未包括第一数据,且第二签名包的时间戳与第一签名包的时间戳不同。
在实际应用中,第一共识节点基于第一签名包生成第二签名包的方法包括:
删除第一签名包中的第一数据,基于当前时间更新第一签名包的时间戳,得到第二签名包。
需要说明的是,在第一签名包中的区块中仅包括第一数据,且第一数据为恶意数据的情况下,删除第一签名包中的第一数据,第一共识节点切换视图,并向所有第二共识节点广播视图切换请求。在区块链集群中,切换视图成功的共识节点的总数大于或等于第一设定数量的情况下,确定出新的第一共识节点。其中,第一设定数量表征达成共识的共识节点的最小数量。例如,在基于实用拜占庭容错算法进行共识时,区块链集群中所有共识节点的总数为3×f 1,第一设定数量为2×f 1。
s106:第二共识节点在对所述第二签名包达成共识的情况下,对所述第二签名包进行上链。
这里,第二共识节点在接收到第一共识节点广播的第二签名包的情况下,执行共识流程;在第二共识节点在对第二签名包达成共识的情况下,对第二签名包进行上链,从而将第二签名包中的区块中包含的数据存储至区块链。
在实际应用中,共识节点基于实用拜占庭容错算法(pbft,practicalbyzantinefaulttolerance)进行共识。pbft对应的共识流程包括三个阶段:预准备(pre-prepare)阶段、准备(prepare)阶段和提交(commit)阶段。
在pre-prepare阶段,第二共识节点在接收到第二签名包的情况下,可以对第二签名包进行合法性检查以及确定第二签名包中的区块是否为空块,在第二签名包合法,且第二签名包中的区块不是空块的情况下,对第二签名包进行签名,得到第二签名包对应的签名包。其中,第二签名包对应的签名包中包括第一共识节点的编号、对应的第二共识节点的编号、当前视图的编号、对应的区块中包含的所有数据的编号、对应的区块中包含的所有数据的摘要。
在prepare阶段,第二共识节点接收其他共识节点广播的第二签名包对应的签名包,在获取到的第二签名包对应的所有签名包的总数大于或等于第一设定数量的情况下,表征对应的共识节点达到了可提交第二签名包的状态,基于第二签名包对应的签名包,生成第二签名包对应的第一数据包(即commit包),并广播生成的第一数据包。commit包用于标识第二签名包合法。在获取到的第二签名包对应的所有签名包的总数小于第一设定数量的情况下,丢弃第二签名包对应的所有签名包。
在commit阶段,第二共识节点接收其他共识节点广播的第二签名包对应的第一数据包,在获取到的第二签名包对应的所有第一数据包的总数大于或等于第一设定数量的情况下,表征对应的共识节点达到了可提交第二签名包中的区块的状态,将第二签名包中的区块写入数据库,以将第二签名包中的区块落盘;在获取到的第二签名包对应的所有第一数据包的总数小于第一设定数量的情况下,丢弃第二签名包对应的所有第一数据包。其中,
第二签名包对应的第一数据包中包括第一共识节点的编号、对应的第二共识节点的编号、当前视图的编号、对应的区块中包含的所有数据的编号、对应的区块中包含的所有数据的摘要。
在pre-prepare阶段,对第二签名包进行合法性检查,可以包括:检测第二签名包是否是重复的prepare包,检测第二签名包中包含的区块父哈希是否是对应的第二共识节点的最高块哈希,检测第二签名包中包含的区块的块高是否等于最高块高加一。
这里,在检测第二签名包是否是重复的prepare包时,可以计算第二签名包对应的所有数据的摘要对应的哈希值,基于计算得到的哈希值和本地存储的历史签名包对应的哈希值,确定第二签名包是否是重复的prepare包。
由于第一共识节点不会发送两个具有相同的v和n,但d和m却不同的签名包,因此,第二共识节点还可以基于第二签名包中的v、n、d和m,检测第二签名包是否是重复的prepare包。v表征当前视图的编号;n表征对应的区块中包含的所有数据的编号;d表征对应的区块中包含的所有数据的摘要;m表征对应的区块中包含的所有数据。
这里,在第二签名包不是重复的prepare包,第二签名包中包含的区块父哈希是对应的第二共识节点的最高块哈希,且第二签名包中包含的区块的块高等于最高块高加一的情况下,表征第二签名包合法。在第二签名包是重复的prepare包,第二签名包中包含的区块父哈希不是对应的第二共识节点的最高块哈希,或第二签名包中包含的区块的块高不等于最高块高加一的情况下,表征第二签名包不合法。在第二签名包合法的情况下,第二共识节点缓存合法的第二签名包;在第二签名包不合法的情况下,丢弃第二签名包。
确定第二签名包中的区块是否为空块的方法包括:检测第二签名包中的区块中是否包括数据。当第二签名包中的区块未包括数据时,表征第二签名包中的区块为空块,将当前视图的编号加一,并向所有其他共识节点广播视图切换请求。视图切换请求用于请求其他共识节点切换视图。当第二签名包中的区块包括数据时,表征第二签名包中的区块不是空块,此时,第二共识节点调用blockverifier区块执行器执行第二签名包中的区块,缓存执行后的区块;基于执行后的区块包含的所有数据的哈希值(也称摘要),生成第二签名包对应的签名包,并广播生成的签名包。
需要说明的是,在共识过程中,每个第二共识节点在收到当前区块对应的leader发起的相同的prepare包的情况下,基于时间戳最新的prepare包进行共识;在接收到当前区块对应的leader发起的相同的commit包的情况下,基于时间戳最新的commit包进行共识。
需要说明的是,由于第一共识节点也参与共识,因此,第一共识节点也可以按照上述prepare阶段和commit阶段对应的流程进行共识,第一共识节点在对第二签名包达成共识的情况下,也可以对所述第二签名包进行上链。
本发明实施例提供的方案中,第一共识节点在接收到第一数据时,向安全节点发送第一数据,以及基于内存池中的数据生成包含第一数据的第一签名包;在接收到安全节点广播的第一消息标识第一数据为恶意数据的情况下,基于第一签名包向所有第二共识节点广播未包含第一数据的第二签名包。由于安全节点校验数据和第一共识节点打包数据可以并行实现,因此可以提高数据处理效率;另外,第一共识节点无论在向所有第二共识节点广播第一签名包之前,还是在广播第一签名包之后,第一共识节点在接收到安全节点广播的第一消息的情况下,均基于第一签名包向所有第二共识节点广播第二签名包,这样区块链集群中的共识节点无论在对第一签名包进行共识之前还是在对第一签名包进行共识的过程中,均可以删除恶意数据,相对于相关技术中,在将恶意数据存储至区块链之后再对恶意数据进行事后打击的方式,本方案可以避免恶意数据流入区块链,提高数据的安全性。
上面在图2对应的实施例中,介绍了第一共识节点在未广播第一签名包,且接收到安全节点广播的第一消息的情况下,第一共识节点基于第一签名包向所有第二共识节点广播第二签名包,由于第二共识节点未接收到第一签名包,因此,第二共识节点在接收到安全节点广播的第一消息的情况下,不需要处理,第二共识节点在接收到第二签名包的情况下,对第二签名包进行共识。
下面结合图3,介绍第一共识节点在向所有第二共识节点广播第一签名包,且第一共识节点和第二共识节点均接收到安全节点广播的第一消息的情况下,区块链数据处理方法的实现过程;结合图4和图5,介绍第一共识节点在向所有第二共识节点广播第一签名包,且第一共识节点未接收到安全节点广播的第一消息,第二共识节点接收到安全节点广播的第一消息的情况下,区块链数据处理方法的实现过程。
参照图3,图3示出了本发明另一实施例提供的区块链数据处理方法的交互图。参照图3,本发明实施例提供的区块链数据处理方法包括:
s201:第一共识节点向安全节点发送第一数据;所述第一数据用于供所述安全节点校验所述第一数据是否为恶意数据。
这里,s201与图2对应的实施例中的s101相同,具体实现方式请参照s101中的相关描述,此处不赘述。
s202:第一共识节点基于内存池中的数据生成第一签名包;所述第一签名包中包括所述第一数据。
这里,s202与图2对应的实施例中的s102相同,具体实现方式请参照s102中的相关描述,此处不赘述。
需要说明的是,s201和s202不分先后顺序,第一共识节点可以同时执行s201和s202。
s203:第一共识节点向所有第二共识节点广播第一签名包。
这里,第一共识节点在生成第一签名包的情况下,向第一共识节点所处的区块链集群中的所有第二共识节点广播第一签名包。
s204:第二共识节点接收第一共识节点广播的第一签名包。
在一些实施例中,所述第二共识节点接收第一共识节点广播的第一签名包,包括:
基于最新的区块对应的区块高度和最新的视图编号,以及基于所述区块链集群中所有共识节点的总数,确定出共识主节点的编号;
在所述第二共识节点的编号与确定出的共识主节点的编号不同的情况下,接收第一共识节点广播的第一签名包。
这里,在第二共识节点的编号与确定出的共识主节点的编号不同的情况下,表征第二共识节点不是区块链集群中的共识主节点,第二共识节点接收第一共识节点广播的第一签名包。
s205:安全节点校验第一共识节点发送的第一数据是否为恶意数据,得到校验结果。
这里,s205与图2对应的实施例中的s103相同,具体实现方式请参照s103中的相关描述,此处不赘述。
s206:安全节点基于所述校验结果向第一共识节点和所有第二共识节点发送广播消息;其中,所述广播消息用于标识所述第一数据是否为恶意数据。
在一些实施例中,所述基于所述校验结果向第一共识节点和所有第二共识节点发送广播消息,包括:
在所述校验结果表征所述第一数据为恶意数据的情况下,向所述第一共识节点和所有第二共识节点广播第一消息;其中,所述第一消息用于标识所述第一数据为恶意数据。
这里,s206与图2对应的实施例中的s104相同,具体实现方式请参照s104中的相关描述,此处不赘述。
s207:第二共识节点在接收到安全节点广播的第一消息的情况下,删除包含所述第一数据的所有数据包。其中,包含所述第一数据的数据包包括所述第一签名包。
这里,第二共识节点在接收到第一共识节点广播的第一签名包的情况下,基于设定的共识机制对第一签名包进行共识;在对第一签名包进行共识的过程中,接收到安全节点广播的第一消息的情况下,删除包含第一数据的所有数据包。其中,包含第一数据的数据包至少包括第一签名包,还包括基于第一签名包生成的签名包或数据包。
在实际应用中,第二共识节点基于实用拜占庭容错算法对第一签名包进行共识时,第二共识节点在pre-prepare阶段,对第一签名包进行合法性检查以及确定第一签名包中的区块是否为空块,在第一签名包合法,且第一签名包中的区块不是空块的情况下,对第一签名包进行签名,得到第三签名包,并在第二共识节点所处的区块链集群中广播第三签名包。其中,第二共识节点在pre-prepare阶段基于第一签名包生成第三签名包的方法,请参照图2对应的实施例的s106中的相关描述,此处不赘述。
第二共识节点在未生成第一签名包对应的第三签名包,且接收到安全节点广播的第一消息的情况下,删除第一签名包。
第二共识节点在未广播已生成第一签名包对应的第三签名包,且接收到安全节点广播的第一消息的情况下,删除第一签名包和第三签名包。
第二共识节点在已广播第三签名包,且未接收到安全节点广播的第一消息的情况下,进入prepare阶段。在prepare阶段,第二共识节点接收其他第二共识节点广播的第三签名包,并判断当前是否满足第一设定条件,得到第一判断结果。在第一判断结果表征当前不满足第一设定条件的情况下,删除第一签名包、在pre-prepare阶段生成的第三签名包和在prepare阶段接收到的所有第三签名包;在第一判断结果表征当前满足第一设定条件的情况下,向第一共识节点发送重新打包请求。其中,
第一设定条件包括以下之一:
第二共识节点获取到的所有签名包的总数大于或等于所述第一设定数量,且接收到所述安全节点广播的第一消息;
第二共识节点获取到的第一数据包的总数小于所述第一设定数量,且接收到所述安全节点广播的第一消息。
这里,所述第一数据包(即,commit包)由任一共识节点在获取到的所有签名包的总数大于或等于所述第一设定数量的情况下生成;获取到的签名包包括所述第一签名包和对所述第一签名包进行签名得到的第三签名包。
对第一签名包进行签名得到的第三签名包,包括第二共识节点自己产生的第三签名包和接收到的第三签名包。
获取到的第一数据包包括第二共识节点生成的第一数据包,以及第二共识节点接收到的第一数据包。
需要说明的是,第二共识节点在获取到的所有签名包的总数小于第一设定数量的情况下,表征在prepare阶段,对应的第二共识节点未达到可提交第一签名包的状态,在接收到安全节点广播的第一消息时,直接删除第一签名包、第一签名包对应的所有第三签名包。
第二共识节点在prepare阶段获取到的所有签名包的总数大于或等于第一设定数量,生成第一签名包对应的第一数据包;在未接收到安全节点广播的第一消息的情况下,广播第一签名包对应的第一数据包,进入commit阶段。在commit阶段,第二共识节点接收其他共识节点广播的第一数据包,并判断当前是否满足第二设定条件,得到第二判断结果。在第二判断结果表征当前不满足第二设定条件的情况下,删除第一签名包、在pre-prepare阶段生成的第三签名包、在prepare阶段接收到的所有第三签名包,以及删除第一签名包对应的所有第一数据包;在第二判断结果表征当前满足第二设定条件的情况下,表征在commit阶段,对应的共识节点已达到可提交第二签名包中的区块的状态,部分共识节点可能已经将第二签名包中的区块落盘,此时,向第一共识节点发送回滚请求。其中,
第二设定条件为:第二共识节点获取到的所有第一数据包的总数大于或等于所述第一设定数量,且接收到所述安全节点广播的第一消息。
所述回滚请求用于触发所述第一共识节点向所有第二共识节点广播视图切换请求。
需要说明的是,第二共识节点获取到的第一数据包的总数小于第一设定数量的情况下,表征在commit阶段,对应的共识节点未达到可提交第二签名包中的区块的状态,在接收到安全节点广播的第一消息时,删除第一签名包、第一签名包对应的所有第三签名包和第一签名包对应的所有第一数据包,并向第一共识节点发送重新打包请求。
s208:第一共识节点在接收到所述安全节点广播的第一消息的情况下,基于所述第一签名包向所有第二共识节点广播第二签名包。
在一些实施例中,第一共识节点在接收到安全节点广播的第一消息的情况下,无论是否接收到第二共识节点发送的重新打包请求或回滚请求,第一共识节点均基于所述第一签名包向所有第二共识节点广播第二签名包。这里,第一共识节点不响应重新打包请求和回滚请求。
在一些实施例中,第一共识节点在接收到安全节点广播的第一消息,且接收到第二共识节点发送的回滚请求的情况下,删除第一签名包,并响应回滚请求,切换视图以及向所有第二共识节点广播视图切换请求。在区块链集群中,切换视图成功的共识节点的总数大于或等于第一设定数量的情况下,确定出新的第一共识节点,由新的第一共识节点基于从区块链中取出第一签名包对应的区块,基于第一签名包对应的区块向所有新的第二共识节点广播未包含第一数据的第二签名包。
其中,第一共识节点基于所述第一签名包向所有第二共识节点广播第二签名包的实现方式,请参照图2对应的实施例的s105中的相关描述,此处不赘述。
s209:第二共识节点在对所述第二签名包达成共识的情况下,对所述第二签名包进行上链。
这里,s209的实现方式与图2对应的实施例的s106相同,具体请参照s106中的相关描述,此处不赘述。
在本实施例提供的方案中,第一共识节点在向所有第二共识节点广播第一签名包,且第一共识节点和第二共识节点均接收到安全节点广播的第一消息的情况下,第一共识节点基于第一签名包向所有第二共识节点广播第二签名包,由于可以第一共识节点在第一签名包中的区块落盘之前广播第二签名包,可以避免恶意数据流入区块链,提高数据的安全性。
参照图4,图4示出了本发明再一实施例提供的区块链数据处理方法的交互图。图4对应的实施例与图3对应的实施例的区别在于s308~s309:
s308:第二共识节点在满足第一设定条件的情况下,向第一共识节点发送重新打包请求。
这里,第一设定条件用于判断第二共识节点是否需要向第一共识节点发送重新打包请求。重新打包请求用于指示第一共识节点删除第一签名包中的第一数据。其中,重新打包请求携带第一数据的编号和第一签名包的标识;第一签名包的标识可以为第一数据所处的区块的编号。
在实际应用中,在基于实用拜占庭容错算法对第一签名包进行共识的情况下,第二共识节点在prepare阶段,获取到的所有签名包的总数大于或等于第一设定数量,且接收到安全节点广播的第一消息时,向第一共识节点发送重新打包请求。第二共识节点在commit阶段,获取到的第一数据包的总数小于第一设定数量,且接收到安全节点广播的第一消息时,表征第一签名包中的区块未落盘,此时,向第一共识节点发送重新打包请求。
s309:第一共识节点在未接收到所述安全节点广播的第一消息,且接收到的重新打包请求的总数大于或等于第一设定数量的情况下,基于所述第一签名包向所有第二共识节点广播第二签名包。
这里,第一共识节点在未接收到安全节点广播的第一消息,且接收到的重新打包请求的总数大于或等于第一设定数量的情况下,检测所有的重新打包请求是否均用于指示删除第一签名包中的第一数据,在确定出所有的重新打包请求均用于指示删除第一签名包中的第一数据的情况下,基于第一签名包向所有第二共识节点广播第二签名包。在确定出所有的重新打包请求不完全用于指示删除第一签名包中的第一数据的情况下,不响应所有的重新打包请求。
在实际应用中,第一共识节点可以判断所有重新打包请求携带的第一数据的编号是否均相同,以及基于所有重新打包请求携带的第一签名包的标识,获取对应的第一签名包,计算出获取到的每个签名包对应的哈希,判断计算出的所有哈希是否相同。在所有重新打包请求携带的第一数据的编号均相同,且计算出的所有哈希均相同的情况下,表征所有重新打包请求均用于删除第一签名包中的第一数据。在所有重新打包请求携带的第一数据的编号不完全相同,或计算出的所有哈希不完全相同的情况下,表征所有重新打包请求不完全用于删除第一签名包中的第一数据。
需要说明的是,s301~s307、s310的实现方式请参照s201~s207、s209中的相关描述,此处不赘述。
在本实施例提供的方案中,第一共识节点在未接收到安全节点广播的第一消息,且接收到的重新打包请求的总数大于或等于第一设定数量的情况下,基于所述第一签名包向所有第二共识节点广播第二签名包,由于可以第一共识节点在第一签名包中的区块落盘之前广播第二签名包,可以避免恶意数据流入区块链,提高数据的安全性。
参照图4,图4示出了本发明又一实施例提供的区块链数据处理方法的交互图。图5对应的实施例与图3对应的实施例的区别在于s408~s409:
s408:第二共识节点在满足第二设定条件的情况下,向第一共识节点发送回滚请求。
s409:第一共识节点在未接收到所述安全节点广播的第一消息,且接收到至少一个回滚请求的情况下,向所有第二共识节点广播视图切换请求;其中,
所述回滚请求由第二共识节点在接收到所述安全节点广播的第一消息,且获取到的第一数据包的总数大于或等于第一设定数量的情况下发送;
所述视图切换请求用于请求切换视图,以及用于触发新的第一共识节点基于所述第一签名包广播所述第二签名包。
这里,第一共识节点接收到至少一个回滚请求,表征部分共识节点可能已经将第二签名包中的区块落盘,此时,第一共识节点切换视图,向所有第二共识节点广播视图切换请求,以触发接收到视图切换请求的第二共识节点切换视图,在切换视图成功的共识节点的总数大于或等于第一设定数量的情况下,确定出新的第一共识节点,新的第一共识节点基于第一签名包广播第二签名包。其中,新的第一共识节点的编号与确定出新的共识主节点的编号相同。
新的第一共识节点基于第一签名包广播第二签名包的实现方法如下:
新的第一共识节点基于第一签名包中的区块的哈希值,确定出区块链中的最新区块是否为第一签名包中的区块。当区块链中的最新区块是第一签名包中的区块时,从区块链中删除第一签名包中的区块;当区块链中的最新区块不是第一签名包中的区块时,基于在切换视图前接收到的第一签名包,向所有新的第二共识节点广播未包括第一数据的第二签名包。
需要说明的是,s401~s407、s410的实现方式请参照s201~s207、s209中的相关描述,此处不赘述。
在本实施例提供的方案中,第一共识节点在未接收到安全节点广播的第一消息,且接收到至少一个回滚请求的情况下,向所有第二共识节点广播视图切换请求,以便新的第一共识节点重新基于第一签名包广播第二签名包,由此,可以保证恶意数据不影响可新数据。
为实现本发明实施例的方法,本发明实施例还提供了一种区块链数据处理装置,设置在第一共识节点上,第一共识节点为终端或服务器等电子设备,如图6所示,该区块链数据处理装置包括:
第一发送单元61,用于向安全节点发送第一数据;所述第一数据用于供所述安全节点校验所述第一数据是否为恶意数据;
打包单元62,用于基于内存池中的数据生成第一签名包;所述第一签名包中包括所述第一数据;
第二发送单元63,用于在接收到所述安全节点广播的第一消息的情况下,基于所述第一签名包向所有第二共识节点广播第二签名包;其中,所述第一消息用于标识所述第一数据为恶意数据;所述第二共识节点表征区块链集群中除所述第一共识节点之外的共识节点;所述第二签名包中未包括所述第一数据。
在一些实施例中,第一发送单元61用于:
基于最新的区块对应的区块高度和最新的视图编号,以及基于所述区块链集群中所有共识节点的总数,确定出共识主节点的编号;
在所述第一共识节点的编号与确定出的共识主节点的编号相同的情况下,向所述安全节点发送第一数据。
在一些实施例中,第二发送单元63还用于:
在未接收到所述安全节点广播的第一消息,且接收到的重新打包请求的总数大于或等于第一设定数量的情况下,基于所述第一签名包向所有第二共识节点广播所述第二签名包;其中,
所述第一设定数量表征达成共识的共识节点的最小数量;所述重新打包请求由第二共识节点在接收到所述第一共识节点广播的所述第一签名包,且满足第一设定条件的情况下发送;所述重新打包请求用于指示所述第一共识节点删除所述第一签名包中的所述第一数据。
在一些实施例中,所述第一设定条件包括以下之一:
第二共识节点获取到的所有签名包的总数大于或等于所述第一设定数量,且接收到所述安全节点广播的第一消息;
第二共识节点获取到的第一数据包的总数小于所述第一设定数量,且接收到所述安全节点广播的第一消息;其中,
所述第一数据包由任一共识节点在获取到的所有签名包的总数大于或等于所述第一设定数量的情况下生成;获取到的签名包包括所述第一签名包和对所述第一签名包进行签名得到的第三签名包。
在一些实施例中,该区块链数据处理装置包括:
第三发送单元,用于在未接收到所述安全节点广播的第一消息,且接收到至少一个回滚请求的情况下,向所有第二共识节点广播视图切换请求;其中,
所述回滚请求由第二共识节点在接收到所述安全节点广播的第一消息,且获取到的第一数据包的总数大于或等于第一设定数量的情况下发送;
所述视图切换请求用于请求切换视图,以及用于触发新的第一共识节点基于所述第一签名包广播所述第二签名包;
所述第一设定数量表征达成共识的共识节点的最小数量;所述第一数据包由任一共识节点在获取到的所有签名包的总数大于或等于所述第一设定数量的情况下生成;获取到的签名包包括所述第一签名包和对所述第一签名包进行签名得到的第三签名包。
实际应用时,区块链数据处理装置包括的各单元可由区块链数据处理装置中的处理器来实现,或者由区块链数据处理装置中的通信接口和处理器共同实现。当然,处理器需要运行存储器中存储的程序来实现上述各程序模块的功能。
需要说明的是:上述实施例提供的区块链数据处理装置在数据处理时,仅以上述各程序模块的划分进行举例说明,实际应用中,可以根据需要而将上述处理分配由不同的程序模块完成,即将区块链数据处理装置的内部结构划分成不同的程序模块,以完成以上描述的全部或者部分处理。另外,上述实施例提供的区块链数据处理装置与应用于第一共识节点的区块链数据处理方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
为实现本发明实施例的方法,本发明实施例还提供了一种区块链数据处理装置,设置在第二共识节点上,第二共识节点为终端或服务器等电子设备,如图7所示,该区块链数据处理装置包括:
接收单元71,用于接收第一共识节点广播的第一签名包;所述第一签名包包括第一数据;
删除单元72,用于在接收到安全节点广播的第一消息的情况下,删除包含所述第一数据的所有数据包;其中,
所述第一消息由所述安全节点在确定出所述第一共识节点发送的第一数据为恶意数据的情况下发送;所述包含所述第一数据的所有数据包包括所述第一签名包。
在一些实施例中,接收单元71用于:
基于最新的区块对应的区块高度和最新的视图编号,以及基于所述区块链集群中所有共识节点的总数,确定出共识主节点的编号;
在所述第二共识节点的编号与确定出的共识主节点的编号不同的情况下,接收第一共识节点广播的第一签名包。
在一些实施例中,该区块链数据处理装置包括发送单元,发送单元用于执行以下之一:
在获取到的所有签名包的总数大于或等于第一设定数量,且接收到所述安全节点广播的第一消息的情况下,向所述第一共识节点发送重新打包请求;
在获取到的所有第一数据包的总数小于所述第一设定数量,且接收到所述安全节点广播的第一消息的情况下,向所述第一共识节点发送重新打包请求;
在获取到的所有第一数据包的总数大于或等于所述第一设定数量,且接收到所述安全节点广播的第一消息的情况下,向所述第一共识节点发送回滚请求;其中,
所述第一数据包由任一共识节点在获取到的所有签名包的总数大于或等于第一设定数量的情况下生成;获取到的签名包包括所述第一签名包和第二共识节点对所述第一签名包进行签名得到的签名包;所述第一设定数量表征达成共识的共识节点的最小数量;所述重新打包请求用于指示所述第一共识节点删除所述第一签名包中的所述第一数据;所述回滚请求用于触发所述第一共识节点向所有第二共识节点广播视图切换请求。
实际应用时,区块链数据处理装置包括的各单元可由区块链数据处理装置中的处理器来实现,或者由区块链数据处理装置中的通信接口和处理器共同实现。当然,处理器需要运行存储器中存储的程序来实现上述各程序模块的功能。
需要说明的是:上述实施例提供的区块链数据处理装置在数据处理时,仅以上述各程序模块的划分进行举例说明,实际应用中,可以根据需要而将上述处理分配由不同的程序模块完成,即将区块链数据处理装置的内部结构划分成不同的程序模块,以完成以上描述的全部或者部分处理。另外,上述实施例提供的区块链数据处理装置与应用于第二共识节点的区块链数据处理方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
为实现本发明实施例的方法,本发明实施例还提供了一种区块链数据处理装置,设置在安全节点上,安全节点为终端或服务器等电子设备,如图8所示,该区块链数据处理装置包括:
校验单元81,用于校验第一共识节点发送的第一数据是否为恶意数据,得到校验结果;
发送单元82,用于基于所述校验结果向第一共识节点和所有第二共识节点发送广播消息;其中,所述广播消息用于标识所述第一数据是否为恶意数据。
在一些实施例中,发送单元82用于:在所述校验结果表征所述第一数据为恶意数据的情况下,向所述第一共识节点和所有第二共识节点广播第一消息;其中,所述第一消息用于标识所述第一数据为恶意数据。
实际应用时,区块链数据处理装置包括的各单元可由区块链数据处理装置中的处理器来实现,或者由区块链数据处理装置中的通信接口和处理器共同实现。当然,处理器需要运行存储器中存储的程序来实现上述各程序模块的功能。
需要说明的是:上述实施例提供的区块链数据处理装置在数据处理时,仅以上述各程序模块的划分进行举例说明,实际应用中,可以根据需要而将上述处理分配由不同的程序模块完成,即将区块链数据处理装置的内部结构划分成不同的程序模块,以完成以上描述的全部或者部分处理。另外,上述实施例提供的区块链数据处理装置与应用于安全节点的区块链数据处理方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
基于上述程序模块的硬件实现,且为了实现本发明实施例的方法,本发明实施例还提供了一种电子设备。图9为本发明实施例提供的电子设备的硬件组成结构示意图,如图9所示,电子设备包括:
通信接口1,能够与其它设备进行信息交互;
处理器2,与通信接口1连接,以实现与其它设备进行信息交互,用于运行计算机程序时,执行上述应用于第一共识节点的一个或多个技术方案提供的区块链数据处理方法,或者执行上述应用于第二共识节点的一个或多个技术方案提供的区块链数据处理方法,或者上述应用于安全节点的一个或多个技术方案提供的区块链数据处理方法。而所述计算机程序存储在存储器3上。
当然,实际应用时,电子设备中的各个组件通过总线系统4耦合在一起。可理解,总线系统4用于实现这些组件之间的连接通信。总线系统4除包括数据总线之外,还包括电源总线、控制总线和状态信号总线。但是为了清楚说明起见,在图9中将各种总线都标为总线系统4。
本发明实施例中的存储器3用于存储各种类型的数据以支持电子设备的操作。这些数据的示例包括:用于在电子设备上操作的任何计算机程序。
可以理解,存储器3可以是易失性存储器或非易失性存储器,也可包括易失性和非易失性存储器两者。其中,非易失性存储器可以是只读存储器(rom,readonlymemory)、可编程只读存储器(prom,programmableread-onlymemory)、可擦除可编程只读存储器(eprom,erasableprogrammableread-onlymemory)、电可擦除可编程只读存储器(eeprom,electricallyerasableprogrammableread-onlymemory)、磁性随机存取存储器(fram,ferromagneticrandomaccessmemory)、快闪存储器(flashmemory)、磁表面存储器、光盘、或只读光盘(cd-rom,compactdiscread-onlymemory);磁表面存储器可以是磁盘存储器或磁带存储器。易失性存储器可以是随机存取存储器(ram,randomaccessmemory),其用作外部高速缓存。通过示例性但不是限制性说明,许多形式的ram可用,例如静态随机存取存储器(sram,staticrandomaccessmemory)、同步静态随机存取存储器(ssram,synchronousstaticrandomaccessmemory)、动态随机存取存储器(dram,dynamicrandomaccessmemory)、同步动态随机存取存储器(sdram,synchronousdynamicrandomaccessmemory)、双倍数据速率同步动态随机存取存储器(ddrsdram,doubledataratesynchronousdynamicrandomaccessmemory)、增强型同步动态随机存取存储器(esdram,enhancedsynchronousdynamicrandomaccessmemory)、同步连接动态随机存取存储器(sldram,synclinkdynamicrandomaccessmemory)、直接内存总线随机存取存储器(drram,directrambusrandomaccessmemory)。本发明实施例描述的存储器3旨在包括但不限于这些和任意其它适合类型的存储器。
上述本发明实施例揭示的方法可以应用于处理器2中,或者由处理器2实现。处理器2可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器2中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器2可以是通用处理器、dsp,或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。处理器2可以实现或者执行本发明实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者任何常规的处理器等。结合本发明实施例所公开的方法的步骤,可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于存储介质中,该存储介质位于存储器3,处理器2读取存储器3中的程序,结合其硬件完成前述方法的步骤。
处理器2执行所述程序时实现本发明实施例的各个方法中多核处理器对应的流程,为了简洁,在此不再赘述。
在示例性实施例中,本发明实施例还提供了一种存储介质,即计算机存储介质,具体为计算机可读存储介质,例如包括存储计算机程序的存储器3,上述计算机程序可由处理器2执行,以完成前述实施例中的所述步骤。计算机可读存储介质可以是fram、rom、prom、eprom、eeprom、flashmemory、磁表面存储器、光盘、或cd-rom等存储器。
在本发明所提供的几个实施例中,应该理解到,所揭露的设备和方法,可以通过其它的方式实现。以上所描述的设备实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,如:多个单元或组件可以结合,或可以集成到另一个系统,或一些特征可以忽略,或不执行。另外,所显示或讨论的各组成部分相互之间的耦合、或直接耦合、或通信连接可以是通过一些接口,设备或单元的间接耦合或通信连接,可以是电性的、机械的或其它形式的。
上述作为分离部件说明的单元可以是、或也可以不是物理上分开的,作为单元显示的部件可以是、或也可以不是物理单元,即可以位于一个地方,也可以分布到多个网络单元上;可以根据实际的需要选择其中的部分或全部单元来实现本实施例方案的目的。
另外,在本发明各实施例中的各功能单元可以全部集成在一个处理模块中,也可以是各单元分别单独作为一个单元,也可以两个或两个以上单元集成在一个单元中;上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。
本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:移动存储设备、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、磁碟或者光盘等各种可以存储程序代码的介质。
需要说明的是,本发明实施例所记载的技术方案之间,在不冲突的情况下,可以任意组合。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。
1.一种区块链数据处理方法,其特征在于,应用于第一共识节点,所述方法包括:
向安全节点发送第一数据;所述第一数据用于供所述安全节点校验所述第一数据是否为恶意数据;
基于内存池中的数据生成第一签名包;所述第一签名包中包括所述第一数据;
在接收到所述安全节点广播的第一消息的情况下,基于所述第一签名包向所有第二共识节点广播第二签名包;其中,所述第一消息用于标识所述第一数据为恶意数据;所述第二共识节点表征区块链集群中除所述第一共识节点之外的共识节点;所述第二签名包中未包括所述第一数据。
2.根据权利要求1所述的方法,其特征在于,所述向安全节点发送第一数据,包括:
基于最新的区块对应的区块高度和最新的视图编号,以及基于所述区块链集群中所有共识节点的总数,确定出共识主节点的编号;
在所述第一共识节点的编号与确定出的共识主节点的编号相同的情况下,向所述安全节点发送第一数据。
3.根据权利要求1所述的方法,其特征在于,所述方法还包括:
在未接收到所述安全节点广播的第一消息,且接收到的重新打包请求的总数大于或等于第一设定数量的情况下,基于所述第一签名包向所有第二共识节点广播所述第二签名包;其中,
所述第一设定数量表征达成共识的共识节点的最小数量;所述重新打包请求由第二共识节点在接收到所述第一共识节点广播的所述第一签名包,且满足第一设定条件的情况下发送;所述重新打包请求用于指示所述第一共识节点删除所述第一签名包中的所述第一数据。
4.根据权利要求3所述的方法,其特征在于,所述第一设定条件包括以下之一:
第二共识节点获取到的所有签名包的总数大于或等于所述第一设定数量,且接收到所述安全节点广播的第一消息;
第二共识节点获取到的第一数据包的总数小于所述第一设定数量,且接收到所述安全节点广播的第一消息;其中,
所述第一数据包由任一共识节点在获取到的所有签名包的总数大于或等于所述第一设定数量的情况下生成;获取到的签名包包括所述第一签名包和对所述第一签名包进行签名得到的第三签名包。
5.根据权利要求1所述的方法,其特征在于,所述方法还包括:
在未接收到所述安全节点广播的第一消息,且接收到至少一个回滚请求的情况下,向所有第二共识节点广播视图切换请求;其中,
所述回滚请求由第二共识节点在接收到所述安全节点广播的第一消息,且获取到的第一数据包的总数大于或等于第一设定数量的情况下发送;
所述视图切换请求用于请求切换视图,以及用于触发新的第一共识节点基于所述第一签名包广播所述第二签名包;
所述第一设定数量表征达成共识的共识节点的最小数量;所述第一数据包由任一共识节点在获取到的所有签名包的总数大于或等于所述第一设定数量的情况下生成;获取到的签名包包括所述第一签名包和对所述第一签名包进行签名得到的第三签名包。
6.一种区块链数据处理方法,其特征在于,应用于至少一个第二共识节点中的每个第二共识节点,所述方法包括:
接收第一共识节点广播的第一签名包;所述第一签名包包括第一数据;
在接收到安全节点广播的第一消息的情况下,删除包含所述第一数据的所有数据包;其中,
所述第一消息由所述安全节点在确定出所述第一共识节点发送的第一数据为恶意数据的情况下发送;所述包含所述第一数据的所有数据包包括所述第一签名包。
7.根据权利要求6所述的方法,其特征在于,所述接收第一共识节点广播的第一签名包,包括:
基于最新的区块对应的区块高度和最新的视图编号,以及基于所述区块链集群中所有共识节点的总数,确定出共识主节点的编号;
在所述第二共识节点的编号与确定出的共识主节点的编号不同的情况下,接收第一共识节点广播的第一签名包。
8.根据权利要求6所述的方法,其特征在于,还包括以下之一:
在获取到的所有签名包的总数大于或等于第一设定数量,且接收到所述安全节点广播的第一消息的情况下,向所述第一共识节点发送重新打包请求;
在获取到的所有第一数据包的总数小于所述第一设定数量,且接收到所述安全节点广播的第一消息的情况下,向所述第一共识节点发送重新打包请求;
在获取到的所有第一数据包的总数大于或等于所述第一设定数量,且接收到所述安全节点广播的第一消息的情况下,向所述第一共识节点发送回滚请求;其中,
所述第一数据包由任一共识节点在获取到的所有签名包的总数大于或等于第一设定数量的情况下生成;获取到的签名包包括所述第一签名包和第二共识节点对所述第一签名包进行签名得到的签名包;所述第一设定数量表征达成共识的共识节点的最小数量;所述重新打包请求用于指示所述第一共识节点删除所述第一签名包中的所述第一数据;所述回滚请求用于触发所述第一共识节点向所有第二共识节点广播视图切换请求。
9.一种区块链数据处理方法,其特征在于,应用于安全节点,所述方法包括:
校验第一共识节点发送的第一数据是否为恶意数据,得到校验结果;
基于所述校验结果向第一共识节点和所有第二共识节点发送广播消息;其中,所述广播消息用于标识所述第一数据是否为恶意数据。
10.根据权利要求9所述的方法,其特征在于,所述基于所述校验结果向第一共识节点和所有第二共识节点发送广播消息,包括:
在所述校验结果表征所述第一数据为恶意数据的情况下,向所述第一共识节点和所有第二共识节点广播第一消息;其中,所述第一消息用于标识所述第一数据为恶意数据。
11.一种区块链数据处理装置,其特征在于,包括:
第一发送单元,用于向安全节点发送第一数据;所述第一数据用于供所述安全节点校验所述第一数据是否为恶意数据;
打包单元,用于基于内存池中的数据生成第一签名包;所述第一签名包中包括所述第一数据;
第二发送单元,用于在接收到所述安全节点广播的第一消息的情况下,基于所述第一签名包向所有第二共识节点广播第二签名包;其中,所述第一消息用于标识所述第一数据为恶意数据;所述第二共识节点表征区块链集群中除所述第一共识节点之外的共识节点;所述第二签名包中未包括所述第一数据。
12.一种区块链数据处理装置,其特征在于,包括:
接收单元,用于接收第一共识节点广播的第一签名包;所述第一签名包包括第一数据;
删除单元,用于在接收到安全节点广播的第一消息的情况下,删除包含所述第一数据的所有数据包;其中,
所述第一消息由所述安全节点在确定出所述第一共识节点发送的第一数据为恶意数据的情况下发送;所述包含所述第一数据的所有数据包包括所述第一签名包。
13.一种区块链数据处理装置,其特征在于,包括:
校验单元,用于校验第一共识节点发送的第一数据是否为恶意数据,得到校验结果;
发送单元,用于基于所述校验结果向第一共识节点和所有第二共识节点发送广播消息;其中,所述广播消息用于标识所述第一数据是否为恶意数据。
14.一种电子设备,其特征在于,包括:处理器和用于存储能够在处理器上运行的计算机程序的存储器,
其中,所述处理器用于运行所述计算机程序时,执行以下至少之一:
权利要求1至5任一项所述的方法的步骤;
权利要求6至8任一项所述的方法的步骤;
权利要求9至10任一项所述的方法的步骤。
15.一种存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现以下至少之一:
权利要求1至5任一项所述的方法的步骤;
权利要求6至8任一项所述的方法的步骤;
权利要求9至10任一项所述的方法的步骤。
技术总结