CN117335956A - 基于区块链的数据处理方法、装置、设备及可读存储介质 - Google Patents

基于区块链的数据处理方法、装置、设备及可读存储介质 Download PDF

Info

Publication number
CN117335956A
CN117335956A CN202311305096.8A CN202311305096A CN117335956A CN 117335956 A CN117335956 A CN 117335956A CN 202311305096 A CN202311305096 A CN 202311305096A CN 117335956 A CN117335956 A CN 117335956A
Authority
CN
China
Prior art keywords
block
node
synchronization
blocks
information
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
Application number
CN202311305096.8A
Other languages
English (en)
Inventor
聂凯轩
王宗友
朱耿良
刘区城
刘汉卿
廖志勇
黄杨峻
时一防
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Tencent Technology Shenzhen Co Ltd
Original Assignee
Tencent Technology Shenzhen Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Tencent Technology Shenzhen Co Ltd filed Critical Tencent Technology Shenzhen Co Ltd
Priority to CN202311305096.8A priority Critical patent/CN117335956A/zh
Publication of CN117335956A publication Critical patent/CN117335956A/zh
Pending legal-status Critical Current

Links

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/50Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols using hash chains, e.g. blockchains or hash trees
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L63/00Network architectures or network communication protocols for network security
    • H04L63/12Applying verification of the received information
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/10Protocols in which an application is distributed across nodes in the network
    • H04L67/1095Replication or mirroring of data, e.g. scheduling or transport for data synchronisation between network nodes
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/40Network security protocols

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Computer Hardware Design (AREA)
  • Computing Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本申请公开了一种基于区块链的数据处理方法、装置、设备及可读存储介质,方法包括:在针对区块链进行区块同步时,获取节点的同步进度列表;同步进度列表记录有节点针对区块链的第一区块同步进度;同步进度列表中包含节点待同步的N个区块的区块信息;N为正整数;在同步进度列表包含的N个区块信息中选择M个区块信息;M为小于或等于N的正整数;从区块链上同步M个区块信息所指示的M个区块,基于M个区块的同步,更新同步进度列表得到第一更新同步进度列表;第一更新同步进度列表记录有节点针对区块链的第二区块同步进度。采用本申请,可以提升区块链数据的同步效率。

Description

基于区块链的数据处理方法、装置、设备及可读存储介质
技术领域
本申请涉及计算机技术领域,尤其涉及一种基于区块链的数据处理方法、装置、设备及可读存储介质。
背景技术
区块链是一种分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式,主要用于对数据按时间顺序进行整理,并加密成账本,使其不可被篡改和伪造,同时可进行数据的验证、存储和更新。
对于区块链中交易数据被写入账本的过程可为:区块链中的核心节点接收到交易数据后,会将交易数据添加至交易池(内存池)内,每个核心节点可以从交易池中获取交易数据打包生成区块并发送至其他核心节点进行共识校验,在共识校验通过后即可将新生成的区块添加至区块链中(也就是被写入本地账本中)。其中,区块链中的核心节点(共识节点),均具有与其对应的节点标识,以便可以根据其他核心节点的节点标识,将生成的区块广播至区块链中的各个核心节点,使得区块链中全部核心节点所存储的数据均是一致的。
而为了使得区块链中各个核心节点存储的数据一致,一旦区块链中新加入了某个核心节点或某个核心节点存储的数据落后于其他核心节点,该新加入的核心节点或数据落后的核心节点会从区块链上的其他核心节点获取数据,以拥有最新的区块相关的数据,即区块链中的核心节点需要进行同步以确保彼此之间共享有相同的区块链数据,由此才能够验证交易、执行智能合约和维护一致的状态。
相关技术中,对于某个落后的节点而言,其在基于区块链进行区块同步的过程中,节点会按照区块高度从小到大的顺序将区块逐个进行同步,若该节点出现异常情况(如出现宕机的情况),那么该节点会中断区块的同步,而在节点恢复正常继续同步时,该节点会重新从第一个区块开始进行同步,这会使得已经同步的区块重复同步,由此增大同步时间,影响同步效率。
发明内容
本申请实施例提供一种基于区块链的数据处理方法、装置、设备及可读存储介质,可以提升区块链数据的同步效率。
本申请实施例一方面提供了一种基于区块链的数据处理方法,包括:
在针对区块链进行区块同步时,获取节点的同步进度列表;同步进度列表记录有节点针对区块链的第一区块同步进度;同步进度列表中包含节点待同步的N个区块的区块信息;N为正整数;
在同步进度列表包含的N个区块信息中选择M个区块信息;M为小于或等于N的正整数;
从区块链上同步所述M个区块信息所指示的M个区块,基于M个区块的同步,更新同步进度列表得到第一更新同步进度列表;第一更新同步进度列表记录有节点针对区块链的第二区块同步进度。
本申请实施例一方面提供了一种基于区块链的数据处理装置,包括:
列表获取模块,用于在针对区块链进行区块同步时,获取节点的同步进度列表;同步进度列表记录有节点针对区块链的第一区块同步进度;同步进度列表中包含节点待同步的N个区块的区块信息;N为正整数;
信息选择模块,用于在同步进度列表包含的N个区块信息中选择M个区块信息;M为小于或等于N的正整数;
区块同步模块,用于从区块链上同步M个区块信息所指示的M个区块;
第一列表更新模块,用于基于M个区块的同步,更新同步进度列表得到第一更新同步进度列表;第一更新同步进度列表记录有节点针对区块链的第二区块同步进度。
在一个实施例中,区块同步模块从区块链上同步M个区块信息所指示的M个区块的具体方式,包括:
从区块链上获取M个区块信息中每个区块信息指示的区块,得到M个区块;
在区块链中获取M个区块中每个区块包含的区块数据,得到M个区块数据;
将M个区块数据进行并行同步。
在一个实施例中,同步进度列表存储于节点的本地数据库中,同步进度列表包含的N个区块信息中的每个区块信息是指一个待同步的区块的区块头信息;M个区块中每个区块包含的区块数据均未包含区块头信息。
在一个实施例中,第一列表更新模块基于M个区块的同步,更新同步进度列表得到第一更新同步进度列表的具体方式,包括:
基于M个区块的同步,将同步进度列表中包含的M个区块信息进行标记;标记后的M个区块信息用于表征节点已同步区块链中的M个区块;
将包含标记后的M个区块信息的同步进度列表确定为第一更新同步进度列表。
在一个实施例中,同步进度列表是在第一轮询时刻时,通过轮询区块链中包含的区块所确定的
在第一列表更新模块基于M个区块的同步,更新同步进度列表得到第一更新同步进度列表之后,基于区块链的数据处理装置还包括:
组件调用模块,用于在到达第二轮询时刻时,调用列表维护组件;第二轮询时刻是指第一轮询时刻的下一个针对区块链的轮询时刻;
区块轮询模块,用于通过列表维护组件轮询区块链在第二轮询时刻时包含的区块;
区块比较模块,用于将节点的本地账本在第二轮询时刻时包含的区块,与区块链在第二轮询时刻时包含的区块进行比较,确定节点在第二轮询时刻时的待同步的Q个区块;
第二列表更新模块,用于根据节点在第二轮询时刻时的待同步的Q个区块,对第一更新同步进度列表进行更新,得到第二更新同步进度列表。
在一个实施例中,第二列表更新模块根据节点在第二轮询时刻时的待同步的Q个区块,对第一更新同步进度列表进行更新,得到第二更新同步进度列表的具体方式,包括:
获取第一更新同步进度列表中包含的待同步的W个区块的区块信息,将W个区块的区块信息均确定为第一待同步区块信息,得到W个第一待同步区块信息;
将节点在第二轮询时刻时的待同步的Q个区块,均确定为第一待同步区块;
将每个第一待同步区块的区块信息,确定为节点在第二轮询时刻时的第一待同步区块信息,得到Q个第二待同步区块信息;
根据Q个第二待同步区块信息与W个第一待同步区块信息,对第一更新同步进度列表进行更新,得到第二更新同步进度列表。
在一个实施例中,第二列表更新模块根据Q个第二待同步区块信息与W个第一待同步区块信息,对第一更新同步进度列表进行更新,得到第二更新同步进度列表的具体方式,包括:
将W个第一待同步区块信息所组成的集合,确定为第一信息集合;
将Q个第二待同步区块信息所组成的集合,确定为第二信息集合;
确定第一信息集合与第二信息集合之间的交集集合;
在第二信息集合中,将交集集合所包含的第二待同步区块信息进行删除,得到去重信息集合;
将去重信息集合添加至第一更新同步进度列表中,得到第二更新同步进度列表。
在一个实施例中,,M个区块信息包括区块信息Si,M个区块包括区块信息Si所指示的区块Si,i为正整数;
在区块同步模块从区块链上同步M个区块信息所指示的M个区块之后,基于区块链的数据处理装置还包括:
区块验证模块,用于对区块Si进行区块验证,得到区块Si的区块验证结果;
区块写入模块,用于在确定区块Si的区块验证结果为验证通过结果时,将区块Si写入至节点的本地账本中。
在一个实施例中,区块验证模块对区块Si进行区块验证,得到区块Si的区块验证结果的具体方式,包括:
获取区块Si所包含的一个或多个交易数据;
获取区块Si中包含的第一默克尔根与第二默克尔根;第一默克尔根用于表征一个或多个交易数据的交易默克尔根,第二默克尔根用于表征一个或多个交易数据的执行结果默克尔根;
根据第一默克尔根对一个或多个交易数据进行验证处理,得到第一验证子结果;
根据第二默克尔根对一个或多个交易数据的执行结果进行验证处理,得到第二验证子结果;
若第一验证子结果与第二验证子结果均为验证通过结果,则确定区块Si的验证结果为验证通过结果;
若第一验证子结果或第二验证子结果为验证失败结果,则确定区块Si的验证结果为验证失败结果。
在一个实施例中,区块验证模块根据第一默克尔根对一个或多个交易数据进行验证处理,得到第一验证子结果的具体方式,包括:
对一个或多个交易数据中的每个交易数据进行哈希计算,得到每个交易数据的交易哈希值;
对一个或多个交易哈希值进行默克尔根计算处理,得到一个或多个交易哈希值所共同指示的第三默克尔根;
将第一默克尔根与第三默克尔根进行匹配;
若第一默克尔根与第三默克尔之间的匹配结果为匹配成功结果,则确定第一验证子结果为验证通过结果;
若第一默克尔根与第三默克尔根之间的匹配结果为匹配失败结果,则确定第一验证子结果为验证失败结果。
在一个实施例中,区块验证模块根据第二默克尔根对一个或多个交易数据的执行结果进行验证处理,得到第二验证子结果的具体方式,包括:
对每个交易数据进行交易执行,得到每个交易数据的执行结果哈希值;
对一个或多个执行结果哈希值进行默克尔根计算处理,得到一个或多个执行结果哈希值所共同指示的第四默克尔根;
将第二默克尔根与第四默克尔根进行匹配;
若第二默克尔根与第四默克尔之间的匹配结果为匹配成功结果,则确定第二验证子结果为验证通过结果;
若第二默克尔根与第四默克尔根之间的匹配结果为匹配失败结果,则确定第二验证子结果为验证失败结果。
在一个实施例中,区块写入模块在确定区块Si的区块验证结果为验证通过结果时,将区块Si写入至节点的本地账本中的具体方式,包括:
在确定区块Si的区块验证结果为验证通过结果时,在区块链中获取区块Si的前继区块;前继区块是指区块链中的区块Si的上一个区块;
基于前继区块遍历节点的本地账本;
在确定节点的本地账本中存在前继区块时,将区块Si写入至节点的本地账本中。
在一个实施例中,区块写入模块在基于前继区块遍历节点的本地账本之后,基于区块链的数据处理装置还包括:
区块缓存模块,用于在确定节点的本地账本中不存在前继区块时,则将区块Si缓存到临时缓存组件中;
账本检测模块,用于对节点的本地账本进行实时检测;
区块移动模块,用于在检测到节点的本地账本中包含前继区块时,将临时缓存组件中包含的区块Si移动至节点的本地账本中。
本申请实施例一方面提供了一种计算机设备,包括:处理器和存储器;
存储器存储有计算机程序,计算机程序被处理器执行时,使得处理器执行本申请实施例中的方法。
本申请实施例一方面提供了一种计算机可读存储介质,计算机可读存储介质存储有计算机程序,计算机程序包括程序指令,程序指令当被处理器执行时,执行本申请实施例中的方法。
本申请的一个方面,提供了一种计算机程序产品,该计算机程序产品包括计算机程序,该计算机程序存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机程序,处理器执行该计算机程序,使得该计算机设备执行本申请实施例中一方面提供的方法。
在本申请实施例中,引入区块链同步进度列表的方式,通过同步进度列表准确无误地记录每个节点待同步的N个区块的区块信息,由此可以通过同步进度列表中包含的待同步的区块信息,来精准的确定出节点的区块同步进度,由此可以使得节点在进行区块同步时,可以基于当前的同步进度列表,确定出自己需同步的区块,随后节点即可选择多个区块信息来进行同步,具体的,节点可以从区块链上同步所选择的这些区块信息所指示的区块,而基于这些区块的同步,又可以对同步进度列表进行更新,更新后的同步进度列表也随之记录有节点的新的区块同步进度,节点在进行后续的区块同步时,即可基于新的区块同步进度,来继续从区块链上进行区块同步。应当理解,本申请实施例采用同步进度列表的方式可以使得节点的区块同步进度得到实时记录,可以减少节点重复同步或错漏同步的情况,由此可以提升节点同步的可靠性;同时,由于存在同步进度列表记录有节点的区块同步进度,那么即使节点存在宕机等异常情况,在节点恢复同步时,也可以基于同步进度列表中所实时记录的区块同步进度,来继续进行剩余的区块同步,无需重新开始进行区块同步,可以很好地减少区块重复同步的情况,由此提升区块的同步效率。综上,本申请可以在区块链同步业务中,提升区块链数据的同步效率。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本申请实施例提供的一种网络架构图;
图2是本申请实施例提供的一种节点进行区块同步的场景示意图;
图3是本申请实施例提供的一种基于区块链的数据处理方法的流程示意图;
图4是本申请实施例提供的一种通过轮询区块链对同步进度列表进行更新的流程示意图;
图5是本申请实施例提供的一种将同步进度列表进行更新的场景示意图;
图6是本申请实施例提供的一种将区块写入至节点本地账本的流程示意图;
图7是本申请实施例提供的一种基于区块链的数据处理装置的结构示意图;
图8是本申请实施例提供的一种计算机设备的结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
本申请实施例所提供的方法涉及到区块链等相关技术,为便于理解,以下将优先对区块链及其相关技术进行阐述:
1、区块链:狭义上,区块链是一种以区块为基本单位的链式数据结构,区块中利用数字摘要对之前获取的交易历史进行校验,适合分布式记账场景下防篡改和可扩展性的需求;广义上,区块链还指代区块链结构实现的分布式记账技术,包括分布式共识、隐私与安全保护、点对点通信技术、网络协议、智能合约等。区块链的目标是实现一个分布的数据记录账本,此账本只允许添加,不允许删除。账本底层的基本结构是一个线性的链表。链表由一个个“区块”串联组成,后继区块中记录前继区块的哈希(Hash)值,每个区块(以及区块中的交易)是否合法,可通过计算哈希值的方式进行快速检验。若网络中的节点提议添加一个新的区块,必须经过共识机制对区块达成共识确认。
2、区块链节点:区块链网络将节点区分为共识节点(也可以称作核心节点)、数据节点或轻节点。其中,共识节点负责区块链全网的共识业务;数据节点或轻节点负责同步共识节点的账本信息,即同步最新的区块数据。无论是共识节点还是数据节点(或轻节点),其内部构造都包括网络通信组件,因为区块链网络本质是一个点对点网络,需通过相关组件与区块链网络中的其他节点进行通信。区块链网络中的资源和服务都分散在各个节点上,信息的传输和服务的实现都直接在节点之间进行,无需中间环节或中心化的服务器(第三方)介入。
3、公钥(public key)与私钥(private key):公钥与私钥是通过一种算法得到的一个密钥对(即一个公钥和一个私钥),公钥是密钥对中公开的部分,私钥则是非公开的部分。公钥通常用于加密数据、验证数字签名等。通过这种算法能够确保得到的密钥对是唯一的,使用这种密钥对的时候,如果用其中一个密钥加密一段数据,必须用另一个密钥解密,例如,用公钥加密数据就必须用私钥解密,如果用私钥加密也必须用公钥解密,否则解密将不会成功。
4、哈希值:也称作信息特征值或特征值,哈希值是通过哈希算法将任意长度的输入数据转换为密码并进行固定输出而生成的,不能通过解密哈希值来检索原始输入数据,它是一个单向的加密函数。在区块链中,每个区块(除了初始区块)都包含前继区块的哈希值,前继区块被称为当前区块的父区块。哈希值是区块链技术中的潜力核心基础和最重要的方面,它保留了记录和查看数据的真实性,以及区块链作为一个整体的完整性。
5、智能合约(Smart Contract):是一种旨在以信息化方式传播、验证或执行合同的计算机协议。在区块链系统当中,智能合约(简称合约)是一种区块链各节点可以理解并执行的代码,可以执行任意逻辑并得到结果。在实际应用中,智能合约通过区块链上的交易来管理与试用。每条交易相当于对区块链系统的一个远程过程调用(Remote ProcedureCall,RPC)请求。如果说智能合约相当于可执行程序,区块链就相当于提供运行环境的操作系统。区块链可以包含多个合约,以合约账号(Identity,ID)、标识号或名称来区分。例如,智能合约中可以包含治理共识委员会合约,其主要用于管理共识节点,可以包括记录共识节点的节点状态,动态地加入共识节点,剔除异常共识节点等。
请参见图1,图1是本申请实施例提供的一种网络架构图。如图1所示,该网络架构可以包括终端设备集群10以及区块链网络,而区块链网络中可以包括核心节点(共识节点)集群1000、数据节点或轻节点集群100。该核心节点集群1000可以包括至少两个核心节点,数据节点集群100可以包括至少两个数据节点。如图1所示,该核心节点集群1000可以包括核心节点1000a、核心节点1000b、…、核心节点1000n,该数据节点集群100具体可以包括数据节点100a、数据节点100b、…、数据节点100n,该终端设备集群10具体可以包括终端设备10a、终端设备10b、…、终端设备10n。
如图1所示,终端设备10a、终端设备10b、…、终端设备10n可以分别与数据节点100a、数据节点100b、…、数据节点100n进行网络连接,以便于终端设备可以通过该网络连接与数据节点进行数据交互;数据节点100a、数据节点100b、…、数据节点100n可以分别与核心节点1000a、核心节点1000b、…、核心节点1000n进行网络连接,以便于数据节点可以通过该网络连接与核心节点进行数据交互;数据节点100a、数据节点100b、…、数据节点100n互相连接,以便于数据节点之间可以进行数据交互,核心节点1000a、核心节点1000b、…、核心节点1000n互相连接,以便于核心节点之间可以进行数据交互。
以终端设备10a、数据节点100a以及核心节点1000a为例,数据节点100a可以接收到终端设备10a发送的交易业务请求(该交易业务请求中携带智能合约的ID或名称),随后,数据节点100a可以通过数据节点集群100将该交易业务请求发送至核心节点1000a;而核心节点1000a可以运行该智能合约,并通过该智能合约执行该交易业务,得到执行结果后,可以将该执行结果存储至内存池(如交易池)中,并根据该执行结果生成新的区块;随后,核心节点1000a可以根据区块链网络中其他核心节点(即共识节点)的节点标识,将上述新生成的区块分别发送给其所在的区块链网络中的其他核心节点,由其他核心节点对新生成的区块进行校验(即进行共识),并在完成校验后将上述新生成的区块添加至其存储的区块链中(也就是说,在共识通过后将执行结果存储至区块链中)。其中,区块链网络中的每个核心节点,均具有与其对应的节点标识,而且区块链网络中的每个核心节点均可以存储有区块链网络中其他核心节点的节点标识,以便后续根据其他核心节点的节点标识,将生成的区块广播至区块链网络中的其他核心节点,使得区块链网络中全部核心节点上存储的数据均一致。
其中,如图1所示的终端设备具体可以是产生交易信息的业务方所使用的台式终端或移动终端,具体可以为智能手机、平板电脑、笔记本电脑、桌上型电脑、智能电视、智能音箱、台式计算机、智能手表、智能车载终端等携带数据处理功能的智能终端,但并不局限于此。终端设备所产生的交易信息(交易数据)在经过用户授权后,可以经数据节点或轻节点传递至共识节点,共识节点可以将终端设备产生的交易信息(交易数据)记录至区块链上。数据节点集群100中的任一数据节点可以用独立的服务器或者是多个服务器组成的服务器集群来实现,核心节点集群1000中的任一核心节点可以用独立的服务器或者是多个服务器组成的服务器集群来实现。
可以理解的是,终端设备的交易业务可以理解为交易数据,对于区块链存储交易数据的主要形式为:将交易数据以接力棒的形式传递至共识节点,共识节点再对接收到的交易数据进行交易验证,在交易验证通过后可以将其添加至自己的交易池中,在添加交易数据至自己的交易池之后,该共识节点可以将该交易数据广播至区块链的其他共识节点,而其他共识节点也会对该交易数据进行验证,然后再对该交易数据进行验证,在验证通过后可以将交易数据添加至自己的交易池中。进一步地,对于每个共识节点而言,在接收到出块信号(出块信号可以是指定时器发出的出块信号或交易池发出的出块信号)时,共识节点可以从交易池中获取一批交易数据来进行打包出块(即打包交易数据生成区块),对于生成的区块需要广播至每个共识节点,以使得所有的共识节点来对新生成的区块进行共识校验,在通过各个共识节点的共识后可以将区块添加到区块链上。
应当理解,区块链具备数据一致性,而为了使得区块链中每个核心节点(共识节点)所存储的数据(如区块)是一致的,一旦区块链中新加入了核心节点或某个核心节点存储的区块落后于其他核心节点,该新加入的核心节点或区块落后的核心节点会从区块链上进行数据同步(也就是区块同步,也可以称之为区块链数据同步),以使得该核心节点与其他核心节点所存储的区块是一致的,由此才能够验证交易、执行智能合约和维护一致的状态。
为了提升共识节点对于区块链数据同步(即区块同步)的同步效率,本申请提出一种区块链同步方法,通过该方法可以记录共识节点针对区块链的区块同步进度,由此可以基于区块同步进度准确无误地将每个需要同步的区块进行同步,减少区块重复同步与错漏同步的情况,从而可以提升区块同步效率。
具体的,本申请可以引入同步进度列表来记录共识节点针对区块链的区块同步进度,该同步进度列表中记录有共识节点待同步的多个区块的区块信息(区块信息可以是指区块的区块高度或区块头信息等信息,区块信息可以用于指示区块,即区块信息可以定位到区块链中的某个区块),这些待同步的区块的区块信息即可指示共识节点的区块同步进度,可以用于指示共识节点按照这些区块信息从区块链中获取到相应的区块进行下载同步。相应的,共识节点在同步完成某个区块后,同步进度列表也会相应进行更新,这些已经同步完成的区块将不再作为共识节点的待同步的区块,也就是说,同步进度列表可以基于共识节点同步完成的区块进行实时更新,以实时更新共识节点的区块同步进度。基于此,每个共识节点在进行区块同步时,即可基于当前的同步进度列表来确定自己需同步的区块,然后可以从区块链中将这些区块进行下载同步。通过引入同步进度列表来记录节点(如共识节点)的区块同步进度的方式,可以准确无误地实时记录节点当前需要同步的区块,并基于节点已经同步完成的区块将同步进度列表进行实时更新,这种方式可以使得节点基于区块同步进度准确无误地下载同步未同步的区块,减少区块重复同步以及将某些区块错误同步或漏同步的可能,从而可以提升区块同步效率;且在节点存在宕机等异常情况中断同步的情况时,若恢复同步,也可以基于记录的区块同步进度来继续进行剩余的区块同步,无需从头开始进行同步,可以很好地提升同步效率。
可以理解的是,本申请的终端设备中可以安装有目标应用(即应用客户端),当该应用客户端运行于终端设备中时,可以与上述图1所示的区块链网络中的其他区块链节点之间进行数据交互。其中,该应用客户端可以包含多媒体客户端(例如,视频客户端)、娱乐客户端(例如,游戏客户端)、教育客户端、直播客户端等应用客户端。其中,该应用客户端可以为独立的客户端,也可以为集成在某客户端(例如,教育客户端以及多媒体客户端等)中的嵌入式子客户端,在此不做限定。本申请中区块链节点可以是指服务器,该服务器可以通过终端设备中的应用,与终端设备之间进行数据交互(如服务器可以接收到终端设备中的应用的业务数据(如用户产生的交易数据),服务器可以将这些业务数据进行处理并上链)。这里的服务器可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、CDN、以及大数据和人工智能平台等基础云计算服务的云服务器。
可以理解的是,本发明实施例提供的方法可以由计算机设备执行,计算机设备包括但不限于终端设备或服务器(如业务服务器)。本发明实施例中的区块链节点可以为计算机设备。
需要说明的是,在本申请的具体实施方式中,涉及到用户信息、用户数据(如用户发起的交易信息、交易数据)等相关的数据,均是需要经过用户手动授权许可(即经过用户同意)才进行获取得到的。也就是说,当本申请以上实施例运用到具体产品或技术中时,本申请实施例所提供的方法与相关功能是在获得用户许可或者同意下所运行的(可以由用户主动开启本申请实施例所提供的功能),且相关数据的收集、使用和处理需要遵守相关地域、地区的相关法律法规和标准。
本申请实施例可应用于各种场景,包括但不限于游戏场景、金融场景、云技术、人工智能、智慧交通、辅助驾驶等。为便于理解,请参见图2,图2是本申请实施例提供的一种节点进行区块同步的场景示意图。如图2所示,对于共识节点20000而言,在共识节点20000中可以部署有列表维护组件,该列表维护组件可以定时轮询区块链,以确定出共识节点20000的本地账本中所存储的区块,是否落后于区块链中所包含的区块。例如,共识节点20000的本地账本中共包含有1977个区块,该共识节点20000的本地区块链的最大区块高度为1977,而区块链中共包含有1990个区块,该区块链的最新区块高度(最大区块高度)为1990,基于两者的最大区块高度,即可反映出共识节点20000本地账本中所存储的区块已落后,该共识节点20000需要从区块链中进行区块同步。
进一步地,列表维护组件可以将共识节点20000与区块链之间的差异区块,作为共识节点20000的待同步的区块(也就是共识节点20000需要从区块链中下载同步的区块),对于每个待同步的区块,列表维护组件可以基于每个待同步的区块在区块链中的区块高度,生成一个同步进度列表(如图2所示的同步进度列表1),在该同步进度列表中可以包含有各个待同步的区块的区块高度,且这些区块高度是按照从小到大的顺序进行排序的,共识节点20000通过同步进度列表1准确无误地确定出自己需要同步的区块是哪些。例如,如图2所示,该同步进度列表1中包含有区块高度1978、区块高度1979、…、区块高度1990,那么通过这些区块高度,共识节点20000即可明确自己需要同步的区块为区块高度1978所指示的区块、区块高度1979所指示的区块、…、区块高度1990所指示的区块。应当理解,同步进度列表1也可以反映出共识节点20000的区块同步进度(当前的区块同步进度为0,共识节点20000还未下载同步任意一个区块)。
进一步地,如图2所示,共识节点20000按照同步进度列表1中所记录的待同步的区块的区块高度,在区块链200(区块链包含的区块为区块2001至区块201990,其中,区块2001的区块高度为1,区块2002的区块高度为2,…,区块201990的区块高度为1990)中确定需同步的区块为区块201978至201990,那么该共识节点20000可以并行下载同步这些需同步的区块。
具体的,共识节点20000将区块201978、区块201986以及区块201989先进行了并行下载同步,那么在共识节点20000完成同步这三个区块后,列表维护组件可以获取到共识节点20000所下载同步的这些区块的区块高度,例如,可以获取到区块201978的区块高度为1978,区块201986的区块高度为1986,区块201989的区块高度为1989,那么列表维护组件可以将这些已同步完成的区块的区块高度,确定为已同步区块高度,列表维护组件可以基于这些已同步区块高度,将同步进度列表1进行更新,例如,可以将同步进度列表1中的区块高度1978、区块高度1986以及区块高度1989进行标记处理(例如,如图2所示将这些已同步区块高度进行置灰处理),应当理解,将已同步区块高度进行标记处理后,可以得到同步进度列表2,该同步进度列表2中所记录的该共识节点20000的区块同步进度也会相应得到更新,例如,同步进度列表2中所记录的待同步的区块的区块高度为未标记的区块高度,通过这些未被标记的区块高度以及被标记了的区块高度,即可反映出共识节点20000的新的区块同步进度为当前已同步了三个区块,还剩9个区块高度所指示的区块需要同步,那么共识节点20000即可基于同步进度列表2中所指示的区块同步进度,从区块链中并行下载这些需要同步的区块,相应地,列表维护组件可以基于共识节点20000同步完成的区块的区块高度,对同步进度列表2进行实时更新,以实时更新共识节点20000的区块同步进度,由此共识节点20000可以基于实时更新的区块同步进度,来准确无误地下载同步需要同步的区块。
需要说明的是,本申请实施例中,共识节点在下载同步需要同步的区块时,可以按照待同步的区块的区块高度从小到大的顺序,依次串行下载同步各个待同步的区块。例如,共识节点可以先下载同步区块201978,在下载同步完成后可以对该区块201978进行区块校验,在校验通过后再继续下载同步区块201979…直至下载完成并校验通过区块201990。然而,这种串行依次下载同步的方式,需要一个一个区块依次下载同步,十分影响同步效率,基于此,本申请中采用了并行下载区块的同步方式,可以进一步提升同步效率。
还需说明的是,本申请中区块的区块高度,可以是指区块的区块信息的一种呈现形式,也就是说,对于本申请中的区块的区块信息(如待同步的区块的区块信息),可以是指区块的区块高度,也可以是指其他能够用于表征区块的相关信息,例如,可以是指区块头信息、区块序号信息等等,这里将不再进行一一举例说明。
还需说明的是,本申请实施例中的同步进度列表是列表维护组件以定期轮询的方式来确定的,假设列表维护组件每隔5s便会对区块链进行轮询以查询共识节点的本地账本所存储的区块是否落后,那么在确定出共识节点的本地账本中所存储的区块存在落后的情况时,列表维护组件便会对当前的同步进度列表进行相应地更新,以使共识节点可以基于更新后的同步进度列表,准确无误地实时确定出需要同步的区块。也就是说,假设列表维护组件在某个轮询时刻确定出共识节点的同步进度列表后,该共识节点则可以基于该同步进度列表确定出需要同步的区块并从区块链中对这些区块进行并行下载同步,而列表维护组件也会基于共识节点的同步完成的区块,对同步进度列表进行实时更新,同时,在到达下一个轮询时刻时,若该共识节点还未同步完成所有需要同步的区块,列表维护组件仍然会轮询区块链,以确定该共识节点本地账本中所存储的区块是否落后,并在确定落后的情况下,基于共识节点本地账本所落后的区块,对当前的同步进度列表进行实时更新,以使共识节点持续同步这些需要同步的区块。
进一步地,为便于理解,接下来将结合附图对本申请实施例提供的基于区块链的数据处理方法进行详细描述。请参见图3,图3是本申请实施例提供的一种基于区块链的数据处理方法的流程示意图。该流程可以由计算机设备来执行,该计算机设备可为如图1所示的任一节点(如为核心节点,也就是,区块链中的某个节点可以是指某个计算机设备)。如图3所示,该流程可以至少包括以下步骤S101-步骤S103:
步骤S101,在针对区块链进行区块同步时,获取节点的同步进度列表;同步进度列表记录有节点针对区块链的第一区块同步进度;同步进度列表中包含节点待同步的N个区块的区块信息;N为正整数。
本申请中,基于前文所对应实施例可知,在区块链中,每个共识节点(即核心节点)的本地账本中需要存储相同的数据(如存储相同的区块或相同的区块数据),以此来维护区块链的数据一致性。那么在区块链中,若某个共识节点的本地账本中所存储的数据,落后于区块链上其他共识节点本地账本中所存储的数据,那么该落后的共识节点则需要从区块链上将自己所落后还未存储的相关数据进行下载同步,以使得每个共识节点本地账本中所存储的数据均是相同的。
也就是说,区块链中,某个共识节点可能会因为网速慢或其他硬件影响的原因,造成本地账本中所存储的区块落后于区块链上其他共识节点本地账本中所存储的区块,那么该共识节点则需要从区块链上同步这些落后的区块。而在每个共识节点针对区块链进行区块同步的过程中,本申请可以引入同步进度列表,通过该同步进度列表可以准确地记录共识节点待同步的区块的区块信息(区块信息可以是指能够用于表征区块的信息,区块信息可以包括但不限于是区块高度、区块头信息等信息),那么共识节点即可基于该同步进度列表明确自己当前需要同步的区块是哪些,进而可以基于同步进度列表所记录的这些区块信息,从区块链上准确地将需要同步的区块进行下载同步;同时,基于共识节点同步完成了的区块,本申请可以对共识节点的同步进度列表进行实时更新,以记录在上述待同步的区块中,哪些区块共识节点已同步完成了,哪些区块共识节点还需继续进行同步,那么基于共识节点已经同步完成的区块,可以对同步进度列表进行实时更新,共识节点即可再基于更新后的同步进度列表,准确地确定后续应该需要同步的区块,再从区块链上进行区块同步,直至下载同步完成所有需要同步的区块。
也就是说,本申请中在节点(如共识节点)针对区块链进行区块同步时,可以引入节点针对区块链的同步进度列表,该同步进度列表中记录有该节点针对区块链的区块同步进度(为便于与后续进行区别,这里可将其称为第一区块同步进度),且该同步进度列表中记录有该节点当前的待同步的N个(N可为正整数)区块的区块信息(区块信息可以是指区块的区块高度信息、区块头信息或区块编号信息等能够用于表征区块的信息),那么该节点即可基于该同步进度列表中所包含的待同步的N个区块信息,准确无误地明确自己当前的区块同步进度,并精准地确定自己还需同步的区块为哪些区块(也就是N个区块信息分别指示的区块)。
需要说明的是,本申请的同步进度列表,可以由列表维护组件所确定,该列表维护组件可以部属于该节点中。该列表维护组件可以定期(如每隔5s、7s等)轮询区块链中所包含的区块(或轮询区块链的最新区块高度),通过比较区块链的最新区块高度与节点本地账本中的最大区块高度,即可确定出该节点本地账本中所存储的区块是否落后于区块链。具体的,若区块链的最新区块高度与节点本地账本的最大区块高度相同,则可以说明该节点本地账本中所存储的区块,是与区块链中其他每个共识节点本地账本中所存储的区块是相同的,该节点所存储的区块并未落后于区块链整体,那么该列表维护组件可以将该节点的同步进度列表设为空值(或者不对同步进度列表进行任何处理);而若区块链的最新区块高度与节点本地账本的最大区块高度不同,且该节点本地账本的最大区块高度是小于区块链的最新区块高度的,那么可以说明该区块链中其他共识节点所存储的区块,多于节点本地账本中所存储的区块,该列表维护组件可以将节点本地账本的最大区块高度进行递增处理(即与数值1进行相加运算处理),得到的递增结果即可作为节点的待同步的区块的起始区块高度,区块链的最新区块高度即为该节点待同步的区块的结束区块高度,从起始区块高度至结束区块高度所指示的各个区块,则是该节点应该同步的区块(即待同步的区块),列表维护组件可以基于起始区块高度与结束区块高度生成一个列表,该列表中可以包含起始区块高度至结束区块高度之间的各个区块高度,而该列表即可作为同步进度列表。除此之外,列表维护组件也可以获取到起始区块高度至结束区块高度中每个区块高度所指示的区块头信息,列表维护组件也可以基于这些区块头信息来生成同步进度列表,而无论是区块高度信息还是区块头信息,其均可以用于指示定位到区块链中的某个区块,那么区块高度信息与区块头信息均可以作为本申请中区块的区块信息。
也就是说,本申请中的同步进度列表也就是由节点的待同步的区块的区块信息所组成的列表,其可以用于节点准确无误地明确需要同步的区块。
步骤S102,在同步进度列表包含的N个区块信息中选择M个区块信息;M为小于或等于N的正整数。
本申请中,由于节点待同步的区块可能并非为1个,那么节点在进行区块同步时,需要同步的区块也并非为一个,若选取串行的同步方式将各个待同步的区块进行逐个依次进行同步,那么节点一次只能同步一个区块,在同步完成该区块后才能下载同步下一个待同步的区块,这种串行同步方式将会消耗大量的时间来同步区块。为了提升同步效率,本申请可以采用并行同步区块的方式来进行区块同步,具体的,节点可以在同步进度列表中所包含的N个区块信息中,选取M个区块信息作为将要同步的区块信息,然后再从区块链上并行同步这M个区块信息所指示的区块。通过并行下载同步区块的方式,可以使得节点无需等待前一个区块的同步,即可直接某个区块进行同步,且节点并行同步区块时,并非一次性将所有的区块均进行同步,而是选取部分(如M个)区块来进行同步,由此也不会过于增加节点的计算负担或其他资源消耗负担。这里从N个区块信息中选择M个区块信息时,可以随机进行选择,也可以选择前M个区块信息或后M个区块信息。具体的区块信息的选择方式,本申请对其并不进行限制。
步骤S103,从区块链上同步M个区块信息所指示的M个区块,基于M个区块的同步,更新同步进度列表得到第一更新同步进度列表;第一更新同步进度列表记录有节点针对区块链的第二区块同步进度。
本申请中,节点可以按照所选择的M个区块信息,从区块链上定位到每个区块信息所指示的区块,由此可以定位出M个区块,随后,节点即可从区块链上将这M个区块进行下载同步。
需要说明的是,每个区块存储有不同的区块数据(区块数据可以包含区块的区块头信息、交易数据、交易收据、状态数据等),那么节点对于区块的同步,实际可以理解为是对区块数据的同步,则这里从区块链上同步M个区块信息所指示的M个区块的具体方式可为:可以从区块链上获取M个区块信息中每个区块信息指示的区块(也就是定位出每个区块信息所指示的区块),由此可以得到M个区块;进一步地,即可在区块链中获取M个区块中每个区块包含的区块数据,由此可以得到M个区块数据;随后可以将M个区块数据进行并行同步。
其中,需要说明的是,基于上述可知,同步进度列表中包含的区块信息可以是指区块头信息,而这里节点所同步的区块数据,又会包含有区块的区块头信息,同步进度列表是会存储在节点的本地数据库(如本地磁盘)中,而节点同步的区块数据会存储在节点的本地账本中,这将造成节点重复存储区块的区块头信息的情况,所以基于此,本申请中,在同步进度列表存储在节点的本地数据库中时,且该同步进度列表包含的N个区块信息中每个区块信息是指一个待同步的区块的区块头信息时,节点所同步的M个区块中的每个区块的区块数据可以均不包含有区块头信息。也就是说,此种情况下,节点可以选择仅同步除区块头信息以外的其余区块数据(如交易数据、交易收据、状态数据等信息),而不同步区块头信息。
应当理解的是,本申请可以基于节点已经同步了的区块,将同步进度列表进行更新,由此可以得到更新同步进度列表,而该更新同步进度列表中则记录有节点的新的待同步的多个区块,以及新的区块同步进度。节点可以基于该新的待同步的区块,继续进行区块同步。对于基于M个区块的同步,更新该同步进度列表的具体方式可为:基于M个区块的同步,可以将同步进度列表中包含的M个区块信息进行标记;其中,标记后的M个区块信息用于表征节点已同步区块链中的M个区块;进一步地,可以将包含标记后的M个区块信息的同步进度列表确定为第一更新同步进度列表。也就是说,本申请中,一旦节点同步了某些区块,则可调用列表维护组件将这些区块所指示的区块信息进行标记(如置灰处理、添加特殊标志等处理),由此同步进度列表中则可包含有标记了的区块信息与未被标记的区块信息,那么通过区块信息的标记,即可确定哪些区块属于待同步的区块,哪些区块属于已同步的区块。
当然,本申请也可以在同步进度列表中,将节点已同步的区块(可称之为已同步区块)的区块信息进行标记,将待同步的区块不进行标记,那么通过已标记的区块信息与未标记的区块信息,也可确定出节点待同步的区块为哪些区块。对于更新同步进度列表的方式,本申请只是举例描述了两种标记区块信息以进行列表更新的方式,对于同步进度列表的更新方式,本申请并不进行限制。
在本申请实施例中,引入区块链同步进度列表的方式,通过同步进度列表准确无误地记录每个节点待同步的N个区块的区块信息,由此可以通过同步进度列表中包含的待同步的区块信息,来精准的确定出节点的区块同步进度,由此可以使得节点在进行区块同步时,可以基于当前的同步进度列表,确定出自己需同步的区块,随后节点即可选择多个区块信息来进行同步,具体的,节点可以从区块链上同步所选择的这些区块信息所指示的区块,而基于这些区块的同步,又可以对同步进度列表进行更新,更新后的同步进度列表也随之记录有节点的新的区块同步进度,节点在进行后续的区块同步时,即可基于新的区块同步进度,来继续从区块链上进行区块同步。应当理解,本申请实施例采用同步进度列表的方式可以使得节点的区块同步进度得到实时记录,可以减少节点重复同步或错漏同步的情况,由此可以提升节点同步的可靠性;同时,由于存在同步进度列表记录有节点的区块同步进度,那么即使节点存在宕机等异常情况,在节点恢复同步时,也可以基于同步进度列表中所实时记录的区块同步进度,来继续进行剩余的区块同步,无需重新开始进行区块同步,可以很好地减少区块重复同步的情况,由此提升区块的同步效率。
可以理解的是,基于前文所对应实施例描述可知,本申请中的同步进度列表可以由列表维护组件通过定期轮询区块链的方式所确定,而列表维护组件每次轮询区块链后,若轮询到节点本地账本落后于区块链中存储的区块,则可持续对节点的同步进度列表进行更新,以实时记录更新节点的区块同步进度与待同步的区块。具体的,以上述图3所对应实施例为例,节点的同步进度列表可以是由列表维护组件在到达某个轮询时刻(为便于区别,这里将其称为第一轮询时刻)时,通过轮询该区块链中包含的区块所确定的,而节点在同步了M个区块后更新了同步进度列表得到第一更新同步进度列表后,若又一次到达了区块链的轮询时刻(如到达第二轮询时刻),那么列表维护组件需要再一次轮询区块链,以确定该节点的本地账本中所存储的区块是否落后于区块链中包含的区块,并在落后的情况下对第一更新同步进度列表进行再一次更新。
为便于理解,请一并参见图4,图4是本申请实施例提供的一种通过轮询区块链对同步进度列表进行更新的流程示意图。其中,该流程可以对应于上述图3所对应实施例中,在基于M个区块的同步,更新同步进度列表得到第一更新同步进度列表之后的流程,且该流程是以同步进度列表是在第一轮询时刻时,通过轮询区块链中包含的区块所确定的为例进行说明的流程。如图4所示,该流程可以至少包括以下步骤S401-步骤S404:
步骤S401,在到达第二轮询时刻时,调用列表维护组件;第二轮询时刻是指第一轮询时刻的下一个针对区块链的轮询时刻。
具体的,这里的第一轮询时刻可以是指任意一个轮询时刻(如对于区块链的轮询设定是每隔5s进行轮询,那么这里的轮询时刻可以是指第5s、第10s、第15s…而这里的第一轮询时刻则是指任意一个轮询时刻),第二轮询时刻是指第一轮询时刻的下一个轮询时刻。假设得到第一同步进度列表之后,到达了第二轮询时刻,那么在到达第二轮询时刻时,节点可以调用列表维护组件(也就是用于生成并维护节点的同步进度列表的组件)。
步骤S402,通过列表维护组件轮询区块链在第二轮询时刻时包含的区块。
具体的,通过列表维护组件可以轮询区块链在第二轮询时刻时所包含的区块,这里可以仅轮询区块链在第二轮询时刻时的最新区块高度,通过最新区块高度与节点本地账本中的最大区块高度即可确定出该节点在第二轮询时刻时是否落后。
步骤S403,将节点的本地账本在第二轮询时刻时包含的区块,与区块链在第二轮询时刻时包含的区块进行比较,确定节点在第二轮询时刻时的待同步的Q个区块。
具体的,列表维护组件可以获取到节点的本地账本在第二轮询时刻时包含的区块,列表维护组件可以将节点的本地账本在第二轮询时刻时包含的区块,与区块链在第二轮询时刻时包含的区块进行比较,由此即可确定节点在第二轮询时刻时的待同步的Q个区块。
应当理解的是,节点的本地账本中所存储的区块,均是按照区块高度从小到大的顺序依次进行排列存储的,而区块链中所包含的区块,也是按照区块高度从小到大的顺序进行顺序存储的,那么这里可以仅通过比较区块链的最新区块高度与节点的最大区块高度即可确定出节点在第二轮询时刻时是否落后,当然,通过具体比较区块的方式也可以确定出节点是否落后。
步骤S404,根据节点在第二轮询时刻时的待同步的Q个区块,对第一更新同步进度列表进行更新,得到第二更新同步进度列表。
具体的,根据节点在第二轮询时刻时的待同步的Q个区块,即可对第一更新同步进度列表进行更新,得到第二更新同步进度列表。其具体实现方式可为:可以获取第一更新同步进度列表中包含的待同步的W个区块的区块信息,并将W个区块的区块信息均确定为第一待同步区块信息,由此可以得到W个第一待同步区块信息;进一步地,可以将节点在第二轮询时刻时的待同步的Q个区块,均确定为第一待同步区块,由此可以得到Q个第一待同步区块;可以将每个第一待同步区块的区块信息,均确定为节点在第二轮询时刻时的第一待同步区块信息,由此可以得到Q个第二待同步区块信息;进一步地,根据Q个第二待同步区块信息与W个第一待同步区块信息,即可对第一更新同步进度列表进行更新,得到第二更新同步进度列表。
其中,对于根据Q个第二待同步区块信息与W个第一待同步区块信息,对第一更新同步进度列表进行更新,得到第二更新同步进度列表的具体方式可为:可以将W个第一待同步区块信息所组成的集合,确定为第一信息集合;可以将Q个第二待同步区块信息所组成的集合,确定为第二信息集合;进一步地,可以确定第一信息集合与第二信息集合之间的交集集合(也就是去第一信息集合与第二信息集合之间的交集);在第二信息集合中,可以将交集集合所包含的第二待同步区块信息进行删除,由此即可得到去重信息集合;随后即可将去重信息集合添加至第一更新同步进度列表中,添加去重信息集合的第一更新同步进度列表即可确定为第二更新同步进度列表,即可以得到第二更新同步进度列表。
可以理解的是,节点在进行区块同步时,所同步的多个区块(如上述同步的M个区块)可能并非时连续的区块,那么节点在同步完成某个区块后,可能该区块的上一个区块还未同步过来,而节点的本地账本中是需要按照区块高度从小到大的顺序进行顺序存储的,那么若该区块的上一个区块还未同步过来,则该区块是无法写入至节点的本地账本中的,该区块需要临时缓存到某个地方,待该区块的上一个区块同步过来,才能够写入至节点的本地账本中。基于此可知,对于同步进度列表中所指示的待同步的区块,节点即使同步了部分区块,但节点的本地账本中可能仍然未存储有区块,或者说,对于同步进度列表中所记录的待同步的区块信息,可能节点的本地账本中还并未存储有相应的区块。
那么基于此可知,在第二轮询时刻时,虽然节点本地账本中并未包含有区块链上的某个区块,但该第一更新同步进度列表中可能已经存在有该区块的区块信息了,那么通过比较节点本地账本中包含的区块,以及区块链中包含的区块,所得到的第二轮询时刻时的待同步的区块,可能在第一更新同步进度列表中已经记录有某些区块的区块信息,若将这些区块的区块信息再次添加到第一更新同步进度列表中,则会造成重复记录。那么本申请在确定出第二轮询时刻的待同步的Q个区块后,可以将Q个区块中的每个区块均确定为第二待同步区块,将第一更新同步进度列表中包含的待同步的W个区块,确定为第一待同步区块,然后可以确定W个第一待同步区块所指示的第一信息集合,与Q个第二待同步区块所指示的第二信息集合之间的交集,该交集里包含的区块信息也就是重复的区块信息,可以将第二信息集合中的这些重复的区块信息进行删除,也就是对第二信息集合进行了去重处理,得到的去重信息集合中的每个第二待同步区块信息可以均添加至第一更新同步进度列表中,由此即可得到第二更新同步进度列表。
为便于理解,请一并参见图5,图5是本申请实施例提供的一种将同步进度列表进行更新的场景示意图,如图5所示,在第二轮询时刻时,可以将节点的本地账本中所存储的区块,与区块链中所包含的区块进行比较,由此可以得到第二轮询时刻时,节点的待同步的区块。进一步地,可以获取到这些第二轮询时刻时的待同步的区块的区块信息(如区块头信息或区块高度),可以将第二轮询时刻时的待同步的区块的区块信息,与第一更新同步进度列表中包含的当前的待同步的区块的区块信息进行比较,以确定出第二轮询时刻时的重复的区块信息,可以将这些重复的区块信息进行删除(即进行去重),由此可以得到去重后的待同步的区块的区块信息,进一步地,即可将去重后的待同步的区块的区块信息添加至第一更新同步进度列表中。
需要说明的是,本申请中的同步进度列表也可以理解为是一个区块链同步骨架,具体可以是一个数据结构,由节点的待同步的区块的区块信息(如区块头信息或区块高度信息)所组成,在该区块链同步骨架中所包含的区块信息为区块头信息时,该区块链同步骨架可以存储于节点的本地数据库(本地磁盘)中,那么节点在进行区块同步时,无需再同步区块的区块头信息,后续从本地磁盘中即可获取到这些同步过来的区块的区块头信息,而每当区块链同步骨架存在更新时,该更新后的区块链骨架也会相应地记录在本地磁盘中,由此可以实时更新记录节点的区块同步进度。
在本申请实施例中,引入区块链同步进度列表的方式,通过同步进度列表准确无误地记录每个节点待同步的N个区块的区块信息,由此可以通过同步进度列表中包含的待同步的区块信息,来精准的确定出节点的区块同步进度,由此可以使得节点在进行区块同步时,可以基于当前的同步进度列表,确定出自己需同步的区块,随后节点即可选择多个区块信息来进行同步,具体的,节点可以从区块链上同步所选择的这些区块信息所指示的区块,而基于这些区块的同步,又可以对同步进度列表进行更新,更新后的同步进度列表也随之记录有节点的新的区块同步进度,节点在进行后续的区块同步时,即可基于新的区块同步进度,来继续从区块链上进行区块同步。应当理解,本申请实施例采用同步进度列表的方式可以使得节点的区块同步进度得到实时记录,可以减少节点重复同步或错漏同步的情况,由此可以提升节点同步的可靠性;同时,由于存在同步进度列表记录有节点的区块同步进度,那么即使节点存在宕机等异常情况,在节点恢复同步时,也可以基于同步进度列表中所实时记录的区块同步进度,来继续进行剩余的区块同步,无需重新开始进行区块同步,可以很好地减少区块重复同步的情况,由此提升区块的同步效率。
进一步地,应当理解的是,对于节点的同步完成的区块,需要将该区块写入至节点的本地账本中,以使得各个节点的本地账本中所存储的区块是完全一致的。那么对于前文图3所对应实施例中节点所同步完成的M个区块,需要将每个区块均写入至节点的本地账本中,但是,在将区块写入至节点的本地账本中前,需要考虑该本地账本中是否包含有该区块的前继区块(即区块链中的该区块的上一个区块),在该本地账本中包含有该区块的前继区块的情况下,再讲该区块写入至该节点的本地账本中(具体是写入到本地账本的前继区块之后),由此即可使得本地账本中存储的区块是按照区块高度从小到大的顺序来存储的。
为便于理解,请一并参见图6,图6是本申请实施例提供的一种将区块写入至节点本地账本的流程示意图。其中,该流程可以对应于上述图3所对应实施例中在从区块链上同步M个区块信息所指示的M个区块之后的流程,且该流程是以M个区块信息包括区块信息Si,M个区块包括该区块信息Si指示的区块Si(i为正整数)为例进行说明的流程,如图6所示,该流程可以至少包括以下步骤S601-步骤S602:
步骤S601,对区块Si进行区块验证,得到区块Si的区块验证结果。
具体的,对于同步完成的区块Si,节点对其进行区块验证,以验证区块的完整性与有效性,具体可以验证该区块Si中包含的交易数据是否完整,同时验证交易数据的执行结果是否正确有效。对区块Si进行区块验证,得到区块Si的区块验证结果的具体方式可为:可以获取区块Si所包含的一个或多个交易数据;同时可以获取区块Si中包含的第一默克尔根与第二默克尔根;其中,第一默克尔根用于表征一个或多个交易数据的交易默克尔根,第二默克尔根用于表征一个或多个交易数据的执行结果默克尔根;根据第一默克尔根可以对一个或多个交易数据进行验证处理,由此可以得到一个验证结果(可称之为第一验证子结果);根据第二默克尔根可以对一个或多个交易数据的执行结果进行验证处理,由此可以得到一个验证结果(第二验证子结果);若第一验证子结果与第二验证子结果均为验证通过结果,则可以确定区块Si的验证结果为验证通过结果;而若第一验证子结果或第二验证子结果为验证失败结果,则可以确定区块Si的验证结果为验证失败结果。
其中,对于根据第一默克尔根对一个或多个交易数据进行验证处理,得到第一验证子结果的具体方式,可为:可以对一个或多个交易数据中的每个交易数据进行哈希计算,由此可以得到每个交易数据的交易哈希值;进一步地,可以对一个或多个交易哈希值进行默克尔根计算处理,由此可以得到一个或多个交易哈希值所共同指示的第三默克尔根;进一步地,可以将第一默克尔根与第三默克尔根进行匹配;若第一默克尔根与第三默克尔之间的匹配结果为匹配成功结果,则可以确定第一验证子结果为验证通过结果;而若第一默克尔根与第三默克尔根之间的匹配结果为匹配失败结果,则可以确定第一验证子结果为验证失败结果。
可以理解的,在计算得到每个交易数据的交易哈希值后,可以基于这些交易数据的交易哈希值计算构建一个二叉树(该二叉树可称为交易哈希二叉树),而该交易哈希二叉树的树根即可作为这些交易数据所共同指示的默克尔根(即第三默克尔根),也就是说,本申请中对一个或多个交易哈希值进行默克尔根计算处理,也就是基于一个或多个交易哈希值构建交易哈希二叉树的处理,得到的树根即为该第三默克尔根。只有在区块中包含的第一默克尔根与节点计算的第三默克尔根相同时,才可以认为接收到的该区块Si中包含的交易数据是完整的,即该区块是具备完整性的。对于二叉树的构建原理是一个较为熟知的原理,所以本申请将不再对交易哈希二叉树的构建的具体实现方式进行阐述。
同样,对于根据第二默克尔根对一个或多个交易数据的执行结果进行验证处理,得到第二验证子结果的具体方式可为:可以对每个交易数据进行交易执行,由此可以得到每个交易数据的执行结果哈希值;进一步地,可以对一个或多个执行结果哈希值进行默克尔根计算处理,由此可以得到一个或多个执行结果哈希值所共同指示的第四默克尔根;进一步地,可以将第二默克尔根与第四默克尔根进行匹配;若第二默克尔根与第四默克尔之间的匹配结果为匹配成功结果,则可以确定第二验证子结果为验证通过结果;而若第二默克尔根与第四默克尔根之间的匹配结果为匹配失败结果,则可以确定第二验证子结果为验证失败结果。
可以理解的是,对于区块Si中包含的每个交易数据,节点均可以执行以得到自己计算得到的执行结果(会得到一个哈希值,该哈希值可称为执行结果哈希值),而在得到每个交易数据的执行结果哈希值后,可以这些交易数据的执行结果哈希值计算构建一个二叉树(该二叉树可以称为结果哈希二叉树),而该结果哈希二叉树的树根即可作为这些执行结构哈希值所共同指示的默克尔根(即第四默克尔根),也就是说,本申请中对一个或多个执行结果哈希值进行默克尔根计算处理即基于这些执行结果哈希值构建结果哈希二叉树的处理,得到的树根即为该第四默克尔根。只有在区块中包含的第二默克尔根与节点计算的第四默克尔根相同时,才可以认为接收到的该区块Si中包含的交易数据是正确有效的,没有交易数据被篡改过,即该区块是具备有效性或正确性的。
步骤S602,在确定区块Si的区块验证结果为验证通过结果时,将区块Si写入至节点的本地账本中。
具体的,在确定区块Si的区块验证结果为验证通过结果时,可以先判断节点的本地账本中是否存在有区块Si的前继区块,若存在,则可以将该区块Si写入到本地账本中(具体是写入至该前继区块之后)。也就是说,在确定区块Si的区块验证结果为验证通过结果时,将区块Si写入至节点的本地账本中的具体方式可为:在确定区块Si的区块验证结果为验证通过结果时,可以在区块链中获取区块Si的前继区块;其中,前继区块是指区块链中的区块Si的上一个区块;进一步地,可以基于前继区块遍历节点的本地账本;在确定节点的本地账本中存在该前继区块时,可以将区块Si写入至节点的本地账本中。而在确定节点的本地账本中不存在前继区块时,则可以将区块Si缓存到临时缓存组件中;并对节点的本地账本进行实时检测;在检测到节点的本地账本中包含前继区块时,则可以将临时缓存组件中包含的区块Si移动至节点的本地账本中。
也就是说,在节点的本地账本中未包含有区块Si的前继区块时,可以先将区块Si缓存到临时缓存组件(或缓存到缓存池)中,在缓存时,可以将该区块Si与其对应的区块高度进行关联存储,那么在节点将区块Si的上一个区块高度的前继区块写入到本地账本之后,即可将该区块Si写入到本地账本中(该临时缓存组件中缓存的区块Si也会相应得到清除)。应当理解,通过增设临时缓存组件来缓存区块的方式,可以使得节点的本地账本中的区块是按照区块高度从小到大的顺序进行依次存储排列的,由此可以减少账本中区块乱序或杂乱的情况,也有利于确保节点所存储的区块的完整性与正确性。
在本申请实施例中,采用同步进度列表的方式可以使得节点的区块同步进度得到实时记录,可以减少节点重复同步或错漏同步的情况,由此可以提升节点同步的可靠性;同时,由于存在同步进度列表记录有节点的区块同步进度,那么即使节点存在宕机等异常情况,在节点恢复同步时,也可以基于同步进度列表中所实时记录的区块同步进度,来继续进行剩余的区块同步,无需重新开始进行区块同步,可以很好地减少区块重复同步的情况,由此提升区块的同步效率。同时通过增设临时缓存组件的方式,可以使得同步完成的某个中间的区块被缓存到相应地区块高度上,进而再准确地写入到节点的本地账本中,由此可以节点的本地账本中的区块是按照区块高度从小到大的顺序进行依次存储排列的,可以减少账本中区块乱序或杂乱的情况,也有利于确保节点所存储的区块的完整性与正确性。
进一步地,请参见图7,图7是本申请实施例提供的一种基于区块链的数据处理装置的结构示意图。该基于区块链的数据处理装置可以是运行于计算机设备中的一个计算机程序(包括程序代码),例如该基于区块链的数据处理装置为一个应用软件;该基于区块链的数据处理装置可以用于执行图3所示的方法。如图7所示,该基于区块链的数据处理装置1可以包括:列表获取模块11、信息选择模块12、区块同步模块13以及第一列表更新模块14。
列表获取模块11,用于在针对区块链进行区块同步时,获取节点的同步进度列表;同步进度列表记录有节点针对区块链的第一区块同步进度;同步进度列表中包含节点待同步的N个区块的区块信息;N为正整数;
信息选择模块12,用于在同步进度列表包含的N个区块信息中选择M个区块信息;M为小于或等于N的正整数;
区块同步模块13,用于从区块链上同步M个区块信息所指示的M个区块;
第一列表更新模块14,用于基于M个区块的同步,更新同步进度列表得到第一更新同步进度列表;第一更新同步进度列表记录有节点针对区块链的第二区块同步进度。
其中,列表获取模块11、信息选择模块12、区块同步模块13以及第一列表更新模块14的具体实现方式,可以参见上述图3所对应实施例中步骤S101-步骤S103的描述,这里将不再进行赘述。
在一个实施例中,区块同步模块13从区块链上同步M个区块信息所指示的M个区块的具体方式,包括:
从区块链上获取M个区块信息中每个区块信息指示的区块,得到M个区块;
在区块链中获取M个区块中每个区块包含的区块数据,得到M个区块数据;
将M个区块数据进行并行同步。
在一个实施例中,同步进度列表存储于节点的本地数据库中,同步进度列表包含的N个区块信息中的每个区块信息是指一个待同步的区块的区块头信息;M个区块中每个区块包含的区块数据均未包含区块头信息。
在一个实施例中,第一列表更新模块14基于M个区块的同步,更新同步进度列表得到第一更新同步进度列表的具体方式,包括:
基于M个区块的同步,将同步进度列表中包含的M个区块信息进行标记;标记后的M个区块信息用于表征节点已同步区块链中的M个区块;
将包含标记后的M个区块信息的同步进度列表确定为第一更新同步进度列表。
在一个实施例中,同步进度列表是在第一轮询时刻时,通过轮询区块链中包含的区块所确定的;
在第一列表更新模块14基于M个区块的同步,更新同步进度列表得到第一更新同步进度列表之后,基于区块链的数据处理装置1还包括:组件调用模块15、区块轮询模块16、区块比较模块17以及第二列表更新模块18。
组件调用模块15,用于在到达第二轮询时刻时,调用列表维护组件;第二轮询时刻是指第一轮询时刻的下一个针对区块链的轮询时刻;
区块轮询模块16,用于通过列表维护组件轮询区块链在第二轮询时刻时包含的区块;
区块比较模块17,用于将节点的本地账本在第二轮询时刻时包含的区块,与区块链在第二轮询时刻时包含的区块进行比较,确定节点在第二轮询时刻时的待同步的Q个区块;
第二列表更新模块18,用于根据节点在第二轮询时刻时的待同步的Q个区块,对第一更新同步进度列表进行更新,得到第二更新同步进度列表。
其中,组件调用模块15、区块轮询模块16、区块比较模块17以及第二列表更新模块18的具体实现方式,可以参见上述图4所对应实施例中步骤S401-步骤S404的描述,这里将不再进行赘述。
在一个实施例中,第二列表更新模块18根据节点在第二轮询时刻时的待同步的Q个区块,对第一更新同步进度列表进行更新,得到第二更新同步进度列表的具体方式,包括:
获取第一更新同步进度列表中包含的待同步的W个区块的区块信息,将W个区块的区块信息均确定为第一待同步区块信息,得到W个第一待同步区块信息;
将节点在第二轮询时刻时的待同步的Q个区块,均确定为第一待同步区块;
将每个第一待同步区块的区块信息,确定为节点在第二轮询时刻时的第一待同步区块信息,得到Q个第二待同步区块信息;
根据Q个第二待同步区块信息与W个第一待同步区块信息,对第一更新同步进度列表进行更新,得到第二更新同步进度列表。
在一个实施例中,第二列表更新模块18根据Q个第二待同步区块信息与W个第一待同步区块信息,对第一更新同步进度列表进行更新,得到第二更新同步进度列表的具体方式,包括:
将W个第一待同步区块信息所组成的集合,确定为第一信息集合;
将Q个第二待同步区块信息所组成的集合,确定为第二信息集合;
确定第一信息集合与第二信息集合之间的交集集合;
在第二信息集合中,将交集集合所包含的第二待同步区块信息进行删除,得到去重信息集合;
将去重信息集合添加至第一更新同步进度列表中,得到第二更新同步进度列表。
在一个实施例中,,M个区块信息包括区块信息Si,M个区块包括区块信息Si所指示的区块Si,i为正整数;
在区块同步模块13从区块链上同步M个区块信息所指示的M个区块之后,基于区块链的数据处理装置1还包括:区块验证模块19以及区块写入模块20。
区块验证模块19,用于对区块Si进行区块验证,得到区块Si的区块验证结果;
区块写入模块20,用于在确定区块Si的区块验证结果为验证通过结果时,将区块Si写入至节点的本地账本中。
其中,区块验证模块19以及区块写入模块20的具体实现方式,可以参见上述图6所对应实施例中步骤S601-步骤S602的描述,这里将不再进行赘述。
在一个实施例中,区块验证模块19对区块Si进行区块验证,得到区块Si的区块验证结果的具体方式,包括:
获取区块Si所包含的一个或多个交易数据;
获取区块Si中包含的第一默克尔根与第二默克尔根;第一默克尔根用于表征一个或多个交易数据的交易默克尔根,第二默克尔根用于表征一个或多个交易数据的执行结果默克尔根;
根据第一默克尔根对一个或多个交易数据进行验证处理,得到第一验证子结果;
根据第二默克尔根对一个或多个交易数据的执行结果进行验证处理,得到第二验证子结果;
若第一验证子结果与第二验证子结果均为验证通过结果,则确定区块Si的验证结果为验证通过结果;
若第一验证子结果或第二验证子结果为验证失败结果,则确定区块Si的验证结果为验证失败结果。
在一个实施例中,区块验证模块19根据第一默克尔根对一个或多个交易数据进行验证处理,得到第一验证子结果的具体方式,包括:
对一个或多个交易数据中的每个交易数据进行哈希计算,得到每个交易数据的交易哈希值;
对一个或多个交易哈希值进行默克尔根计算处理,得到一个或多个交易哈希值所共同指示的第三默克尔根;
将第一默克尔根与第三默克尔根进行匹配;
若第一默克尔根与第三默克尔之间的匹配结果为匹配成功结果,则确定第一验证子结果为验证通过结果;
若第一默克尔根与第三默克尔根之间的匹配结果为匹配失败结果,则确定第一验证子结果为验证失败结果。
在一个实施例中,区块验证模块19根据第二默克尔根对一个或多个交易数据的执行结果进行验证处理,得到第二验证子结果的具体方式,包括:
对每个交易数据进行交易执行,得到每个交易数据的执行结果哈希值;
对一个或多个执行结果哈希值进行默克尔根计算处理,得到一个或多个执行结果哈希值所共同指示的第四默克尔根;
将第二默克尔根与第四默克尔根进行匹配;
若第二默克尔根与第四默克尔之间的匹配结果为匹配成功结果,则确定第二验证子结果为验证通过结果;
若第二默克尔根与第四默克尔根之间的匹配结果为匹配失败结果,则确定第二验证子结果为验证失败结果。
在一个实施例中,区块写入模块20在确定区块Si的区块验证结果为验证通过结果时,将区块Si写入至节点的本地账本中的具体方式,包括:
在确定区块Si的区块验证结果为验证通过结果时,在区块链中获取区块Si的前继区块;前继区块是指区块链中的区块Si的上一个区块;
基于前继区块遍历节点的本地账本;
在确定节点的本地账本中存在前继区块时,将区块Si写入至节点的本地账本中。
在一个实施例中,区块写入模块20在基于前继区块遍历节点的本地账本之后,基于区块链的数据处理装置1还包括:区块缓存模块21、账本检测模块22以及区块移动模块23。
区块缓存模块21,用于在确定节点的本地账本中不存在前继区块时,则将区块Si缓存到临时缓存组件中;
账本检测模块22,用于对节点的本地账本进行实时检测;
区块移动模块23,用于在检测到节点的本地账本中包含前继区块时,将临时缓存组件中包含的区块Si移动至节点的本地账本中。
其中,区块缓存模块21、账本检测模块22以及区块移动模块23的具体实现方式,可以参见上述图6所对应实施例中步骤S602的描述,这里将不再进行赘述。
在本申请实施例中,引入区块链同步进度列表的方式,通过同步进度列表准确无误地记录每个节点待同步的N个区块的区块信息,由此可以通过同步进度列表中包含的待同步的区块信息,来精准的确定出节点的区块同步进度,由此可以使得节点在进行区块同步时,可以基于当前的同步进度列表,确定出自己需同步的区块,随后节点即可选择多个区块信息来进行同步,具体的,节点可以从区块链上同步所选择的这些区块信息所指示的区块,而基于这些区块的同步,又可以对同步进度列表进行更新,更新后的同步进度列表也随之记录有节点的新的区块同步进度,节点在进行后续的区块同步时,即可基于新的区块同步进度,来继续从区块链上进行区块同步。应当理解,本申请实施例采用同步进度列表的方式可以使得节点的区块同步进度得到实时记录,可以减少节点重复同步或错漏同步的情况,由此可以提升节点同步的可靠性;同时,由于存在同步进度列表记录有节点的区块同步进度,那么即使节点存在宕机等异常情况,在节点恢复同步时,也可以基于同步进度列表中所实时记录的区块同步进度,来继续进行剩余的区块同步,无需重新开始进行区块同步,可以很好地减少区块重复同步的情况,由此提升区块的同步效率。
进一步地,请参见图8,图8是本申请实施例提供的一种计算机设备的结构示意图。如图8所示,上述计算机设备8000可以包括:处理器8001,网络接口8004和存储器8005,此外,上述计算机设备8000还包括:用户接口8003,和至少一个通信总线8002。其中,通信总线8002用于实现这些组件之间的连接通信。其中,用户接口8003可以包括显示屏(Display)、键盘(Keyboard),可选用户接口8003还可以包括标准的有线接口、无线接口。网络接口8004可选的可以包括标准的有线接口、无线接口(如WI-FI接口)。存储器8005可以是高速RAM存储器,也可以是非不稳定的存储器(non-volatile memory),例如至少一个磁盘存储器。存储器8005可选的还可以是至少一个位于远离前述处理器8001的存储装置。如图8所示,作为一种计算机可读存储介质的存储器8005中可以包括操作系统、网络通信模块、用户接口模块以及设备控制应用程序。
在图8所示的计算机设备8000中,网络接口8004可提供网络通讯功能;而用户接口8003主要用于为用户提供输入的接口;而处理器8001可以用于调用存储器8005中存储的设备控制应用程序,以实现:
在针对所述区块链进行区块同步时,获取所述节点的同步进度列表;所述同步进度列表记录有所述节点针对所述区块链的第一区块同步进度;所述同步进度列表中包含所述节点待同步的N个区块的区块信息;N为正整数;
在所述同步进度列表包含的N个区块信息中选择M个区块信息;M为小于或等于N的正整数;
从所述区块链上同步所述M个区块信息所指示的M个区块,基于所述M个区块的同步,更新所述同步进度列表得到第一更新同步进度列表;所述第一更新同步进度列表记录有所述节点针对所述区块链的第二区块同步进度。
应当理解,本申请实施例中所描述的计算机设备8000可执行前文图3到图6所对应实施例中对该基于区块链的数据处理方法的描述,也可执行前文图7所对应实施例中对该基于区块链的数据处理装置1的描述,在此不再赘述。另外,对采用相同方法的有益效果描述,也不再进行赘述。
此外,这里需要指出的是:本申请实施例还提供了一种计算机可读存储介质,且上述计算机可读存储介质中存储有前文提及的数据处理的计算机设备8000所执行的计算机程序,且上述计算机程序包括程序指令,当上述处理器执行上述程序指令时,能够执行前文图3到图6所对应实施例中对上述基于区块链的数据处理方法的描述,因此,这里将不再进行赘述。另外,对采用相同方法的有益效果描述,也不再进行赘述。对于本申请所涉及的计算机可读存储介质实施例中未披露的技术细节,请参照本申请方法实施例的描述。
上述计算机可读存储介质可以是前述任一实施例提供的基于区块链的数据处理装置或者上述计算机设备的内部存储单元,例如计算机设备的硬盘或内存。该计算机可读存储介质也可以是该计算机设备的外部存储设备,例如该计算机设备上配备的插接式硬盘,智能存储卡(smart media card,SMC),安全数字(secure digital,SD)卡,闪存卡(flash card)等。进一步地,该计算机可读存储介质还可以既包括该计算机设备的内部存储单元也包括外部存储设备。该计算机可读存储介质用于存储该计算机程序以及该计算机设备所需的其他程序和数据。该计算机可读存储介质还可以用于暂时地存储已经输出或者将要输出的数据。
本申请的一个方面,提供了一种计算机程序产品,该计算机程序产品包括计算机程序,该计算机程序存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机程序,处理器执行该计算机程序,使得该计算机设备执行本申请实施例中一方面提供的方法。
本申请实施例的说明书和权利要求书及附图中的术语“第一”、“第二”等是用于区别不同对象,而非用于描述特定顺序。此外,术语“包括”以及它们任何变形,意图在于覆盖不排他的包含。例如包含了一系列步骤或单元的过程、方法、装置、产品或设备没有限定于已列出的步骤或模块,而是可选地还包括没有列出的步骤或模块,或可选地还包括对于这些过程、方法、装置、产品或设备固有的其他步骤单元。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
本申请实施例提供的方法及相关装置是参照本申请实施例提供的方法流程图和/或结构示意图来描述的,具体可由计算机程序指令实现方法流程图和/或结构示意图的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。这些计算机程序指令可提供到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或结构示意图一个方框或多个方框中指定的功能的装置。这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或结构示意图一个方框或多个方框中指定的功能。这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或结构示意一个方框或多个方框中指定的功能的步骤。
以上所揭露的仅为本申请较佳实施例而已,当然不能以此来限定本申请之权利范围,因此依本申请权利要求所作的等同变化,仍属本申请所涵盖的范围。

Claims (17)

1.一种基于区块链的数据处理方法,其特征在于,所述方法由所述区块链的任一节点执行,所述方法包括:
在针对所述区块链进行区块同步时,获取所述节点的同步进度列表;所述同步进度列表记录有所述节点针对所述区块链的第一区块同步进度;所述同步进度列表中包含所述节点待同步的N个区块的区块信息;N为正整数;
在所述同步进度列表包含的N个区块信息中选择M个区块信息;M为小于或等于N的正整数;
从所述区块链上同步所述M个区块信息所指示的M个区块,基于所述M个区块的同步,更新所述同步进度列表得到第一更新同步进度列表;所述第一更新同步进度列表记录有所述节点针对所述区块链的第二区块同步进度。
2.根据权利要求1所述的方法,其特征在于,所述从所述区块链上同步所述M个区块信息所指示的M个区块,包括:
从所述区块链上获取所述M个区块信息中每个区块信息指示的区块,得到M个区块;
在所述区块链中获取所述M个区块中每个区块包含的区块数据,得到M个区块数据;
将所述M个区块数据进行并行同步。
3.根据权利要求2所述的方法,其特征在于,所述同步进度列表存储于所述节点的本地数据库中,所述同步进度列表包含的N个区块信息中的每个区块信息是指一个待同步的区块的区块头信息;所述M个区块中每个区块包含的区块数据均未包含区块头信息。
4.根据权利要求1所述的方法,其特征在于,所述基于所述M个区块的同步,更新所述同步进度列表得到第一更新同步进度列表,包括:
基于所述M个区块的同步,将所述同步进度列表中包含的所述M个区块信息进行标记;标记后的M个区块信息用于表征所述节点已同步所述区块链中的所述M个区块;
将包含标记后的M个区块信息的同步进度列表确定为第一更新同步进度列表。
5.根据权利要求1所述的方法,其特征在于,所述同步进度列表是在第一轮询时刻时,通过轮询所述区块链中包含的区块所确定的;
在基于所述M个区块的同步,更新所述同步进度列表得到第一更新同步进度列表之后,所述方法还包括:
在到达第二轮询时刻时,调用列表维护组件;所述第二轮询时刻是指所述第一轮询时刻的下一个针对区块链的轮询时刻;
通过所述列表维护组件轮询所述区块链在所述第二轮询时刻时包含的区块;
将所述节点的本地账本在所述第二轮询时刻时包含的区块,与所述区块链在所述第二轮询时刻时包含的区块进行比较,确定所述节点在所述第二轮询时刻时的待同步的Q个区块;
根据所述节点在所述第二轮询时刻时的待同步的Q个区块,对所述第一更新同步进度列表进行更新,得到第二更新同步进度列表。
6.根据权利要求5所述的方法,其特征在于,所述根据所述节点在所述第二轮询时刻时的待同步的Q个区块,对所述第一更新同步进度列表进行更新,得到第二更新同步进度列表,包括:
获取所述第一更新同步进度列表中包含的待同步的W个区块的区块信息,将所述W个区块的区块信息均确定为第一待同步区块信息,得到W个第一待同步区块信息;
将所述节点在所述第二轮询时刻时的待同步的Q个区块,均确定为第一待同步区块;
将每个第一待同步区块的区块信息,确定为所述节点在所述第二轮询时刻时的第一待同步区块信息,得到Q个第二待同步区块信息;
根据所述Q个第二待同步区块信息与W个第一待同步区块信息,对所述第一更新同步进度列表进行更新,得到第二更新同步进度列表。
7.根据权利要求6所述的方法,其特征在于,所述根据所述Q个第二待同步区块信息与W个第一待同步区块信息,对所述第一更新同步进度列表进行更新,得到第二更新同步进度列表,包括:
将W个第一待同步区块信息所组成的集合,确定为第一信息集合;
将所述Q个第二待同步区块信息所组成的集合,确定为第二信息集合;
确定所述第一信息集合与所述第二信息集合之间的交集集合;
在所述第二信息集合中,将所述交集集合所包含的第二待同步区块信息进行删除,得到去重信息集合;
将所述去重信息集合添加至所述第一更新同步进度列表中,得到第二更新同步进度列表。
8.根据权利要求1所述的方法,其特征在于,所述M个区块信息包括区块信息Si,所述M个区块包括所述区块信息Si所指示的区块Si,i为正整数;
在从所述区块链上同步所述M个区块信息所指示的M个区块之后,所述方法还包括:
对所述区块Si进行区块验证,得到所述区块Si的区块验证结果;
在确定所述区块Si的区块验证结果为验证通过结果时,将所述区块Si写入至所述节点的本地账本中。
9.根据权利要求8所述的方法,其特征在于,所述对所述区块Si进行区块验证,得到所述区块Si的区块验证结果,包括:
获取所述区块Si所包含的一个或多个交易数据;
获取所述区块Si中包含的第一默克尔根与第二默克尔根;所述第一默克尔根用于表征所述一个或多个交易数据的交易默克尔根,所述第二默克尔根用于表征所述一个或多个交易数据的执行结果默克尔根;
根据所述第一默克尔根对所述一个或多个交易数据进行验证处理,得到第一验证子结果;
根据所述第二默克尔根对所述一个或多个交易数据的执行结果进行验证处理,得到第二验证子结果;
若所述第一验证子结果与所述第二验证子结果均为验证通过结果,则确定所述区块Si的验证结果为验证通过结果;
若所述第一验证子结果或所述第二验证子结果为验证失败结果,则确定所述区块Si的验证结果为验证失败结果。
10.根据权利要求9所述的方法,其特征在于,所述根据所述第一默克尔根对所述一个或多个交易数据进行验证处理,得到第一验证子结果,包括:
对所述一个或多个交易数据中的每个交易数据进行哈希计算,得到每个所述交易数据的交易哈希值;
对一个或多个交易哈希值进行默克尔根计算处理,得到所述一个或多个交易哈希值所共同指示的第三默克尔根;
将所述第一默克尔根与所述第三默克尔根进行匹配;
若所述第一默克尔根与所述第三默克尔之间的匹配结果为匹配成功结果,则确定所述第一验证子结果为验证通过结果;
若所述第一默克尔根与所述第三默克尔根之间的匹配结果为匹配失败结果,则确定所述第一验证子结果为验证失败结果。
11.根据权利要求9所述的方法,其特征在于,所述根据所述第二默克尔根对所述一个或多个交易数据的执行结果进行验证处理,得到第二验证子结果,包括:
对每个所述交易数据进行交易执行,得到每个所述交易数据的执行结果哈希值;
对一个或多个执行结果哈希值进行默克尔根计算处理,得到所述一个或多个执行结果哈希值所共同指示的第四默克尔根;
将所述第二默克尔根与所述第四默克尔根进行匹配;
若所述第二默克尔根与所述第四默克尔之间的匹配结果为匹配成功结果,则确定所述第二验证子结果为验证通过结果;
若所述第二默克尔根与所述第四默克尔根之间的匹配结果为匹配失败结果,则确定所述第二验证子结果为验证失败结果。
12.根据权利要求8所述的方法,其特征在于,所述在确定所述区块Si的区块验证结果为验证通过结果时,将所述区块Si写入至所述节点的本地账本中,包括:
在确定所述区块Si的区块验证结果为验证通过结果时,在所述区块链中获取所述区块Si的前继区块;所述前继区块是指所述区块链中的所述区块Si的上一个区块;
基于所述前继区块遍历所述节点的本地账本;
在确定所述节点的本地账本中存在所述前继区块时,将所述区块Si写入至所述节点的本地账本中。
13.根据权利要求12所述的方法,其特征在于,在基于所述前继区块遍历所述节点的本地账本之后,所述方法还包括:
在确定所述节点的本地账本中不存在所述前继区块时,则将所述区块Si缓存到临时缓存组件中;
对所述节点的本地账本进行实时检测;
在检测到所述节点的本地账本中包含所述前继区块时,将所述临时缓存组件中包含的所述区块Si移动至所述节点的本地账本中。
14.一种基于区块链的数据处理装置,其特征在于,包括:
列表获取模块,用于在针对所述区块链进行区块同步时,获取所述节点的同步进度列表;所述同步进度列表记录有所述节点针对所述区块链的第一区块同步进度;所述同步进度列表中包含所述节点待同步的N个区块的区块信息;N为正整数;
信息选择模块,用于在所述同步进度列表包含的N个区块信息中选择M个区块信息;M为小于或等于N的正整数;
区块同步模块,用于从所述区块链上同步所述M个区块信息所指示的M个区块;
第一列表更新模块,用于基于所述M个区块的同步,更新所述同步进度列表得到第一更新同步进度列表;所述第一更新同步进度列表记录有所述节点针对所述区块链的第二区块同步进度。
15.一种计算机设备,其特征在于,包括:处理器、存储器以及网络接口;
所述处理器与所述存储器、所述网络接口相连,其中,所述网络接口用于提供网络通信功能,所述存储器用于存储计算机程序,所述处理器用于调用所述计算机程序,以使所述计算机设备执行权利要求1-13任一项所述的方法。
16.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有计算机程序,所述计算机程序适于由处理器加载并执行权利要求1-13任一项所述的方法。
17.一种计算机程序产品,其特征在于,所述计算机程序产品包括计算机程序,所述计算机程序存储在计算机可读存储介质中,所述计算机程序适于由处理器读取并执行,以使得具有所述处理器的计算机设备执行权利要求1-13任一项所述的方法。
CN202311305096.8A 2023-10-09 2023-10-09 基于区块链的数据处理方法、装置、设备及可读存储介质 Pending CN117335956A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202311305096.8A CN117335956A (zh) 2023-10-09 2023-10-09 基于区块链的数据处理方法、装置、设备及可读存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202311305096.8A CN117335956A (zh) 2023-10-09 2023-10-09 基于区块链的数据处理方法、装置、设备及可读存储介质

Publications (1)

Publication Number Publication Date
CN117335956A true CN117335956A (zh) 2024-01-02

Family

ID=89291396

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202311305096.8A Pending CN117335956A (zh) 2023-10-09 2023-10-09 基于区块链的数据处理方法、装置、设备及可读存储介质

Country Status (1)

Country Link
CN (1) CN117335956A (zh)

Similar Documents

Publication Publication Date Title
CN110442652B (zh) 一种基于区块链的跨链数据处理方法及装置
CN106372533B (zh) 基于区块链技术的内容存储方法
CN111445333B (zh) 区块生成方法、装置、计算机设备以及存储介质
CN112686671B (zh) 基于区块链的智能合约部署方法、装置、设备以及介质
CN111316279A (zh) 用于连接区块链与数字孪生集合的计算机实现的系统和方法
US20210049715A1 (en) Blockchain-based data procesing method, apparatus, and electronic device
CN112287034B (zh) 一种数据同步方法、设备以及计算机可读存储介质
EP4206944A1 (en) Blockchain-based method and apparatus for data processing, device, and readable storage medium
CN111597567B (zh) 数据处理方法、装置、节点设备及存储介质
CN111782551B (zh) 针对区块链项目的测试方法、装置及计算机设备
CN111915301B (zh) 基于区块链的数据处理方法、装置、电子设备及可读介质
CN112883117A (zh) 一种数据同步方法、设备以及计算机可读存储介质
CN115114372A (zh) 基于区块链的数据处理方法、装置、设备及可读存储介质
CN116827957B (zh) 基于多区块链的信息处理方法、装置、设备以及介质
CN113254424B (zh) 数据服务迁移方法、装置及设备
CN116055052A (zh) 基于区块链的数据处理方法、装置、设备及可读存储介质
TW202139127A (zh) 用於與區塊鏈相關聯之服務平台之運算服務
CN111444542A (zh) 一种针对版权文件的数据处理方法、装置及存储介质
CN117335956A (zh) 基于区块链的数据处理方法、装置、设备及可读存储介质
CN116488818A (zh) 基于区块链的数据处理方法、装置、设备及可读存储介质
CN114155000A (zh) 基于区块链的可追溯混凝土质量管理系统
CN113987062A (zh) 一种数据上链存储方法、系统、装置以及存储介质
CN116708463B (zh) 基于多区块链的信息处理方法、装置、设备以及介质
US11775553B2 (en) Data integrity of replicated databases
CN117668104A (zh) 基于区块链的数据处理方法、装置、设备及可读存储介质

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication