发明内容
本申请主要解决的技术问题是区块链数据同步中可能造成数据丢失。
根据第一方面,一种实施例中提供一种区块链数据同步的方法,包括:
当第一节点上有待同步数据以后,所述第一节点基于目标过滤器,根据所述第一节点上的所有区块链数据,生成第一状态向量,所述第一状态向量的数据长度小于所述第一节点上的所有区块链数据的数据长度;
所述第一节点向区块链网络发送第一同步消息,所述第一同步消息中携带第一可路由的标识前缀信息和所述第一状态向量,所述第一可路由的标识前缀用于指示所述第二节点,所述第二节点为所述区块链网络需要发送所述第一同步消息的节点;
所述第二节点接收区块链网络发送的第一同步消息;
所述第二节点根据所述第一状态向量和第二状态向量,确定所述第二节点的缺失数据,其中,所述第二状态向量是所述第二节点基于所述目标过滤器,根据所述第二节点上的所有区块链数据生成的;
所述第二节点获取所述第二节点的缺失数据。
根据第二方面,一种实施例中提供一种区块链数据同步的方法,包括:
当第一节点上有待同步数据以后,所述第一节点基于目标过滤器,根据所述第一节点上的所有区块链数据,生成第一状态向量,所述第一状态向量的数据长度小于所述第一节点上的所有区块链数据的数据长度;
所述第一节点向区块链网络发送第一同步消息,所述第一同步消息中携带第一可路由的标识前缀信息和所述第一状态向量,以使所述区块链网络向第二节点发送所述第一同步消息;所述第一同步消息用于使所述第二节点根据所述第一状态向量和第二状态向量,确定所述第二节点的缺失数据,并获取所述第二节点的缺失数据,其中,所述第二状态向量是所述第二节点基于所述目标过滤器,根据所述第二节点上的所有区块链数据生成的;其中,所述第二节点为所述第一可路由的标识前缀信息指示的区块链网络中的节点。
可选的,所述第一同步消息中还携带所述第一节点的地址信息,以使所述第二节点基于所述第一节点的地址信息,与所述第一节点建立连接;
所述第一节点与所述第二节点建立连接后,接收所述第二节点发送的第一数据获取请求,所述第一数据获取请求中携带所述第二节点的缺失数据的标识信息;
所述第一节点根据所述第二节点的缺失数据的标识信息,确定所述第二节点的缺失数据;
所述第一节点向所述第二节点发送所述第二节点的缺失数据。
可选的,所述方法还包括:
所述第一节点接收所述区块链网络发送的同步响应消息,所述同步响应消息中携带所述第一同步消息和所述第一节点的缺失数据的标识信息,所述第一节点的缺失数据的标识信息为所述第二节点根据所述第一状态向量和第二状态向量确定的;
所述第一节点向所述区块链网络发送第二数据获取请求,所述第二数据获取请求中携带所述第一节点的缺失数据的标识信息;
接收所述区块链网络发送的所述第一节点的缺失数据。
可选的,所述方法还包括:
所述第一节点接收所述区块链网络发送的第二同步消息,所述第二同步消息中携带第二可路由的标识前缀信息和第三状态向量,其中,所述第三状态向量是第三节点基于所述目标过滤器,根据所述第三节点上的所有区块链数据生成的;
所述第一节点根据所述第三状态向量和第一状态向量,确定所述第一节点的缺失数据的标识信息;
所述第一节点从所述区块链网络中获取所述第一节点的缺失数据。
根据第三方面,一种实施例中提供一种区块链数据同步的方法,包括:
所述第二节点接收区块链网络发送的第一同步消息,所述第一同步消息中携带第一可路由的标识前缀信息和第一状态向量,所述第一状态向量是第一节点基于目标过滤器,根据所述第一节点上的所有区块链数据生成的,所述第一状态向量的数据长度小于所述第一节点上的所有区块链数据的数据长度,所述第一可路由的标识前缀用于指示第二节点,所述第二节点为所述区块链网络需要发送所述第一同步消息的节点;
所述第二节点根据所述第一状态向量和第二状态向量,确定所述第二节点的缺失数据,其中,所述第二状态向量是所述第二节点基于所述目标过滤器,根据所述第二节点上的所有区块链数据生成的;
所述第二节点获取所述第二节点的缺失数据。
可选的,所述第一同步消息中还携带所述第一节点的地址信息;
所述第二节点获取所述第二节点的缺失数据,包括:
所述第二节点基于所述第一节点的地址信息,与所述第一节点建立连接;
所述第二节点向所述第一节点发送第一数据获取请求,所述第一数据获取请求中携带所述第二节点的缺失数据的标识信息;
所述第二节点接收所述第一节点发送的所述第二节点的缺失数据。
可选的,所述第二节点获取所述第二节点的缺失数据,包括:
所述第二节点向区块链网络发送第二数据获取请求,所述第二数据获取请求中携带所述第二节点的缺失数据的标识信息,所述第二数据获取请求用于指示所述区块链网络中的第三节点向所述第二节点发送所述缺失数据,所述第三节点为距离所述第二节点最近的且存储所述第二节点的缺失数据的节点;
所述第二节点接收所述第三节点发送的所述缺失数据。
可选的,所述第二节点根据所述第一状态向量和第二状态向量,确定所述第二节点的缺失数据,包括:
所述第二节点比较所述第一状态向量和第二状态向量,判断是否存在所述第二节点的缺失数据;
若存在所述第二节点的缺失数据,所述第二节点确定所述第二节点的缺失数据的标识信息。
根据第四方面,一种实施例中提供一种计算机可读存储介质,所述介质上存储有程序,所述程序能够被处理器执行以实现如上述第一方面、第二方面或者第三方面中任一项所述的方法。
依据上述实施例的区块链数据同步的方法和计算机可读存储介质,第一节点产生待同步数据以后,第一节点基于语义化命名标识,向区块链网络发送表示自身存储的目标区块链数据的第一状态向量和第一可路由的标识前缀信息,其中,目标区块链数据可以为待同步数据或者第一节点上的所有区块链数据,区块链网络根据第一可路由的标识前缀信息指示的第二节点,将第一同步信息发送给第二节点,第二节点上线后接收到第一同步消息,从而同步消息通过基于语义的命名寻址方式送达第二节点,不需要第一节点与第二节点之间建立连接,因此,减少了同步交互过程中的数据包大小,从而解脱发送方或者接收方维护数据同步状态的负担,使得节点的规模扩大的时候,不因为节点数目增加直接提高同步的负载。每个第二节点将第一状态向量和自身的第二状态向量进行比较,确定缺失数据,向区块链网络中获取第二节点的缺失数据,第一节点不用与第二节点直接交互、维护之间的数据一致状态,从而提高异步并行能力,第二节点之间的数据同步相互之间不产生干扰,不阻塞,另外,动态区块链网络的局部中断与丢包,甚至节点的离线的情况,都不影响整体同步任务的进展。第一同步消息中不是发送实际的数据内容本身,而是发送第一状态向量,可以降低整体区块链网络的带宽消耗,第二节点可以通过对第一状态向量和第二状态向量的比较的速度快,快速确定第二节点的缺失数据,第二节点再获取该缺失数据,从而在发送数据的过程中减少了发送数据长度,传输开销小,减少了发送数据的丢包率,提高了数据同步的成功率,尤其对于运行一段时间的区块链网络来说,区块数据较大,若直接发送实际的数据内容,将给数据同步过程带来很大的压力。对于第一节点仅增量发送数据状态的工作模式,充分利用了区块链历史数据已同步(无需再同步)的特性,降低了整体的计算规模;对于采用节点自发监听捕获数据同步消息的模式,可以降低整个同步过程中的状态维护的处理难度,提高并发性;基于可路由的标识前缀信息,可以提高数据获取方的灵活性,避免向唯一的数据源获取数据,可以就近获取同步数据,提高同步的成功率。基于语义化的可扩展的命名标识标记数据状态,提高了区块链网络对数据状态的自我感知、自我维护以及降低整体网络传输冗余开销的能力;另外,本申请实施例提供的方法可以处理不同链之间的数据同步需求,适应跨链与多链之间的数据一致性交互、交易与同步的需求。
具体实施方式
下面通过具体实施方式结合附图对本申请作进一步详细说明。其中不同实施方式中类似元件采用了相关联的类似的元件标号。在以下的实施方式中,很多细节描述是为了使得本申请能被更好的理解。然而,本领域技术人员可以毫不费力的认识到,其中部分特征在不同情况下是可以省略的,或者可以由其他元件、材料、方法所替代。在某些情况下,本申请相关的一些操作并没有在说明书中显示或者描述,这是为了避免本申请的核心部分被过多的描述所淹没,而对于本领域技术人员而言,详细描述这些相关操作并不是必要的,他们根据说明书中的描述以及本领域的一般技术知识即可完整了解相关操作。
另外,说明书中所描述的特点、操作或者特征可以以任意适当的方式结合形成各种实施方式。同时,方法描述中的各步骤或者动作也可以按照本领域技术人员所能显而易见的方式进行顺序调换或调整。因此,说明书和附图中的各种顺序只是为了清楚描述某一个实施例,并不意味着是必须的顺序,除非另有说明其中某个顺序是必须遵循的。
本文中为部件所编序号本身,例如“第一”、“第二”等,仅用于区分所描述的对象,不具有任何顺序或技术含义。而本申请所说“连接”、“联接”,如无特别说明,均包括直接和间接连接(联接)。
下面结合图1介绍本申请应用的一种区块链网络系统。
请参见图1,图1为本申请实施例提供的一种区块链网络系统的架构示意图,区块链网络系统包括多个节点(图1中示例性示出了6个节点,分别为节点101、节点102、节点103、节点104、节点105和节点106)和区块链网络107,多个节点通过区块链网络连接,参与系统运行,可以理解,多个节点中的任两个节点之间可以建立连接,例如,可以为对等式网络(peer-to-peer,简称P2P)连接,任两个节点之间也可以不建立连接,对此本申请不做限定。其中,多个节点可以为个人电脑、手机、车载装置、服务器和卫星等,对此本申请不做限定。区块链网络107可以为车联网、卫星网络等,对此本申请不做限定。
下面在图1所示系统的基础上,说明本申请的一种应用场景。节点101产生了一个数据,节点101需要将自身数据账本同步给位置在A区域的区块链网络系统中的节点(此时节点101可能并没有与位置在A区域的节点建立P2P连接)节点101可以向区块链网络107发送同步信息,其中,同步信息中携带有A区域对应的可路由的标识前缀(routable-prefix)信息,区块链网络107根据该可路由的标识前缀信息可以在网络中确定位置位于A区域的节点,此处假设为节点104、节点105和节点106,将第一同步消息发送给节点104、节点105和节点106。另外节点101发送的同步信息中并不直接携带数据账本,而是基于目标滤波器,将增量数据账本或者所有的数据账本进行压缩处理,得到状态标识,将该状态标识携带在第一同步消息中,从而在节点104、节点105和节点106分别接收到同步消息以后,根据其中携带的状态标识和自身基于相同的目标滤波器得到的状态标识进行比较,确定自身缺失数据,从区块链网络中获取该缺失数据,从而实现了数据同步。
需要说明的是,节点104、节点105和节点106可能在区块链网络发送同步消息时并不在线,假设节点104和节点105在线,节点106不在线。则节点104和节点105接收到同步消息以后进行数据同步处理;节点106在上线以后,相对于节点104和节点105延迟收到该同步消息,再进行数据同步处理。
在本申请实施例中,第一节点产生待同步数据以后,第一节点向区块链网络发送表示自身存储的所有区块链数据或者待同步数据的第一状态向量,以及第二节点的第一可路由的标识前缀信息,区块链网络根据第一可路由的标识前缀信息的指示,确定第二节点,从而同步消息通过基于语义的命名寻址方式送达第二节点,不需要第一节点与第二节点之间建立连接,第二节点通过监听的方式,接收到第一同步消息以后,将第一状态向量和自身的第二状态向量进行比较,确定缺失数据,向区块链网络中获取第二节点的缺失数据,从而实现数据同步。对于第一节点仅增量发送数据状态的工作模式,充分利用了区块链历史数据已同步(无需再同步)的特性,降低了整体的计算规模;对于采用节点自发监听捕获数据同步消息的模式,可以降低整个同步过程中的状态维护的处理难度,提高并发性;基于可路由的标识前缀信息,可以提高数据获取方的灵活性,避免向唯一的数据源获取数据,可以就近获取同步数据,提高同步的成功率。基于语义化的可扩展的命名标识标记数据状态,提高了区块链网络对数据状态的自我感知、自我维护以及降低整体区块链网络传输冗余开销的能力。
下面以具体的实施例进行详细说明本申请的技术方案。
实施例一:
请参考图2,图2为本申请实施例提供的一种区块链数据同步的方法的交互示意图,如图2所示,本实施例中的第一节点可以为上述图1所示的区块链网络系统中的任一节点,例如可以为节点101,本实施例中的区块链网络可以为上述图1所示的区块链网络系统中的区块链网络107,本实施例中的第二节点可以为,本实施例提供的方法包括如下步骤:
S201、第一节点确定有待同步数据以后,基于目标过滤器,根据第一节点上的目标区块链数据的标识信息,生成第一状态向量。
其中,待同步数据为未进行同步的数据,且为第一节点产生的。可以理解,待同步数据并不包括除第一节点以外的其他节点产生的,并同步给第一节点的数据。
其中,目标区块链数据为待同步数据或者第一节点的所有区块链数据。
第一节点上的所有区块链数据为与待同步数据相同类型的所有第一节点上存储的区块链数据。
在一些场景中,区块链历史数据通常已同步,因此,第一节点产生待同步数据时,在第一同步消息中可以同步待同步数据,从而第一节点仅增量发送数据,降低了计算规模。在另一些场景中,待同步数据需要跨链同步,而第一节点内的所有区块链数据跨链同步时无需同步,则第一同步消息中可以同步待同步数据,从而保证数据安全性,另外降低了计算规模。
其中,目标过滤器用于对数据进行处理,得到数据的状态向量,从而实现了对数据的压缩。通过比较两个经过目标过滤器处理得到的状态向量,能够确定两个数据集合之间的差异元素集合。另外,目标过滤器为一种可逆过滤器,即获取到差异元素集合以后,可以逆向处理,得到实际的数据值。从而,第一状态向量的数据长度小于第一节点上的目标区块链数据的数据长度。目标过滤器可以预先存储在区块链网络的所有节点中。
示例性的,目标过滤器可以为可逆布隆过滤器(Invertible Bloom Filters,简称IBF)或者可逆的布谷鸟过滤器等。其中,IBF可以快速计算出2个数据集合的差异集合,从而适用于数据同步。可逆的布谷鸟过滤器可以降低碰撞的概率,空间利用率高,也可以提高查询效率,充分利用计算资源。
其中,第一状态向量为根据第一节点上的目标区块链数据的标识信息进行处理得到的,并不是根据目标区块链数据得到的,可以理解目标区块链数据的标识信息的长度通常小于目标区块链数据。例如,区块链块数据的标识信息可以为该块数据的块头数据信息。其中,块头数据信息包括区块哈希值和区块高度,可以唯一标识一个块数据。
S202、第一节点向区块链网络发送第一同步消息。
其中,第一同步消息中携带第一可路由的标识前缀信息和第一状态向量。
其中,第一可路由的标识前缀信息用于在命名寻址过程中指示第二节点的名称。例如,可以为位置域,比如,A区域,B省等,也可以为X大学或者Y单位等。第一可路由的标识前缀信息是第一同步消息中可被路由操作的信息。可路由的标识前缀信息可以灵活表达不同语义的不指定类型的区块链数据传输,甚至与区块链外设备进行数据交互,包括交易数据、日志数据、身份认证数据等。
需要说明的是,在命名寻址中,通过命名标识“灵活”路由,即命名寻址是基于名字,而不绑定节点在网络中的位置,例如,在车联网的网络拓扑是变化的,从而可以将信息送达命名标识指示的节点。其中,区块链网络可以采用智能生态网络(Intelligent EcoNetworking,简称 IEN)的系统架构。
预先在区块链网络中构建所有节点的路由,节点的路由由名称构建,从而实现节点之间消息的转发,从而实现区块链网络根据第一可路由的标识前缀信息发送第一同步消息。
可选的,可以在区块链同步协议包上增加了一个语义标识前缀,即一个字符串或者编码标记修饰第一状态向量的属性,可以表达的语义上的含义可以包括但不限于:第一可路由的标识前缀信息(例如,名字域,可以实现多对多的同步策略,提高数据同步的灵活性)、数据类别、数据优先级、用户分组、地理划分编码等。
可选的,该前缀签名域可以增加加密签名机制,从而提高安全性。
数据结构:采用不同的数据结构来表达数据集合,与数据本身形成一一映射缩影或者摘要的关系,从而形成同步命名/标识的等价状态一致关系。
可选的,对于区块链网络中的可路由的标识前缀信息,可以通过路由注册等方式进行维护。示例性的,当某一节点更换路由以后,节点提交路由更新信息“标识为该节点”的包,发送到网络中告知网络。
可选的,第一节点可以以广播或者组播的方式向区块链网络发送第一同步消息。
S203、区块链网络向第二节点发送第一同步消息。
其中,第二节点为第一可路由的标识前缀信息指示的区块链网络中的节点。
区块链网络中路由器通过注册或者算法计算出第一同步消息应该向哪里转发。
可选的,第一同步消息可以采用类型-长度-值(Type-Length-Value,简称TLV)格式。
S204、第二节点根据第一状态向量和第二状态向量,判断是否存在第二节点的缺失数据。
若存在第二节点的缺失数据则继续执行S205。若不存在第二节点的缺失数据,则不进行处理。
其中,第一状态向量中包括第二节点的缺失数据,第二状态向量中不包括第二节点的缺失数据。
其中,第二状态向量是第二节点基于目标过滤器,根据第二节点上的所有区块链数据生成的。第二节点使用的目标过滤器与第一节点使用的目标过滤器相同,从而第一状态向量和第二状态向量的数据结构相同,第二节点能够对第一状态向量和第二状态向量进行比较,确定第二节点的缺失数据。
其中,可以确定第二节点的缺失数据对应的标识,例如,同步数据为区块数据,可以确定第二节点的缺失数据的区块头。
S205、第二节点获取第二节点的缺失数据。
可选的,S204中第二节点确定存在第二节点的缺失数据,可以确定第二节点的缺失数据的标识信息,在步骤S205获取第二节点的缺失数据的步骤中,可以通过该第二节点的缺失数据的标识信息获取到。
可选的,第二节点可以从第一节点获取第二节点的缺失数据;第二节点也可以从区块链网络中距离第二节点距离最近的节点获取第二节点的缺失数据。
可选的,第二节点获取到第二节点的缺失数据以后,增量或者替换更新本地的数据集,达到相应时期的最新同步状态。
本实施例中,第一节点确定自身产生了待同步数据以后,基于目标过滤器,对第一节点自身所有存储的区块链数据进行处理,生成比所有区块链数据的数据长度小的第一状态向量。每个区块链网络系统中的节点均可以向区块链网络中发送消息,也可以侦听区块链网络中的消息。第一节点向区块链网络发送第一同步消息,第一同步消息中携带第一可路由的标识前缀信息和第一状态向量,区块链网络中的节点侦听区块链网络中的消息,若为第一可路由的标识前缀信息所指示的第二节点,则将侦听到该第一同步消息。第二节点比较第一状态向量和基于目标过滤器得到自身的第二状态向量,确定第二节点中相比于第一节点的缺失数据。第二节点获取该缺失数据。从而完成了数据同步。
可以理解,第二节点可能有一个或多个,因此该同步过程全部完成可能与第二节点的上线时间有关,最后一个上线的第二节点获取到缺失数据时,该同步过程完成。
本实施例,依据上述实施例的区块链数据同步的方法和计算机可读存储介质,第一节点产生待同步数据以后,第一节点基于语义化命名标识,向区块链网络发送表示自身存储的目标区块链数据的第一状态向量和第一可路由的标识前缀信息,其中,目标区块链数据可以为待同步数据或者第一节点上的所有区块链数据,区块链网络根据第一可路由的标识前缀信息指示的第二节点,将第一同步信息发送给第二节点,第二节点上线后接收到第一同步消息,从而同步消息通过基于语义的命名寻址方式送达第二节点,不需要第一节点与第二节点之间建立连接,因此,减少了同步交互过程中的数据包大小,从而解脱发送方或者接收方维护数据同步状态的负担,使得节点的规模扩大的时候,不因为节点数目增加直接提高同步的负载。每个第二节点将第一状态向量和自身的第二状态向量进行比较,确定缺失数据,向区块链网络中获取第二节点的缺失数据,第一节点不用与第二节点直接交互、维护之间的数据一致状态,从而提高异步并行能力,第二节点之间的数据同步相互之间不产生干扰,不阻塞,另外,动态区块链网络的局部中断与丢包,甚至节点的离线的情况,都不影响整体同步任务的进展。第一同步消息中不是发送实际的数据内容本身,而是发送第一状态向量,可以降低整体区块链网络的带宽消耗,第二节点可以通过对第一状态向量和第二状态向量的比较的速度快,快速确定第二节点的缺失数据,第二节点再获取该缺失数据,从而在发送数据的过程中减少了发送数据长度,传输开销小,减少了发送数据的丢包率,提高了数据同步的成功率,尤其对于运行一段时间的区块链网络来说,区块数据较大,若直接发送实际的数据内容,将给数据同步过程带来很大的压力。对于第一节点仅增量发送数据状态的工作模式,充分利用了区块链历史数据已同步(无需再同步)的特性,降低了整体的计算规模;对于采用节点自发监听捕获数据同步消息的模式,可以降低整个同步过程中的状态维护的处理难度,提高并发性;基于可路由的标识前缀信息,可以提高数据获取方的灵活性,避免向唯一的数据源获取数据,可以就近获取同步数据,提高同步的成功率。基于语义化的可扩展的命名标识标记数据状态,提高了区块链网络对数据状态的自我感知、自我维护以及降低整体网络传输冗余开销的能力;另外,本申请实施例提供的方法可以处理不同链之间的数据同步需求,适应跨链与多链之间的数据一致性交互、交易与同步的需求。
进一步地,第一同步消息中还可以包含其他的信息。下面进行详细描述。
可选的,第一同步消息还可以包括协议标识信息。
协议标识信息为当前发送同步消息所用的协议,可以为预先定义的一种协议。
可选的,第一同步消息还可以包括第一节点的标识信息。
第一节点的标识信息可以为第一节点的命名标识的信息,即在区块链网络系统中,每个节点对应一个标识,该标识信息可以为数字、字母或者字符串等形式。
例如,第一节点的标识信息可以为第一节点的用户标识信息(UserIdentification,简称UID)。区块链网络中的每个在线节点可以维护全局的在线节点状态信息表,在线节点状态信息表中包含在线节点的UID。
可选的,第一同步消息还可以包括同步操作符。
其中,同步操作符用于指示当前消息用于同步数据。例如,可以用sync表示。
可选的,第一同步消息还可以包括随机数。
由于第一同步消息在网络中转发时,某一个节点可能收到不同节点转发的相同的第一同步消息,因此,可以在第一同步消息中增加随机数字段,若接收的第一同步消息中随机数字段内的随机数相同,则可以认为是相同的第一同步消息,则接收的第一同步消息可以不进行处理。
可选的,第一同步消息还可以包括第二节点的标识信息。
根据第一同步消息中携带的第二节点的用户标识信息,直接将第一同步消息送达至第二节点。
例如,第二节点的标识信息可以为第二节点的UID。
下面以具体的实例介绍一种第一同步消息的报文格式:
“协议标识信息://可路由的标识前缀信息/第一节点的UID/操作符/参数字段”。
例如第一同步消息的报文为:“MyProtocol://北京大学/张三的UID/sync/update-CF”。该第一同步消息的报文的含义为:向“北京大学“所有用户发送同步消息,update-CF为张三的区块链数据使用目标过滤器得到的第一状态向量。
另外,第一同步消息在上述报文格式基础上,后面可附加{第一节点的IP地址}/{第二节点的UID集合}。其表示第一节点IP地址和指定的一部分第二节点的UID。
在上述实施例的基础上,进一步地,S201可以包括如下步骤1-步骤4:
步骤1、第一节点获取区块链块头数据信息,构建“块头唯一命名标识”,例如,该区块:“/区块哈希值/区块高度”。
其中,区块哈希值和区块高度,一般就是可以唯一标识一个区块,这种命名唯一性适用于在命名寻址中,示例性的,在第二节点获取第二节点的缺失数据时,可以基于区块块头数据信息获取到该数据。
步骤2、第一节点根据“块标识”,利用哈希函数,计算出相应唯一定长的哈希值。
其中,哈希函数可以为安全散列算法(SHA256)、信息摘要算法(md5)或者安全散列算法1(sha1)等,对此本申请不做限定。相应的,计算得到的哈希值也可以称为SHA256数组。
哈希函数为SHA256,避免被碰撞或者被破解。
从而,将非结构化的字符串转变为可排序、可快速比对的数值。
其中,对于变长的字符串,首先需要将每个字符串散列到一个固定长度的数字(KeyID)中。保留一个映射表,以便将每个KeyID与原始字符串关联起来。可以使用KeyID执行滤波器操作。相应的,检索元素需要首先从状态向量获得KeyID,然后使用KeyID在映射表中查找相应的名称。
步骤3、第一节点生成一维数组。
第一节点可以在内存中,基于目标滤波器,生成哈希函数、概率型的一维数组结构,一维数组的大小可以为SHA256数组长度的1.5倍-2倍。
步骤4、生成第一状态向量。
根据多个块的“块标识”,按照过滤器哈希函数逐个插入到过滤器中。从而生成带有元素值的第一状态向量。
在上述实施例的基础上,进一步地,在S202之前还包括如下步骤:
第一节点生成第一同步消息。
下面介绍本申请实施例提供的一种第一同步消息的生成方式。
第一节点生成第一同步消息可以包括如下步骤:
步骤5、在第一状态向量前增加报文头前缀。
其中,报文头前缀可以为第一可路由的标识前缀信息、UID或者其它字段组。
第一可路由的标识前缀信息可以为域名称,例如,报文为“/深圳/001/Update-CF”其中,001为第一节点的UID,Update-CF为第一状态向量。
步骤6、在第一同步消息报文中添加“操作符”字段、“随机数”字段,生成” 第一同步消息报文。
例如,报文为“/深圳/001/Sync/随机数/Update-CF”,其中,Sync为操作符。
在一些实施例中,步骤S205中,第二节点可以有多种方式获取到缺失数据。
一种可能的实现方式中,由于第一同步消息为第一节点发送的,第一节点中存储有该第二节点的缺失数据,因此,第一节点在生成的第一同步消息中携带第一节点的地址信息,使得第二节点可以直接与第一节点建立连接,从而从第一节点获取缺失数据。下面以图3所示具体的实施例进行详细说明。
请参见图3,图3为本申请实施例提供的另一种区块链数据同步的方法的交互示意图,图3是在图2所示实施例的基础上,进一步地,如图3所示,第一同步消息中还携带第一节点的地址信息。本实施例提供的方法S205可以包括如下步骤:
S2051、第二节点基于第一节点的地址信息,与第一节点建立连接。
其中,第一数据获取请求中携带第二节点的缺失数据的标识信息。
其中,第一节点的地址信息为第一节点的网络地址,通过该地址信息可以与第一节点建立连接,从而第二节点和第一节点可以进行直接通信。
可选的,第一节点的地址信息可以为第一节点的IP地址。
S2052、第二节点向第一节点发送第一数据获取请求。
其中,第一数据获取请求中携带第二节点的缺失数据的标识信息。
示例性的,第二节点的缺失数据的标识信息,可以是区块标识,例如区块头。
S2053、第一节点根据第二节点的缺失数据的标识信息,确定第二节点的缺失数据。
S2054、第一节点向第二节点发送第二节点的缺失数据。
由于第一节点和第二节点已经建立了连接,因此第一节点直接通过之前建立的连接将第二节点的缺失数据发送给第二节点。
本实施例,在第一同步消息中携带了第一节点的地址信息时,第二节点可以直接与第一节点建立连接,从第一节点中获取缺失数据,从而完成了数据同步。
另一种可能的实现方式中,由于第一节点与第二节点实际的距离可能较远,或者第二节点在第一同步消息发出后一段时间才上线。区块链网络中很多节点可能已经跟第一节点同步了该缺失数据,也就是区块链网络中存在除第一节点以外的其他节点也已经存储了该缺失数据,因此,第二节点可以直接向区块链网络获取该缺失数据,区块链网络中距离第二节点近的第三节点将该缺失数据直接发送给第二节点。下面以图4所示具体的实施例进行详细说明。
请参见图4,图4为本申请实施例提供的另一种区块链数据同步的方法的交互示意图,图4是在图2所示实施例的基础上,进一步地,如图4所示,第一同步消息中还携带第一节点的地址信息,以使第二节点基于第一节点的地址信息,与第一节点建立连接。本实施例提供的方法S205可以包括如下步骤:
S205a、第二节点向区块链网络发送第二数据获取请求。
其中,第二数据获取请求中携带第二节点的缺失数据的标识信息。
可选的,第二数据获取请求中还也携带第二节点的地址信息。
其中,第二节点的地址信息为第二节点的网络地址,通过该地址信息可以使得区块链网络中的节点与第二节点建立连接,从而进行直接通信。
可选的,第二节点的地址信息可以为第二节点的IP地址。
S205b、区块链网络确定第三节点。
其中,第三节点为距离第二节点最近的且存储第二节点的缺失数据的节点。
区块链网络可以在第二数据获取请求流转的过程中确定除第三节点。
S205c、第三节点与第二节点建立连接。
第三节点可以与第二节点建立连接,例如,第三节点可以与第二节点建立P2P连接。
其中,第一节点的地址信息为第一节点的网络地址,通过该地址信息可以与第一节点建立连接,从而第三节点和第二节点可以进行通信。
S205d、第三节点向第二节点发送第二节点的缺失数据。
由于第三节点和第二节点已经建立了连接,因此第三节点直接通过之前建立的连接将第二节点的缺失数据发送给第二节点。
本实施例,基于命名标识数据块,第二节点向区块链网络中距离第二节点最近的第三节点获取缺失数据,减轻了第一节点数据发送压力,并且提高了数据同步效率,从而实现非中心同步。
再一种可能的实现方式中,在步骤S2051中,第二节点可以根据第一节点的地址信息,与第一节点建立连接。若第二节点与第一节点建立连接成功,则继续执行S2052;在一些实施例中,第二节点与第一节点建立连接时,第一节点已经下线,或者第一节点网络不佳等情况,导致第二节点未能与第一节点建立连接,则第二节点可以继续执行S205a的步骤。
在一些实施例中,目标区块链数据为第一节点的所有区块链数据,也就是第一状态向量是根据第一节点的所有区块链数据的标识信息得到的,步骤S204中,第二节点比较第一状态向量和第二状态向量可以获得差异数据集,也就是说,比较结果不仅可以确定第二节点的缺失数据,也可以确定第二节点中存储的而第一节点中并未存储的第一节点的缺失数据。若存在第一节点的缺失数据,第二节点可以向第一节点发送同步响应消息。下面以具体的实施例进行详细说明。
请参见图5,图5为本申请实施例提供的另一种区块链数据同步的方法的交互示意图,图5是在图2-图4任一所示实施例的基础上,进一步地,如图5所示。本实施例提供的方法,S201中,目标区块链数据为第一节点的所有区块链数据,S204可以包括如下步骤:
S2041、第二节点比较第一状态向量和第二状态向量,得到差异数据集。
其中,差异数据集中包含第一状态向量和第二状态向量中具有差异的数据。
S2042、第二节点根据差异数据集判断是否存在第二节点的缺失数据。
S2041之后还可以包括如下步骤:
S206、第二节点根据差异数据集判断是否存在第一节点的缺失数据。
其中,第一状态向量中不包含第一节点的缺失数据,第二状态向量中包含第一节点的缺失数据。
若存在第一节点的缺失数据,继续执行S207。若不存在第一节点的缺失数据,则不进行后续处理。
可以理解,S2042和S206的执行没有先后顺序,可以先执行S2042,再执行S206;也可以先执行S206,再执行S2042;还可以同时执行S2042和S206,本申请对此不做限定。
S207、第二节点向区块链网络发送同步响应消息。
其中,同步响应消息中携带第一同步消息和第一节点的缺失数据的标识信息,第一节点的缺失数据的标识信息为第二节点根据第一状态向量和第二状态向量确定的。
S208、区块链网络根据同步响应消息确定第一节点。
在区块链网络交互协议中,预先定义一个消息报文的开头与另一个询问消息相同,则该消息报文为该询问消息的响应消息,区块链网络将该消息报文按照询问消息发送的路径返回。因此,同步响应消息中携带第一同步消息,即指示区块链网络按照第一同步消息发送的路径返回该同步响应消息。该同步响应消息为第一同步消息的响应消息,区块链网络则按照发送第一同步消息的路径返回同步响应消息。
示例性的,同步响应消息可以为:“协议标识信息://第一同步消息报文/第二节点的UID/第一节点的缺失数据的标识信息”。区块链网络接收到该同步响应消息报文,其前面字段与第一同步消息报文一致,确定该同步响应消息报文为第一同步消息的响应,需要按照第一同步消息发送的路径将同步响应消息报文返回给发送节点,也就是第一节点。
S209、区块链网络向第一节点发送同步响应消息。
S210、第一节点获取第一节点的缺失数据。
S210的一种可能的实现方式中,第一节点可以向区块链网络获取数据。
第一节点向区块链网络发送第二数据获取请求,第二数据获取请求中携带第一节点的缺失数据的标识信息;第二数据获取请求用于请求获取第一节点的缺失数据。区块链网络在区块链中寻找距离第一节点最近的第四节点,第四节点将该第一节点的缺失数据发送给第一节点。
S210的另一种可能的实现方式中,若同步响应消息中包含第二节点的地址信息,第一节点可以直接与第二节点建立连接获取该第一节点的缺失数据。
第一节点根据第二节点的地址信息,与第二节点建立连接以后,向第二节点发送第三数据获取请求。
其中,第三数据获取请求中携带第一节点的缺失数据的标识信息;第三数据获取请求用于请求获取第一节点的缺失数据。
本实施例,第二节点确定出第一节点的缺失数据以后,无需第二节点与第一节点建立连接,通过区块链网络通知第一节点,使得第一节点可以快速获知自身缺失数据,并获取缺失的数据,从而实现区块链网络中的数据同步。
可选的,在区块链网络中可以增加集中式或者局部集中的代理节点,也可以在传输网络中加入缓存或者中间代理节点缓存副本数据,提高鲁棒性。
实施例二:
本申请实施例提供一种区块链数据同步的方法,本实施的方法由第一节点执行,本实施例的方法包括:
当第一节点上有待同步数据以后,第一节点基于目标过滤器,根据第一节点上的目标区块链数据的标识信息,生成第一状态向量,目标区块链数据为待同步数据或者第一节点的所有区块链数据,第一状态向量的数据长度小于目标区块链数据的标识信息的数据长度;
第一节点向区块链网络发送第一同步消息,第一同步消息中携带第一可路由的标识前缀信息和第一状态向量,以使区块链网络向第二节点发送第一同步消息;第一同步消息用于使第二节点根据第一状态向量和第二状态向量,确定第二节点的缺失数据,并获取第二节点的缺失数据,其中,第二状态向量是第二节点基于目标过滤器,根据第二节点上的所有区块链数据生成的;其中,第二节点为第一可路由的标识前缀信息指示的区块链网络中的节点。
可选的,第一同步消息中还携带第一节点的地址信息,以使第二节点基于第一节点的地址信息,与第一节点建立连接;
第一节点与第二节点建立连接后,接收第二节点发送的第一数据获取请求,第一数据获取请求中携带第二节点的缺失数据的标识信息;
第一节点根据第二节点的缺失数据的标识信息,确定第二节点的缺失数据;
第一节点向第二节点发送第二节点的缺失数据。
可选的,目标区块链数据为第一节点的所有区块链数据,方法还包括:
第一节点接收区块链网络发送的同步响应消息,同步响应消息中携带第一同步消息和第一节点的缺失数据的标识信息,第一节点的缺失数据的标识信息为第二节点根据第一状态向量和第二状态向量确定的;
第一节点向区块链网络发送第二数据获取请求,第二数据获取请求中携带第一节点的缺失数据的标识信息;
第一节点接收区块链网络发送的第一节点的缺失数据。
可选的,方法还包括:
第一节点接收区块链网络发送的第二同步消息,第二同步消息中携带第二可路由的标识前缀信息和第三状态向量,其中,第三状态向量是第三节点基于目标过滤器,根据第三节点上的所有区块链数据生成的;
第一节点根据第三状态向量和第一状态向量,确定第一节点的缺失数据的标识信息;
第一节点从区块链网络中获取第一节点的缺失数据。
本实施例提供的方法的实现原理和有益效果与实施例一类似,此处不再赘述。
实施例三:
本申请实施例提供一种区块链数据同步的方法,本实施的方法由第二节点执行,本实施例的方法包括:
第二节点接收区块链网络发送的第一同步消息,第一同步消息中携带第一可路由的标识前缀信息和第一状态向量,第一状态向量是第一节点基于目标过滤器,根据第一节点上的目标区块链数据的标识信息生成的,目标区块链数据为待同步数据或者第一节点的所有区块链数据,第一状态向量的数据长度小于目标区块链数据的标识信息的数据长度,第一可路由的标识前缀用于指示第二节点,第二节点为区块链网络需要发送第一同步消息的节点;
第二节点根据第一状态向量和第二状态向量,确定第二节点的缺失数据,其中,第二状态向量是第二节点基于目标过滤器,根据第二节点上的所有区块链数据生成的;
第二节点获取第二节点的缺失数据。
可选的,第一同步消息中还携带第一节点的地址信息;
第二节点获取第二节点的缺失数据,包括:
第二节点基于第一节点的地址信息,与第一节点建立连接;
第二节点向第一节点发送第一数据获取请求,第一数据获取请求中携带第二节点的缺失数据的标识信息;
第二节点接收第一节点发送的第二节点的缺失数据。
可选的,第二节点获取第二节点的缺失数据,包括:
第二节点向区块链网络发送第二数据获取请求,第二数据获取请求中携带第二节点的缺失数据的标识信息,第二数据获取请求用于指示区块链网络中的第三节点向第二节点发送缺失数据,第三节点为距离第二节点最近的且存储第二节点的缺失数据的节点;
第二节点接收第三节点发送的缺失数据。
可选的,目标区块链数据为第一节点的所有区块链数据,第二节点根据第一状态向量和第二状态向量,确定第二节点的缺失数据,包括:
第二节点比较第一状态向量和第二状态向量,判断是否存在第二节点的缺失数据;
若存在第二节点的缺失数据,第二节点确定第二节点的缺失数据的标识信息。
本实施例提供的方法的实现原理和有益效果与实施例一类似,此处不再赘述。
实施例四:
本申请实施例提供一种计算机可读存储介质,介质上存储有程序,程序能够被处理器执行以实现如实施例一中任一项的区块链数据同步的方法。
本领域技术人员可以理解,上述实施方式中各种方法的全部或部分功能可以通过硬件的方式实现,也可以通过计算机程序的方式实现。当上述实施方式中全部或部分功能通过计算机程序的方式实现时,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:只读存储器、随机存储器、磁盘、光盘、硬盘等,通过计算机执行该程序以实现上述功能。例如,将程序存储在设备的存储器中,当通过处理器执行存储器中程序,即可实现上述全部或部分功能。另外,当上述实施方式中全部或部分功能通过计算机程序的方式实现时,该程序也可以存储在服务器、另一计算机、磁盘、光盘、闪存盘或移动硬盘等存储介质中,通过下载或复制保存到本地设备的存储器中,或对本地设备的系统进行版本更新,当通过处理器执行存储器中的程序时,即可实现上述实施方式中全部或部分功能。
以上应用了具体个例对本申请进行阐述,只是用于帮助理解本申请,并不用以限制本申请。对于本申请所属技术领域的技术人员,依据本申请的思想,还可以做出若干简单推演、变形或替换。