CN116977067A - 基于区块链的数据处理方法、装置、设备及可读存储介质 - Google Patents
基于区块链的数据处理方法、装置、设备及可读存储介质 Download PDFInfo
- Publication number
- CN116977067A CN116977067A CN202310110568.8A CN202310110568A CN116977067A CN 116977067 A CN116977067 A CN 116977067A CN 202310110568 A CN202310110568 A CN 202310110568A CN 116977067 A CN116977067 A CN 116977067A
- Authority
- CN
- China
- Prior art keywords
- block
- transaction
- cache data
- consensus
- transaction execution
- 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
Links
- 238000003672 processing method Methods 0.000 title claims abstract description 21
- 238000000034 method Methods 0.000 claims abstract description 140
- 238000012545 processing Methods 0.000 claims abstract description 132
- 238000001514 detection method Methods 0.000 claims description 47
- 238000002360 preparation method Methods 0.000 claims description 27
- 238000004590 computer program Methods 0.000 claims description 16
- 238000004891 communication Methods 0.000 claims description 11
- 230000006870 function Effects 0.000 claims description 4
- 238000004806 packaging method and process Methods 0.000 claims description 3
- 238000010586 diagram Methods 0.000 description 10
- 238000012856 packing Methods 0.000 description 6
- 238000005516 engineering process Methods 0.000 description 4
- 230000000977 initiatory effect Effects 0.000 description 4
- 238000012546 transfer Methods 0.000 description 4
- 238000013473 artificial intelligence Methods 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 2
- 238000012217 deletion Methods 0.000 description 2
- 230000037430 deletion Effects 0.000 description 2
- 230000002085 persistent effect Effects 0.000 description 2
- 230000001960 triggered effect Effects 0.000 description 2
- VLFZHMWZMNJMTK-UHFFFAOYSA-N CCC.CCC.CCC.CCC Chemical compound CCC.CCC.CCC.CCC VLFZHMWZMNJMTK-UHFFFAOYSA-N 0.000 description 1
- 238000007792 addition Methods 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 230000000737 periodic effect Effects 0.000 description 1
- 230000002123 temporal effect Effects 0.000 description 1
- 238000012795 verification Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06Q—INFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
- G06Q40/00—Finance; Insurance; Tax strategies; Processing of corporate or income taxes
- G06Q40/04—Trading; Exchange, e.g. stocks, commodities, derivatives or currency exchange
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/546—Message passing systems or structures, e.g. queues
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Business, Economics & Management (AREA)
- Physics & Mathematics (AREA)
- Accounting & Taxation (AREA)
- Finance (AREA)
- Databases & Information Systems (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Development Economics (AREA)
- General Business, Economics & Management (AREA)
- Technology Law (AREA)
- Strategic Management (AREA)
- Marketing (AREA)
- Computing Systems (AREA)
- Economics (AREA)
- Data Mining & Analysis (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种基于区块链的数据处理方法、装置、设备及可读存储介质,包括:在进行第一区块的共识处理的过程中,通过共识池并行进行第二区块的共识处理;在对第二区块进行共识处理的过程中,按照交易数据序号并行执行交易执行池中的交易,得到交易执行缓存数据,将交易执行池中的交易对应的交易执行缓存数据添加至待合并队列;若第二区块共识通过,且待合并队列中包含第二区块中每个交易分别对应的交易执行缓存数据,且存在第一区块的块缓存数据,则对待合并队列中与第二区块相关的交易执行缓存数据进行冲突合并处理,得到第二区块的块缓存数据,将第二区块的块缓存数据添加至存储队列。采用本发明,可以提升区块链性能。
Description
技术领域
本申请涉及计算机技术领域,尤其涉及一种基于区块链的数据处理方法、装置、设备及可读存储介质。
背景技术
因为区块链的不可篡改性与真实性,企业开始利用区块链网络进行交易数据的存储,以保证交易数据的安全。
目前,在业界大多数的区块链网络中,交易上链时需要经过区块共识、交易执行、存入账本等过程。其中,区块共识属于IO(网络)密集型任务,此时过程的实现主要利用网络资源;交易执行属于CPU(central processing unit,中央处理器密集型)密集型任务,此时过程的实现主要利用CPU资源;存入账本属于IO(硬盘)密集型任务,此时过程的实现主要利用硬盘资源。在某些区块链网络采用的共识算法中,例如,PBFT(实用拜占庭容错算法),每个区块对应的区块共识、交易执行以及存入账本等过程是单线程串行执行的,这就导致网络、CPU、存储等***资源不能全部被充分利用,例如,在进行区块共识时,CPU资源就会被闲置,***资源的闲置不利于区块链性能的提升。
发明内容
本申请实施例提供了一种基于区块链的数据处理方法、装置、设备及可读存储介质,可以充分利用***资源,提升区块链性能。
本申请实施例一方面提供了一种基于区块链的数据处理方法,包括:
在通过共识池进行第一区块的共识处理的过程中,获取第二区块,通过共识池进行第二区块的共识处理;第一区块为第二区块的父区块;第一区块的共识处理和第二区块的共识处理是并行执行的;
在对第二区块进行共识处理的过程中,将第二区块中的交易按照交易数据序号添加至交易执行池中,并行执行交易执行池中的交易,得到交易执行池中的交易对应的交易执行缓存数据,将交易执行池中的交易对应的交易执行缓存数据添加至待合并队列;
若第二区块的共识处理结果为共识通过结果,且待合并队列中包含第二区块中每个交易分别对应的交易执行缓存数据,且存在第一区块的块缓存数据,则对待合并队列中与第二区块相关的交易执行缓存数据进行冲突合并处理,得到第二区块的块缓存数据,将第二区块的块缓存数据添加至存储队列;存储队列中的块缓存数据用于被顺序写入区块链账本中。
本申请实施例一方面提供了一种基于区块链的数据处理装置,包括:
并行共识模块,用于在通过共识池进行第一区块的共识处理的过程中,获取第二区块,通过共识池进行第二区块的共识处理;第一区块为第二区块的父区块;第一区块的共识处理和第二区块的共识处理是并行执行的;
并行执行模块,用于在对第二区块进行共识处理的过程中,将第二区块中的交易按照交易数据序号添加至交易执行池中,并行执行交易执行池中的交易,得到交易执行池中的交易对应的交易执行缓存数据,将交易执行池中的交易对应的交易执行缓存数据添加至待合并队列;
冲突合并模块,用于若第二区块的共识处理结果为共识通过结果,且待合并队列中包含第二区块中每个交易分别对应的交易执行缓存数据,且存在第一区块的块缓存数据,则对待合并队列中与第二区块相关的交易执行缓存数据进行冲突合并处理,得到第二区块的块缓存数据,将第二区块的块缓存数据添加至存储队列;存储队列中的块缓存数据用于被顺序写入区块链账本中。
其中,并行共识模块,包括:
状态确定单元,用于在通过共识池进行第一区块的共识处理的过程中,确定共识池的运行状态;
组装共识单元,用于若共识池的运行状态为运行未饱和状态,则基于交易池组装第二区块,通过共识池进行第二区块的共识处理。
其中,状态确定单元,包括:
第一检测子单元,用于在通过共识池进行第一区块的共识处理的过程中,检测共识池中正在进行共识处理的区块的数量,作为并行共识区块数量;
第一检测子单元,还用于若并行共识区块数量小于第一数量阈值,则确定共识池的运行状态为运行未饱和状态。
其中,共识池包括一个或多个区块共识线程;
状态确定单元,包括:
第二检测子单元,用于在通过共识池进行第一区块的共识处理的过程中,检测一个或多个区块共识线程的运行状态;
第二检测子单元,还用于若一个或多个区块共识线程中包含运行状态为空闲状态的区块共识线程,则确定共识池的运行状态为运行未饱和状态。
其中,共识池包括一个或多个区块共识线程;
组装共识单元,包括:
打包子单元,用于根据区块配置信息从交易池中获取待打包交易,对待打包交易进行打包处理,得到第二区块;
线程选择子单元,用于从一个或多个区块共识线程中,获取运行状态为空闲状态的区块共识线程,作为目标区块共识线程;
线程共识子单元,用于通过目标区块共识线程进行第二区块的共识处理。
其中,线程共识子单元,具体用于通过目标区块共识线程构造针对第二区块的预准备信息,将预准备信息广播至共识节点集群,以使共识节点集群根据预准备信息对第二区块进行预投票处理,得到第一预投票结果;对第二区块进行预投票处理,得到第二预投票结果;将第二预投票结果广播至共识节点集群,以使共识节点集群根据第一预投票结果和第二预投票结果,对第二区块进行预提交处理,得到第一预提交结果;当接收到的第一预投票结果和第二预投票结果中预投票赞成结果的数量超过第二数量阈值时,对第二区块进行预提交处理,得到第二预提交结果;当接收到的第一预提交结果和第二预提交结果中预提交赞成结果的数量超过预提交赞成数量阈值时,确定第二区块的共识处理结果为共识通过结果。
其中,并行执行模块,包括:
交易添加单元,用于在对第二区块进行共识处理的过程中,将第二区块中的交易按照交易数据序号添加至交易执行池中;
交易执行单元,用于获取交易执行池中运行状态为空闲状态的交易执行线程,通过交易执行线程从交易执行池中按序获取待执行交易;待执行交易的交易数量等于运行状态为空闲状态的交易执行线程对应的线程数量;
交易执行单元,还用于并行执行待执行交易,得到待执行交易对应的交易执行缓存数据;
交易执行单元,还用于根据待执行交易对应的区块高度以及交易数据序号,将交易执行缓存数据按序添加至待合并队列。
其中,冲突合并模块,包括:
遍历单元,用于按序遍历待合并队列中与第二区块相关的交易执行缓存数据,获取第k个交易执行缓存数据;k为小于或等于H的正整数;H为第二区块中交易对应的交易总数量;
冲突检测单元,用于对第k个交易执行缓存数据进冲突检测,得到数据冲突检测结果;
第一合并单元,用于若第k个交易执行缓存数据对应的冲突检测结果为数据冲突结果,则对第k个交易执行缓存数据进行冲突合并更新,得到第k个合并更新缓存数据;
第二合并单元,用于若第k个交易执行缓存数据对应的冲突检测结果为数据不冲突结果,则将第k个交易执行缓存数据,作为第k个合并更新缓存数据;
块缓存确定单元,用于将H个合并更新缓存数据,作为第二区块的块缓存数据。
其中,第k个交易执行缓存数据包括交易执行读缓存数据;
冲突检测单元,包括:
获取子单元,用于获取第k个交易执行缓存数据对应的交易的最新交易执行读缓存数据;
检测子单元,用于若最新交易执行读缓存数据与交易执行读缓存数据相同,则确定第k个交易执行缓存数据对应的冲突检测结果为数据不冲突结果;
检测子单元,还用于若最新交易执行读缓存数据与交易执行读缓存数据不相同,则确定第k个交易执行缓存数据对应的冲突检测结果为数据冲突结果。
其中,第k个交易执行缓存数据还包括交易执行写缓存数据;
第一合并单元,包括:
最新执行子单元,用于根据最新交易执行读缓存数据执行第k个交易执行缓存数据对应的交易,得到最新交易写缓存数据;
更新子单元,用于将第k个交易执行缓存数据中的交易执行读缓存数据更新为最新交易执行读缓存数据,将第k个交易执行缓存数据中的交易执行写缓存数据更新为最新交易写缓存数据;
更新子单元,还用于将更新后的第k个交易执行缓存数据,作为第k个合并更新缓存数据。
其中,获取子单元具体用于在已更新缓存数据中查找是否存在与第k个交易执行缓存数据对应的交易的读缓存数据;已更新缓存数据包括存储队列中的块缓存数据以及与第二区块相关的k-1个已更新交易缓存数据分别对应的合并更新缓存数据;k-1个已更新交易缓存数据为在待合并队列中的位置或添加时间处于第k个交易执行缓存数据之前的交易执行缓存数据;若在已更新缓存数据中查找到与第k个交易执行缓存数据对应的交易的读缓存数据,则将已更新缓存数据中与第k个交易执行缓存数据对应的交易的读缓存数据作为最新交易执行读缓存数据;若在已更新缓存数据中未查找到与第k个交易执行缓存数据对应的交易的读缓存数据,则在区块链账本中查找是否存在与第k个交易执行缓存数据对应的交易的读缓存数据;若在区块链账本中查找到第k个交易执行缓存数据对应的交易的读缓存数据,则将区块链账本中与第k个交易执行缓存数据对应的交易的读缓存数据作为最新交易执行读缓存数据;若在区块链账本中未查找到第k个交易执行缓存数据对应的交易的读缓存数据,则将默认空白数据作为最新交易执行读缓存数据。
其中,上述数据处理装置,还包括:
删除模块,用于在将第二区块的块缓存添加至存储队列后,从待合并队列中删除与第二区块相关的交易执行缓存数据。
本申请实施例一方面提供了一种计算机设备,包括:处理器、存储器、网络接口;
上述处理器与上述存储器、上述网络接口相连,其中,上述网络接口用于提供数据通信网元,上述存储器用于存储计算机程序,上述处理器用于调用上述计算机程序,以执行本申请实施例中的方法。
本申请实施例一方面提供了一种计算机可读存储介质,上述计算机可读存储介质中存储有计算机程序,上述计算机程序适于由处理器加载并执行本申请实施例中的方法。
本申请实施例一方面提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中,计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行本申请实施例中的方法。
本申请实施例中,在通过共识池进行第一区块的共识处理的过程中,获取第二区块,继续通过共识池进行第二区块的共识处理,其中,第一区块为第二区块的父区块,第一区块的共识处理和第二区块的共识区块是并行执行的;然后,在对第二区块进行共识处理的过程中,将第二区块中的交易按照交易数据序号添加至交易执行池中,并行执行交易执行池中的交易,得到交易执行池中的交易对应的交易执行缓存数据,将交易执行池中的交易对应的交易执行缓存数据添加至待合并队列;最后,若第二区块的共识处理结果为共识通过结果,且待合并队列中包含第二区块中每个交易分别对应的交易执行缓存数据,且存在第一区块的块缓存数据,则对待合并队列中与第二区块相关的交易执行缓存数据进行冲突合并处理,得到第二区块的块缓存数据,将第二区块的块缓存数据添加至存储队列;存储队列中的块缓存数据用于被顺序写入区块链账本中。通过本申请实施例提供的方法,每个区块的区块共识、交易执行以及存入账本等过程可以并行处理,不同区块间的区块共识、交易执行等过程也可以并行处理,使得网络、CPU、存储等***资源可以同时被尽可能的利用,减少***资源的闲置,从而提升区块链性能。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本申请实施例提供的一种网络架构示意图;
图2a是本申请实施例提供的一种基于区块链的数据处理的场景示意图;
图2b是本申请实施例提供的一种基于区块链的数据处理的场景示意图;
图3是本申请实施例提供的一种基于区块链的数据处理方法的流程示意图;
图4是本申请实施例提供的一种基于区块链的数据处理方法的流程示意图;
图5是本申请实施例提供的一种基于区块链的数据处理装置的结构示意图;
图6是本申请实施例提供的一种计算机设备的结构示意。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
为了便于理解,首先对部分名词进行以下简单解释:
1、区块链(Block chain):狭义上,区块链是一种以区块为基本单位的链式数据结构,区块中利用数字摘要对之前获取的交易历史进行校验,适合分布式记账场景下防篡改和可扩展性的需求;广义上,区块链还指代区块链结构实现的分布式记账技术,包括分布式共识、隐私与安全保护、点对点通信技术、网络协议、智能合约等。
区块链的目标是实现一个分布的数据记录账本,此账本只允许添加,不允许删除。账本底层的基本结构是一个线性的链表。链表由一个个“区块”串联组成,后继区块中记录前继区块的哈希(Hash)值,每个区块(以及区块中的交易)是否合法,可通过计算哈希值的方式进行快速检验。若网络中的节点提议添加一个新的区块,必须经过共识机制对区块达成共识确认。
2、区块(block):是在区块链网络上承载交易数据的数据包,是一种被标记上时间戳和前继区块对应的哈希值的数据结构,区块经过网络的共识机制验证并确认区块中的交易。区块包括区块头(Block Header)以及区块体(Block Body),区块头可以记录当前区块的元信息,包含当前版本号、前继区块对应的哈希值、时间戳、随机数、默克尔树根(MerkleRoot)的哈希值等数据。区块体可以记录一段时间内所生成的详细数据,包括当前区块经过验证的、区块创建过程中生成的所有交易记录或是其他信息,可以理解为账本的一种表现形式。此外,区块体的详细数据可以包括通过默克尔树(Merkle Tree)的哈希过程,生成唯一的Merkle Root记录于区块头。
前继区块,也称父区块(Parent Block),区块链通过在区块头记录区块对应的哈希值以及父区块对应的哈希值实现时间上的排序。
3、哈希值(hash):也称作信息特征值或特征值,哈希值是通过哈希算法将任意长度的输入数据转换为密码并进行固定输出而生成的,不能通过解密哈希值来检索原始输入数据,它是一个单向的加密函数。在区块链中,每个区块(除了初始区块)都包含前继区块的哈希值,哈希值是区块链技术中的潜力核心基础和最重要的方面,它保留了记录和查看数据的真实性,以及区块链作为一个整体的完整性。
4、智能合约(Smart Contract):智能合约的概念具备承诺、协议、数字形式三大要素,因此能够将区块链的应用范围扩展至金融行业交易、支付、结算和清算的各个环节。智能合约是指当一个预先编好的条件被触发时,立即执行相应的合同条款,其工作原理类似于计算机程序的if-then语句。
请参见图1,图1是本申请实施例提供的一种区块链网络的结构示意图。如图1所示的区块链网络可以包括但不限于联盟链所对应的区块链网络。该区块链网络中可以包括多个区块链节点,多个区块链节点具体可以包括区块链节点10a、区块链节点10b、区块链节点10c、区块链节点10d、…、区块链节点10n。其中,每个区块链节点在进行正常工作时可以接收到外界发送的数据,并基于接收到的数据进行区块上链处理,也可以向外界发送数据。为了保证各个区块链节点之间的数据互通,每个区块链节点之间可以存在数据连接,例如区块链节点10a和区块链节点10b之间存在数据连接,区块链节点10a和区块链节点10c之间存在数据连接,区块链节点10b和区块链节点10c之间存在数据连接。
可以理解的是,区块链节点之间可以通过上述数据连接进行数据或者区块传输。区块链网络可以基于节点标识实现区块链节点之间的数据连接,对于区块链网络中的每个区块链节点,均具有与其对应的节点标识,而且上述每个区块链节点均可以存储与自身有相连关系的其他区块链节点的节点标识,以便后续根据其他区块链节点的节点标识,将获取到的数据或生成的区块广播至其他区块链节点,例如区块链节点10a中可以维护一个如表1所示的节点标识列表,该节点标识列表保存着其他节点的节点名称和节点标识:
表1
节点名称 | 节点标识 |
节点10a | AAA.AAA.AAA.AAA |
节点10b | BBB.BBB.BBB.BBB |
节点10c | CCC.CCC.CCC.CCC |
节点10d | DDD.DDD.DDD.DDD |
… | … |
节点10n | EEE.EEE.EEE.EEE |
其中,节点标识可为网络之间互联的协议(Internet Protocol,IP)地址以及其他任意一种能够用于标识区块链网络中节点的信息,表1中仅以IP地址为例进行说明。例如,区块链节点10a可以通过节点标识BBB.BBB.BBB.BBB向区块链节点10b发送信息(例如,区块),且区块链节点10b可以通过节点标识AAA.AAA.AAA.AAA确定该信息是由区块链节点10a所发送的。
在区块链中,在将一个区块进行上链之前,该区块必须经过区块链网络中的共识节点进行共识,在共识通过后才能将该区块添加到区块链上。可以理解的是,当区块链被用于政府或者商业机构的一些场景中时,并非区块链中的所有参与节点(即上述区块链节点***中的区块链节点)都有足够的资源和必要性成为区块链的共识节点。例如,在图1所示的区块链网络中,可以将区块链节点10a、区块链节点10b、区块链节点10c和区块链节点10d作为该区块链网络中的共识节点。区块链网络中的共识节点参与共识,也就是对区块(包含一批交易)进行共识,即对区块进行投票;而非共识节点不参与共识,但会帮助传播区块和投票消息,以及相互同步状态等。
在本申请实施例中,如图1所示的区块链网络中,具有共识功能的区块链节点,例如,区块链节点10a,若在通过共识池进行第一区块的共识处理的过程中,可以获取第二区块,通过共识池进行第二区块的共识处理。其中,第一区块为第二区块的父区块。也就是说,区块链节点10a可以通过共识池并行执行第一区块的共识处理和第二区块的共识处理。此外,在对第二区块进行共识处理的过程中,区块链节点10a可以将第二区块中的交易按照交易数据序号添加至交易执行池中,并行执行交易执行池中的交易,得到交易执行池中的交易对应的交易执行缓存数据,然后将交易执行池中的交易对应的交易执行缓存数据添加至待合并队列,也就是说,交易执行与区块共识可以并行处理,交易与交易之间也可以并行执行。但是,可以理解,为了保证数据的安全性以及数据的准确性,只有当区块链节点10a确定第二区块的共识处理结果为共识通过结果,且待合并队列中包含第二区块中每个交易分别对应的交易执行缓存数据,且存在第一区块的块缓存数据时,区块链节点10a才会对待合并队列中与第二区块相关的交易执行缓存数据进行冲突合并处理,得到第二区块的块缓存数据,将第二区块的块缓存数据添加至存储队列。其中,存储队列中的块缓存数据用于被顺序写入区块链账本中。其中,冲突合并处理是按照交易数据序号,一个个地对比交易中的合约执行时读取的数据是否被前序交易执行时改变了,如果改变了,需要根据最新的数据再次执行一次交易,更新该交易对应的交易执行缓存数据;如果没改变,则保留该交易对应的交易执行缓存数据。
其中,可以理解的是,上述的数据连接不限定连接方式,可以通过有线通信方式进行直接或间接地连接,也可以通过无线通信方式进行直接或间接地连接,还可以通过其他连接方式,本申请在此不做限制。
可以理解的是,本申请实施例所提供的数据处理方法可以由计算机设备执行,计算机设备包括但不限于上述主链节点(可以为终端或者服务器)、子链节点(可以为终端或者服务器)、终端设备。上述服务器可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式***,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、CDN、以及大数据和人工智能平台等基础云计算服务的云服务器。上述终端可以是智能手机、平板电脑、笔记本电脑、台式计算机、智能音箱、智能手表等,但并不局限于此。
可以理解的是,本申请实施例可应用于各种场景,包括但不限于云技术、人工智能、智慧交通、辅助驾驶等场景。例如,区块链节点***可以对车载终端所发送的一些驾驶行为数据、道路轨迹数据等等进行共识,共识通过后对其进行上链存储。
可以理解的是,在本申请的具体实施方式中,涉及到的交易数据、状态数据等相关的数据,当本申请以上实施例运用到具体产品或技术中时,需要获得用户许可或者同意,且相关数据的收集、使用和处理需要遵守相关国家和地区的相关法律法规和标准。
为了便于叙述,全文将区块高度为X的区块命名为区块X,并将区块高度为X叙述为区块高度X,X为正整数。例如将区块高度为1的区块命名为区块1,将区块高度为1叙述成区块高度1;将区块高度为m的区块命名为区块m,将区块高度为m叙述成区块高度m,其他区块高度对应的区块命名亦如此,此处不再一一进行赘述。
可以理解的是,不同区块链网络可以使用不同的共识算法,不同共识算法对应的区块共识与交易执行的过程有所不同,为更好地理解上述并行执行的过程,以当前区块链网络采用PBFT共识算法为例进行说明。在采用PBFT共识算法的区块链网络中,区块的组装与共识的发起通常由主节点(也可称为出块节点)完成,其中,主节点是基于PBFT共识算法从所有的区块链节点中选择出来的区块链节点。在采用PBFT共识算法的区块链网络中,主节点未出现故障或者区块链网络未出现错误时,主节点通常不会更改,即始终由同个区块链节点负责区块的打包与共识的发起。
请一并参见图2a-图2b,其中,如图2a-图2b所示的区块链节点20a和区块链节点20b均可以为上述图1所示的区块链网络中的任一区块链节点,如,区块链节点20a为区块链节点10a,区块链节点20b为区块链节点10n;区块链节点20a和区块链节点20b也可以为同一区块链节点,如区块链节点20a和区块链节点20b均为区块链节点10a。
请先参见图2a,图2a是本申请实施例提供的一种基于区块链的数据处理的场景示意图。如图2a所示,区块链节点20a为当前区块链网络中的主节点。区块链节点20a作为主节点,需要负责区块的组装与共识的发起。如图2a所示,区块链节点20a可以根据区块配置信息,从交易池中获取待打包交易,然后基于待打包交易,生成区块m。其中,交易池用于存储区块链网络中已知但尚未包含在区块链中的交易,例如,交易Tx1、交易Tx2、…、交易Txn,主节点在组装新区块时,均是从交易池中获取的固定数量的待打包交易交生成新区块,不过每当新区块共识达成然后***到区块链结构之后,才会触发交易池的刷新操作,即删除掉已经包含在区块链中的交易。
请再参见图2a,区块链节点20a组装区块m后,会将区块m添加至共识池中,然后通过共识池发起针对区块m的共识,即将区块m广播至区块链网络中,然后区块链节点20a会和区块链网络中的共识节点一起进行区块m的共识。其中,共识池可以包括多个区块共识线程,一个区块共识线程可以完成一个区块的共识,因此当多个区块被添加至共识池中时,可以通过不同的区块共识线程,并行发起针对多个区块的共识。如图2a所示,在区块链节点20a将区块m添加进共识池的同时,区块链节点20a会确定共识池的运行状态,若区块链节点20a确定共识池处于运行未饱和状态,区块链节点20a会从交易池中获取新的待打包交易,然后基于新的待打包交易,生成区块m+1。其中,共识池处于运行未饱和状态是指共识池的区块数量未达到共识池的最大区块容纳数量,或者,共识池中有运行状态为空闲状态的区块共识线程。然后,区块链节点20a会将区块m+1也添加至共识池中,然后通过共识池发起针对区块m+1的共识。可以理解,区块的共识需要一定的时间,因此,区块链节点20a进行区块m+1的共识时,区块m的共识也可能仍未完成,即对于区块链节点20a来说,区块m和区块m+1的共识是并行执行的,二者互不影响。
请一并参见图2b,图2b是本申请实施例提供的一种基于区块链的数据处理的场景示意图。如图2a或者图2b所示,区块m可以包括交易T(m,1)、…、交易T(m,n),区块m+1可以包括交易T(m+1,1)、…、交易T(m+1,n)。其中,交易T(a,b)下标中的a表示交易属于区块a,下标中的b表示交易数据序号,a以及b均为正整数,b小于或等于区块a中交易的总数量。
如图2b所示,区块链节点20b在获取到区块m后,会将区块m放入共识池中,同时将区块m放入交易执行池中;然后,区块链节点20b可以继续获取区块m+1,然后将区块m+1放入共识池中,同时将区块m+1放入交易执行池中。如图2b所示,区块链节点20b可以通过共识池,并行地对每个区块进行共识,区块链节点20b可以并行执行区块m的共识处理和区块m+1的共识处理。其中,共识处理的过程取决于区块链网络中使用的共识算法,在采用PBFT共识算法的区块链网络中,共识处理过程包括预准备阶段、准备阶段以及提交阶段,也就是说,区块需要通过三阶段协议达成共识。
如图2b所示,在区块链节点20b通过共识池进行区块的并行共识的同时,区块链节点20b可以通过交易执行池进行交易的并行执行。如图2b所示,区块链节点20b将区块m方法交易执行池时,会按照交易数据序号将交易添加至交易执行池中,即将T(m,1)、…、交易T(m,n)顺序添加至交易执行池中,在获取到区块m+1后,区块链节点20b会顺序将交易T(m+1,1)、…、交易T(m+1,n)顺序添加至交易执行池中。当交易执行池有空闲的交易执行线程时,区块链节点20b可以通过交易执行池并行执行T(m,1)、…、交易T(m,n)、T(m+1,1)、…、交易T(m+1,n),得到每个交易分别对应的交易执行缓存数据,即交易执行缓存数据C(m,1)、…、交易执行缓存数据C(m,n)、交易执行缓存数据C(m+1,1)、…、交易执行缓存数据C(m+1,n),然后,区块链节点20b会按照交易执行缓存数据对应的区块高度以及交易数据序号,将交易执行缓存数据按序添加至待合并队列中。其中,交易执行缓存数据中可以包括交易执行前需要读取的交易执行读缓存数据以及执行完成后需要写入区块链账本的交易执行写缓存数据。
可以理解,交易的执行与区块的共识可以并行执行,但是交易执行完成后,需要等到区块共识通过后,区块链节点20b才能确定其对应的交易执行缓存数据需要写入区块链中。此外,可以理解,区块链节点20b并行执行多个交易时,是假设性地认为上述多个交易之间是没有交集、互不影响的,即交易对应的交易执行缓存数据都是不同的数据。而实际应用时,上述多个交易之间可能存在交集,因此,区块链节点20b在确定某个区块共识通过时,需要先对该区块对应的交易执行缓存数据进行冲突合并处理,得到该区块对应的块缓存数据。为便于理解,以区块m为例,如图2b所示,区块链节点20b在确定区块m共识通过后,会对交易执行缓存数据C(m,1)、…、交易执行缓存数据C(m,n)进行冲突合并处理,得到区块m块缓存数据。其中,冲突合并处理是按照交易数据序号,一个个地对比交易中的合约执行时读取的数据是否被前序交易执行时改变了,如果改变了,需要根据最新的数据再次执行一次交易,更新该交易对应的交易执行缓存数据;如果没改变,则保留该交易对应的交易执行缓存数据。其中,冲突合并处理的具体实现过程可以参见下述图4所对应实施例中的描述。
如图2b所示,区块链节点20b会先将合并好的区块m块缓存数据添加至存储队列中,可以理解,为了保证存储顺序,需要等待前序区块(区块m-1)的块缓存数据已经进入存储队列后,区块链节点20b才会将区块m块缓存数据添加至存储队列中。最后,区块链节点20b会按照存储队列中的先后顺序,将其中的块缓存数据顺序写入区块链账本中,以实现持久化存储。
上述可知,本申请可以提供一种区块并行共识与执行、区块与区块间并行共识、以及区块与区块间并行执行的解决方案,从而充分利用***资源,大大地提升区块链网络的性能。
进一步地,请参见图3,图3是本申请实施例提供的一种基于区块链的数据处理方法的流程示意图。其中,该数据处理方法可以由区块链节点(例如,上述图1所对应实施例中区块链节点***中的任一区块链节点)执行。以下将以本数据处理方法由区块链节点执行为例进行说明。其中,该基于区块链的数据处理方法至少可以包括以下步骤S101-步骤S103:
步骤S101,在通过共识池进行第一区块的共识处理的过程中,获取第二区块,通过共识池进行第二区块的共识处理;第一区块为第二区块的父区块;第一区块的共识处理和第二区块的共识处理是并行执行的。
具体的,区块链网络中的区块链节点可以分为共识节点、数据节点以及轻节点,其中,共识节点负责区块链全网的共识,在共识节点中,可以基于区块链网络中的共识算法选择出一个主节点,用于负责区块的组装以及共识的发起。对于区块链网络中交易被写入账本的过程可以为,客户端发送交易至数据节点或轻节点,随后该交易以接力棒的方式在区块链网络中的数据节点或轻节点之间传递,直到主节点收到该交易数据,主节点再将该交易打包进区块,与其他共识节点之间进行共识,在共识通过后,将携带该交易的区块写入账本。可以理解,基于共识算法的不同,主节点可以在共识节点间进行定期轮换,也可以是当前主节点出现故障后,再重新选择新的主节点。此外,不同共识算法的共识处理过程不同,不过现有的共识处理过程通常需要多个共识节点互相广播信息,等待时间较长,并且每个区块的共识和执行通常是单线程串行执行,这就导致网络、CPU、存储等***资源不能全部被充分利用。因此,本申请提出一种区块共识与执行并行化的方法,将多个区块的共识流程、执行、存储流程并行处理,充分利用***资源。
具体的,若区块链节点为非主节点的共识节点,则上述在通过共识池进行第一区块的共识处理的过程中,获取第二区块,通过共识池进行第二区块的共识处理的一个可行实施过程,可以为:在通过共识池进行第一区块的共识处理的过程中,确定共识池的运行状态;获取主节点发送的第二区块;若共识池的运行状态为运行未饱和状态,则通过共识池进行第二区块的共识处理。其中,共识池的运行状态为运行未饱和状态,是指共识池中可以并行共识的区块数量未达到最大允许并行的数量。
具体的,若区块链节点为主节点,则上述在通过共识池进行第一区块的共识处理的过程中,获取第二区块,通过共识池进行第二区块的共识处理的一个可行实施过程,可以为:在通过共识池进行第一区块的共识处理的过程中,确定共识池的运行状态;若共识池的运行状态为运行未饱和状态,则基于交易池组装第二区块,通过共识池进行第二区块的共识处理。
其中,在通过共识池进行第一区块的共识处理的过程中,确定共识池的运行状态的一个可行实施过程,可以为:在通过共识池进行第一区块的共识处理的过程中,检测共识池中正在进行共识处理的区块的数量,作为并行共识区块数量;若并行共识区块数量小于第一数量阈值,则确定共识池的运行状态为运行未饱和状态。其中,第一数量阈值用于表征共识池最多可以并行共识的区块的数量。例如,第一数量阈值为8,此时共识中正在进行共识处理的区块的数量为5,则可以确定共识池的运行状态为运行未饱和状态。可以理解,第一数量阈值可以根据实际应用场景进行设定,或是根据其他情况进行设定均可。
其中,共识池包括一个或多个区块共识线程;在通过共识池进行第一区块的共识处理的过程中,确定共识池的运行状态的一个可行实施过程,可以为:在通过共识池进行第一区块的共识处理的过程中,检测一个或多个区块共识线程的运行状态;若一个或多个区块共识线程中包含运行状态为空闲状态的区块共识线程,则确定共识池的运行状态为运行未饱和状态。例如,区块链节点检测一个或多个区块共识线程的运行状态后,确定当前共识池中包括有空闲区块共识线程E1、空闲区块共识线程E2、空闲区块共识线程E3、空闲区块共识线程E4、空闲区块共识线程E5、空闲区块共识线程E6、空闲区块共识线程E7、忙碌区块共识线程E8以及忙碌区块共识线程E9,其中,空闲区块共识线程是指运行状态为空闲状态的区块共识线程,即没有在进行区块共识处理的线程;忙碌区块共识线程是指运行状态为忙碌状态的区块共识线程,即正在进行区块共识处理的线程。因此,区块链节点可以确定共识池的运行状态为运行未饱和状态,之后,区块链节点可以从空闲区块共识线程任意选择一个,去进行第二区块的共识处理。可以理解,共识池中的区块共识线程的数量可以根据实际应用场景进行设定,或是根据其他情况进行设定均可。
具体的,共识池可以包括一个或多个区块共识线程,此时组装第二区块,通过共识池进行第二区块的共识处理的一个可行实施过程,可以为:根据区块配置信息从交易池中获取待打包交易,对待打包交易进行打包处理,得到第二区块;从一个或多个区块共识线程中,获取运行状态为空闲状态的区块共识线程,作为目标区块共识线程;通过目标区块共识线程进行第二区块的共识处理。其中,区块配置信息可以包括区块相关的配置信息,例如,区块应该包含的交易的固定数量。其中,获取运行状态为空闲状态的区块共识线程可以为随机选择,也可以根据实际应用场景进行设定,或是根据其他情况进行设定均可。
具体的,在区块链网络采用PBFT共识算法时,PBFT共识处理包括三个阶段,即预准备阶段、准备阶段以及提交阶段,此时通过目标区块共识线程进行第二区块的共识处理的一个可行实施过程,可以为:通过目标区块共识线程构造针对第二区块的预准备信息,将预准备信息广播至共识节点集群,以使共识节点集群根据预准备信息对第二区块进行预投票处理,得到第一预投票结果;对第二区块进行预投票处理,得到第二预投票结果;将第二预投票结果广播至共识节点集群,以使共识节点集群根据第一预投票结果和第二预投票结果,对第二区块进行预提交处理,得到第一预提交结果;当接收到的第一预投票结果和第二预投票结果中预投票赞成结果的数量超过第二数量阈值时,对第二区块进行预提交处理,得到第二预提交结果;当接收到的第一预提交结果和第二预提交结果中预提交赞成结果的数量超过预提交赞成数量阈值时,确定第二区块的共识处理结果为共识通过结果。例如,主节点在进行针对区块X的共识时,会先广播一条针对区块m的预准备信息给所有共识节点,以发起针对区块m的共识。然后,其他共识节点在收到主节点发送的预准备消息后对该预准备消息进行校验,校验通过后接受该预准备消息并进入准备阶段。此时所有的共识节点会广播一条准备消息(包含预投票赞成结果与预投票反对结果中的一个)给其他所有共识节点,并将这条准备消息写入日志,当共识节点收到来自其他共识节点的准备消息时,会对其校验成功后就会将其写入日志,当共识节点已收到区块X对应的预准备消息以及2f+1(f通常指允许出错的共识节点的最大数量,2f+1即上述第二数量阈值)条对应的来自不同共识节点(可以包含自己)的包含预投票赞成结果的准备消息时,此时可以认为区块X已准备好,进入提交阶段。然后,共识节点广播一条提交消息(包含预提交赞成结果与预提交反对结果中的一个),并将其写入日志;当该共识节点收到一条提交消息时,对其校验成功后,可以将其写入日志。当区块X已准备好,并且共识节点收到2f+1条来自不同共识节点(可包括自己)的包含预提交赞成结果的与区块X对应的提交消息时,可以认为区块X已提交,即区块X共识通过。
步骤S102,在对所述第二区块进行共识处理的过程中,将所述第二区块中的交易按照交易数据序号添加至交易执行池中,并行执行所述交易执行池中的交易,得到所述交易执行池中的交易对应的交易执行缓存数据,将所述交易执行池中的交易对应的交易执行缓存数据添加至待合并队列。
具体的,在对第二区块进行共识处理的过程中,将第二区块中的交易按照交易数据序号添加至交易执行池中;获取交易执行池中运行状态为空闲状态的交易执行线程,通过交易执行线程从交易执行池中按序获取待执行交易;待执行交易的交易数量等于运行状态为空闲状态的交易执行线程对应的线程数量;并行执行待执行交易,得到待执行交易对应的交易执行缓存数据;根据待执行交易对应的区块高度以及交易数据序号,将交易执行缓存数据按序添加至待合并队列。例如,以第二区块为上述图2b所示的区块m+1为例,区块m+1包含有交易T(m+1,1)、…、交易T(m+1,n),区块链节点20b在按序将交易T(m+1,1)、…、交易T(m+1,n)添加至交易执行池。区块链节点20b可以定时确定交易执行池中运行状态为空闲状态的交易执行线程,假设此时交易执行池中包含有空闲交易执行线程E1、空闲交易执行线程E2、空闲交易执行线程E3、空闲交易执行线程E4、空闲交易执行线程E5、空闲交易执行线程E6、空闲交易执行线程E7、忙碌交易执行线程E8以及忙碌交易执行线程E9,可知交易执行池中目前拥有7个运行状态为空闲状态的交易执行线程,此时,区块链节点20b会按序从交易执行池中获取7个待执行交易,假设此时交易执行池中包含的交易有交易T(m,n-1)、T(m,n)、T(m+1,1)、…、交易T(m+1,n),则区块链节点20b可以获取交易T(m,n-1)、T(m,n)、T(m+1,1)、…、交易T(m+1,5)作为待执行交易,然后并行执行这7个待执行交易,即将交易T(m,n-1)添加至空闲交易执行线程E1中,将交易T(m,n)添加至空闲交易执行线程E2中,将交易T(m+1,1)添加至空闲交易执行线程E3中,将交易T(m+1,2)添加至空闲交易执行线程E4中,将交易T(m+1,3)添加至空闲交易执行线程E5中,将交易T(m+1,4)添加至空闲交易执行线程E6中,以及将交易T(m+1,5)添加至空闲交易执行线程E7中。
具体的,交易对应的交易执行缓存数据包括交易执行前需要读取的交易执行读缓存数据以及执行完成后需要写入区块链账本的交易执行写缓存数据。可以理解,区块链节点并行执行多个交易时,是假设性地认为上述多个交易之间是没有交集、互不影响的,即交易对应的交易执行缓存数据都是不同的数据。而实际应用时,上述多个交易之间可能存在交集,即交易数据序号靠前的交易对应的交易执行缓存数据,会对交易数据序号靠后的交易执行缓存数据造成影响,因此,区块链节点还需要以区块为单位,对区块包含的交易对应的交易执行缓存数据进行冲突合并处理,才能得到区块应当写入账本的块缓存数据。
可以理解,并行执行交易时,由于交易执行线程有数量限制,第二区块中的交易可能会出现部分执行完成,而部分等待执行的情况,因此区块链节点会先按照交易数据序号将交易对应的交易执行缓存数据添加至待合并队列,等待进行冲突合并处理。
步骤S103,若所述第二区块的共识处理结果为共识通过结果,且所述待合并队列中包含所述第二区块中每个交易分别对应的交易执行缓存数据,且存在所述第一区块的块缓存数据,则对所述待合并队列中与所述第二区块相关的交易执行缓存数据进行冲突合并处理,得到所述第二区块的块缓存数据,将所述第二区块的块缓存数据添加至所述存储队列;所述存储队列中的块缓存数据用于被顺序写入区块链账本中。
具体的,冲突合并处理是按照交易数据序号,一个个地对比交易中的合约执行时读取的交易执行读缓存数据是否被前序交易执行时改变了,如果改变了,需要根据最新的数据再次执行一次交易,更新该交易对应的交易执行缓存数据;如果没改变,则保留该交易对应的交易执行缓存数据。例如,第二区块中,交易数据序号为1的交易1为“A向B转账5”,交易数据序号为2的交易2为“A向C转账3”,交易数据序号为3的交易3为“E向F转账2”,区块链节点并行执行交易1、交易2以及交易3,此时A的账户余额为10,E的账户余额为8,则交易1对应的交易执行缓存数据中,A的账户余额为5;交易2对应的交易执行缓存数据中,A的账户余额为7;交易3对应的交易执行缓存数据中,E的账户余额为6。显然,交易1执行后应该更改A的账户余额,因此交易2对应的交易执行缓存数据并不准确,此时可以重新执行交易2,此时读到A的账户余额就为交易1执行后A的账户余额,即5,因此,交易2执行后,A的账户余额就该为2了;另外,交易1与交易2执行后均不需要更改E的账户余额,因此交易3的交易执行缓存数据可以认为是正确的,可以直接使用。
具体的,在按照交易数据序号对第二区块中所有交易均进行冲突合并处理后,就得到了第二区块的块缓存数据,为了保证存储顺序,需要等待前序区块(即第一区块)的块缓存数据已经进入存储队列后,区块链节点才会将第二区区块的块缓存数据添加至存储队列中。最后,区块链节点会按照存储队列中的先后顺序,将其中的块缓存数据顺序写入区块链账本中,以实现持久化存储。
可选的,在将第二区块的块缓存添加至存储队列后,就可以从待合并队列中删除与第二区块相关的交易执行缓存数据了。
通过本申请实施例提供的方法,每个区块的区块共识、交易执行以及存入账本等过程可以并行处理,不同区块间的区块共识、交易执行等过程也可以并行处理,使得网络、CPU、存储等***资源可以同时被尽可能的利用,减少***资源的闲置,从而提升区块链性能。
进一步地,请参见图4,图4是本申请实施例提供的一种基于区块链的数据处理方法的流程示意图。其中,该数据处理方法可以由区块链节点(例如,上述图1所对应实施例中区块链节点***中的任一区块链节点)执行。以下将以本数据处理方法由区块链节点执行为例进行说明。其中,该基于区块链的数据处理方法至少可以包括以下步骤S201-步骤S207:
步骤S201,在通过共识池进行第一区块的共识处理的过程中,获取第二区块,通过所述共识池进行所述第二区块的共识处理;所述第一区块为所述第二区块的父区块;所述第一区块的共识处理和所述第二区块的共识处理是并行执行的。
步骤S202,在对所述第二区块进行共识处理的过程中,将所述第二区块中的交易按照交易数据序号添加至交易执行池中,并行执行所述交易执行池中的交易,得到所述交易执行池中的交易对应的交易执行缓存数据,将所述交易执行池中的交易对应的交易执行缓存数据添加至待合并队列。
具体的,步骤S201-步骤202的实现过程,可以参见上述步骤S101-S102的具体描述,这里不再进行赘述。
步骤S203,若所述第二区块的共识处理结果为共识通过结果,且所述待合并队列中包含所述第二区块中每个交易分别对应的交易执行缓存数据,且存在所述第一区块的块缓存数据,则按序遍历所述待合并队列中与所述第二区块相关的交易执行缓存数据,获取第k个交易执行缓存数据。
具体的,k为小于或等于H的正整数;H为所述第二区块中交易对应的交易总数量。
步骤S204,对所述第k个交易执行缓存数据进冲突检测,得到数据冲突检测结果。
具体的,第k个交易执行缓存数据包括交易执行读缓存数据;对第k个交易执行缓存数据进冲突检测,得到数据冲突检测结果的一个可行实施过程,可以为:获取第k个交易执行缓存数据对应的交易的最新交易执行读缓存数据;若最新交易执行读缓存数据与交易执行读缓存数据相同,则确定第k个交易执行缓存数据对应的冲突检测结果为数据不冲突结果;若最新交易执行读缓存数据与交易执行读缓存数据不相同,则确定第k个交易执行缓存数据对应的冲突检测结果为数据冲突结果。其中,最新交易执行读缓存数据与交易执行读缓存数据相同说明前序交易的执行并未影响到第k个交易,因此可以确定第k个交易执行缓存数据对应的冲突检测结果为数据不冲突结果;最新交易执行读缓存数据与交易执行读缓存数据不相同,说明前序交易的执行影响到第k个交易,因此可以确定第k个交易执行缓存数据对应的冲突检测结果为数据冲突结果。
具体的,获取第k个交易执行缓存数据对应的交易的最新交易执行读缓存数据的一个可行实施过程,可以为:在已更新缓存数据中查找是否存在与第k个交易执行缓存数据对应的交易的读缓存数据;已更新缓存数据包括存储队列中的块缓存数据以及与第二区块相关的k-1个已更新交易缓存数据分别对应的合并更新缓存数据;k-1个已更新交易缓存数据为在待合并队列中的位置或添加时间处于第k个交易执行缓存数据之前的交易执行缓存数据;若在已更新缓存数据中查找到与第k个交易执行缓存数据对应的交易的读缓存数据,则将已更新缓存数据中与第k个交易执行缓存数据对应的交易的读缓存数据作为最新交易执行读缓存数据;若在已更新缓存数据中未查找到与第k个交易执行缓存数据对应的交易的读缓存数据,则在区块链账本中查找是否存在与第k个交易执行缓存数据对应的交易的读缓存数据;若在区块链账本中查找到第k个交易执行缓存数据对应的交易的读缓存数据,则将区块链账本中与第k个交易执行缓存数据对应的交易的读缓存数据作为最新交易执行读缓存数据;若在区块链账本中未查找到第k个交易执行缓存数据对应的交易的读缓存数据,则将默认空白数据作为最新交易执行读缓存数据。也就是说,获取第k个交易执行缓存数据对应的交易的最新交易执行读缓存数据时,区块链节点会优先在第k-1个合并更新缓存数据(即对第k-1个交易执行缓存数据进行合并冲突处理后,得到的合并更新缓存数据)进行相关数据的读取,如果没有找到,再继续查询第k-2个合并更新缓存数据,以此类推;若区块链节点在与第二区块相关的合并更新缓存数据均未查询到相关数据,则区块链节点会从存储队列中的块缓存数据中进行查询,先查询其父区块(即第一区块)的块缓存数据,再查询第一区块的父区块对应的块缓存数据,以此类推;若区块链节点在存储队列中也未查询到相关数据,区块链节点再去区块链账本中查询相关数据;区块链节点会将查询到的相关数据,作为最新交易执行读缓存数据;如果在区块链账本中也没有获取到相关的数据,则将默认空白数据作为最新交易执行读缓存数据。
步骤S205,若所述第k个交易执行缓存数据对应的冲突检测结果为数据冲突结果,则对所述第k个交易执行缓存数据进行冲突合并更新,得到第k个合并更新缓存数据。
具体的,第k个交易执行缓存数据还包括交易执行写缓存数据;对第k个交易执行缓存数据进行冲突合并更新,得到第k个合并更新缓存数据的一个可行实施过程,可以为:根据最新交易执行读缓存数据执行第k个交易执行缓存数据对应的交易,得到最新交易写缓存数据;将第k个交易执行缓存数据中的交易执行读缓存数据更新为最新交易执行读缓存数据,将第k个交易执行缓存数据中的交易执行写缓存数据更新为最新交易写缓存数据;将更新后的第k个交易执行缓存数据,作为第k个合并更新缓存数据。
步骤S206,若所述第k个交易执行缓存数据对应的冲突检测结果为数据不冲突结果,则将所述第k个交易执行缓存数据,作为第k个合并更新缓存数据。
步骤S207,将H个合并更新缓存数据,作为所述第二区块的块缓存数据,将所述第二区块的块缓存数据添加至所述存储队列;所述存储队列中的块缓存数据用于被顺序写入区块链账本中。
采用本申请实施例提供的区块共识、交易执行并行化的方案,将共识的每个区块的共识流程、执行、存储流程并行处理,使得IO(网络)密集型的区块共识流程能够充分利用网络,CPU密集性的交易执行流程能够充分利用CPU,IO(硬盘)密集型的存储流程能够充分利用硬盘,提高共识的效率,并且使得共识的性能仅受限于这三者的瓶颈,通过资源的扩容可以提高共识的性能。
请参见图5,图5是本申请实施例提供的一种数据处理装置的结构示意图。该数据处理装置可以是运行于计算机设备的一个计算机程序(包括程序代码),例如该数据处理装置为一个应用软件;该装置可以用于执行本申请实施例提供的数据处理方法中的相应步骤。如图5所示,该数据处理装置1可以包括:并行共识模块11、并行执行模块12以及冲突合并模块13。
并行共识模块11,用于在通过共识池进行第一区块的共识处理的过程中,获取第二区块,通过共识池进行第二区块的共识处理;第一区块为第二区块的父区块;第一区块的共识处理和第二区块的共识处理是并行执行的;
并行执行模块12,用于在对第二区块进行共识处理的过程中,将第二区块中的交易按照交易数据序号添加至交易执行池中,并行执行交易执行池中的交易,得到交易执行池中的交易对应的交易执行缓存数据,将交易执行池中的交易对应的交易执行缓存数据添加至待合并队列;
冲突合并模块13,用于若第二区块的共识处理结果为共识通过结果,且待合并队列中包含第二区块中每个交易分别对应的交易执行缓存数据,且存在第一区块的块缓存数据,则对待合并队列中与第二区块相关的交易执行缓存数据进行冲突合并处理,得到第二区块的块缓存数据,将第二区块的块缓存数据添加至存储队列;存储队列中的块缓存数据用于被顺序写入区块链账本中。
其中,并行共识模块11、并行执行模块12以及冲突合并模块13的具体实现方式可以参见上述图3所对应实施例中对步骤S101-步骤S103的描述,这里不再进行赘述。
其中,并行共识模块11,包括:状态确定单元111以及组装共识单元112。
状态确定单元111,用于在通过共识池进行第一区块的共识处理的过程中,确定共识池的运行状态;
组装共识单元112,用于若共识池的运行状态为运行未饱和状态,则基于交易池组装第二区块,通过共识池进行第二区块的共识处理。
其中,状态确定单元111以及组装共识单元112的具体实现方式可以参见上述图3所对应实施例中对步骤S101的描述,这里不再进行赘述。
其中,状态确定单元111,包括:第一检测子单元1111。
第一检测子单元1111,用于在通过共识池进行第一区块的共识处理的过程中,检测共识池中正在进行共识处理的区块的数量,作为并行共识区块数量;
第一检测子单元1111,还用于若并行共识区块数量小于第一数量阈值,则确定共识池的运行状态为运行未饱和状态。
其中,第一检测子单元1111的具体实现方式可以参见上述图3所对应实施例中对步骤S101的描述,这里不再进行赘述。
其中,共识池包括一个或多个区块共识线程;
状态确定单元111,包括:第二检测子单元1112。
第二检测子单元1112,用于在通过共识池进行第一区块的共识处理的过程中,检测一个或多个区块共识线程的运行状态;
第二检测子单元1112,还用于若一个或多个区块共识线程中包含运行状态为空闲状态的区块共识线程,则确定共识池的运行状态为运行未饱和状态。
其中,第二检测子单元1112的具体实现方式可以参见上述图3所对应实施例中对步骤S101的描述,这里不再进行赘述。
其中,共识池包括一个或多个区块共识线程;
组装共识单元112,包括:打包子单元1121、线程选择子单元1122以及线程共识子单元1123。
打包子单元1121,用于根据区块配置信息从交易池中获取待打包交易,对待打包交易进行打包处理,得到第二区块;
线程选择子单元1122,用于从一个或多个区块共识线程中,获取运行状态为空闲状态的区块共识线程,作为目标区块共识线程;
线程共识子单元1123,用于通过目标区块共识线程进行第二区块的共识处理。
其中,打包子单元1121、线程选择子单元1122以及线程共识子单元1123的具体实现方式可以参见上述图3所对应实施例中对步骤S101的描述,这里不再进行赘述。
其中,线程共识子单元1123,具体用于通过目标区块共识线程构造针对第二区块的预准备信息,将预准备信息广播至共识节点集群,以使共识节点集群根据预准备信息对第二区块进行预投票处理,得到第一预投票结果;对第二区块进行预投票处理,得到第二预投票结果;将第二预投票结果广播至共识节点集群,以使共识节点集群根据第一预投票结果和第二预投票结果,对第二区块进行预提交处理,得到第一预提交结果;当接收到的第一预投票结果和第二预投票结果中预投票赞成结果的数量超过第二数量阈值时,对第二区块进行预提交处理,得到第二预提交结果;当接收到的第一预提交结果和第二预提交结果中预提交赞成结果的数量超过预提交赞成数量阈值时,确定第二区块的共识处理结果为共识通过结果。
其中,线程共识子单元1123的具体实现方式可以参见上述图3所对应实施例中对步骤S101的描述,这里不再进行赘述。
其中,并行执行模块12,包括:交易添加单元121以及交易执行单元122。
交易添加单元121,用于在对第二区块进行共识处理的过程中,将第二区块中的交易按照交易数据序号添加至交易执行池中;
交易执行单元122,用于获取交易执行池中运行状态为空闲状态的交易执行线程,通过交易执行线程从交易执行池中按序获取待执行交易;待执行交易的交易数量等于运行状态为空闲状态的交易执行线程对应的线程数量;
交易执行单元122,还用于并行执行待执行交易,得到待执行交易对应的交易执行缓存数据;
交易执行单元122,还用于根据待执行交易对应的区块高度以及交易数据序号,将交易执行缓存数据按序添加至待合并队列。
其中,交易添加单元121以及交易执行单元122的具体实现方式可以参见上述图3所对应实施例中对步骤S102的描述,这里不再进行赘述。
其中,冲突合并模块13,包括:遍历单元131、冲突检测单元132、第一合并单元133、第二合并单元134以及块缓存确定单元135。
遍历单元131,用于按序遍历待合并队列中与第二区块相关的交易执行缓存数据,获取第k个交易执行缓存数据;k为小于或等于H的正整数;H为第二区块中交易对应的交易总数量;
冲突检测单元132,用于对第k个交易执行缓存数据进冲突检测,得到数据冲突检测结果;
第一合并单元133,用于若第k个交易执行缓存数据对应的冲突检测结果为数据冲突结果,则对第k个交易执行缓存数据进行冲突合并更新,得到第k个合并更新缓存数据;
第二合并单元134,用于若第k个交易执行缓存数据对应的冲突检测结果为数据不冲突结果,则将第k个交易执行缓存数据,作为第k个合并更新缓存数据;
块缓存确定单元135,用于将H个合并更新缓存数据,作为第二区块的块缓存数据。
其中,遍历单元131、冲突检测单元132、第一合并单元133、第二合并单元134以及块缓存确定单元135的具体实现方式可以参见上述图4所对应实施例中对步骤S203-步骤S206的描述,这里不再进行赘述。
其中,第k个交易执行缓存数据包括交易执行读缓存数据;
冲突检测单元132,包括:获取子单元1321以及检测子单元1322。
获取子单元1321,用于获取第k个交易执行缓存数据对应的交易的最新交易执行读缓存数据;
检测子单元1322,用于若最新交易执行读缓存数据与交易执行读缓存数据相同,则确定第k个交易执行缓存数据对应的冲突检测结果为数据不冲突结果;
检测子单元1322,还用于若最新交易执行读缓存数据与交易执行读缓存数据不相同,则确定第k个交易执行缓存数据对应的冲突检测结果为数据冲突结果。
其中,获取子单元1321以及检测子单元1322的具体实现方式可以参见上述图4所对应实施例中对步骤S204的描述,这里不再进行赘述。
其中,第k个交易执行缓存数据还包括交易执行写缓存数据;
第一合并单元133,包括:最新执行子单元1331以及更新子单元1332。
最新执行子单元1331,用于根据最新交易执行读缓存数据执行第k个交易执行缓存数据对应的交易,得到最新交易写缓存数据;
更新子单元1332,用于将第k个交易执行缓存数据中的交易执行读缓存数据更新为最新交易执行读缓存数据,将第k个交易执行缓存数据中的交易执行写缓存数据更新为最新交易写缓存数据;
更新子单元1332,还用于将更新后的第k个交易执行缓存数据,作为第k个合并更新缓存数据。
其中,最新执行子单元1331以及更新子单元1332的具体实现方式可以参见上述图4所对应实施例中对步骤S205的描述,这里不再进行赘述。
其中,获取子单元1321具体用于在已更新缓存数据中查找是否存在与第k个交易执行缓存数据对应的交易的读缓存数据;已更新缓存数据包括存储队列中的块缓存数据以及与第二区块相关的k-1个已更新交易缓存数据分别对应的合并更新缓存数据;k-1个已更新交易缓存数据为在待合并队列中的位置或添加时间处于第k个交易执行缓存数据之前的交易执行缓存数据;若在已更新缓存数据中查找到与第k个交易执行缓存数据对应的交易的读缓存数据,则将已更新缓存数据中与第k个交易执行缓存数据对应的交易的读缓存数据作为最新交易执行读缓存数据;若在已更新缓存数据中未查找到与第k个交易执行缓存数据对应的交易的读缓存数据,则在区块链账本中查找是否存在与第k个交易执行缓存数据对应的交易的读缓存数据;若在区块链账本中查找到第k个交易执行缓存数据对应的交易的读缓存数据,则将区块链账本中与第k个交易执行缓存数据对应的交易的读缓存数据作为最新交易执行读缓存数据;若在区块链账本中未查找到第k个交易执行缓存数据对应的交易的读缓存数据,则将默认空白数据作为最新交易执行读缓存数据。
其中,获取子单元1321的具体实现方式可以参见上述图4所对应实施例中对步骤S205的描述,这里不再进行赘述。
其中,上述数据处理装置1,还包括:删除模块14。
删除模块14,用于在将第二区块的块缓存添加至存储队列后,从待合并队列中删除与第二区块相关的交易执行缓存数据。
其中,删除模块14的具体实现方式可以参见上述图3所对应实施例中对步骤S103的可选描述,这里不再进行赘述。
请参见图6,图6是本申请实施例提供的一种计算机设备的结构示意图。如图6所示,上述图5所对应实施例中的数据处理装置1可以应用于计算机设备1000,该计算机设备1000可以包括:处理器1001,网络接口1004和存储器1005,此外,上述计算机设备1000还可以包括:用户接口1003,和至少一个通信总线1002。其中,通信总线1002用于实现这些组件之间的连接通信。其中,用户接口1003可以包括显示屏(Display)、键盘(Keyboard),可选用户接口1003还可以包括标准的有线接口、无线接口。网络接口1004可选的可以包括标准的有线接口、无线接口(如WI-FI接口)。存储器1005可以是高速RAM存储器,也可以是非不稳定的存储器(non-volatile memory),例如至少一个磁盘存储器。存储器1005可选的还可以是至少一个位于远离前述处理器1001的存储装置。如图6所示,作为一种计算机可读存储介质的存储器1005中可以包括操作***、网络通信模块、用户接口模块以及设备控制应用程序。
在如图6所示的计算机设备1000中,网络接口1004可提供网络通讯网元;而用户接口1003主要用于为用户提供输入的接口;而处理器1001可以用于调用存储器1005中存储的设备控制应用程序,以实现:
在通过共识池进行第一区块的共识处理的过程中,获取第二区块,通过共识池进行第二区块的共识处理;第一区块为第二区块的父区块;第一区块的共识处理和第二区块的共识处理是并行执行的;
在对第二区块进行共识处理的过程中,将第二区块中的交易按照交易数据序号添加至交易执行池中,并行执行交易执行池中的交易,得到交易执行池中的交易对应的交易执行缓存数据,将交易执行池中的交易对应的交易执行缓存数据添加至待合并队列;
若第二区块的共识处理结果为共识通过结果,且待合并队列中包含第二区块中每个交易分别对应的交易执行缓存数据,且存在第一区块的块缓存数据,则对待合并队列中与第二区块相关的交易执行缓存数据进行冲突合并处理,得到第二区块的块缓存数据,将第二区块的块缓存数据添加至存储队列;存储队列中的块缓存数据用于被顺序写入区块链账本中。
应当理解,本申请实施例中所描述的计算机设备1000可执行前文图3、图4任一个所对应实施例中对该数据处理方法的描述,在此不再赘述。另外,对采用相同方法的有益效果描述,也不再进行赘述。
此外,这里需要指出的是:本申请实施例还提供了一种计算机可读存储介质,且上述计算机可读存储介质中存储有前文提及的数据处理装置1所执行的计算机程序,且上述计算机程序包括程序指令,当上述处理器执行上述程序指令时,能够执行前文图3、图4任一个所对应实施例中对上述数据处理方法的描述,因此,这里将不再进行赘述。另外,对采用相同方法的有益效果描述,也不再进行赘述。对于本申请所涉及的计算机可读存储介质实施例中未披露的技术细节,请参照本申请方法实施例的描述。
上述计算机可读存储介质可以是前述任一实施例提供的数据处理装置或者上述计算机设备的内部存储单元,例如计算机设备的硬盘或内存。该计算机可读存储介质也可以是该计算机设备的外部存储设备,例如该计算机设备上配备的插接式硬盘,智能存储卡(smart media card,SMC),安全数字(secure digital,SD)卡,闪存卡(flash card)等。进一步地,该计算机可读存储介质还可以既包括该计算机设备的内部存储单元也包括外部存储设备。该计算机可读存储介质用于存储该计算机程序以及该计算机设备所需的其他程序和数据。该计算机可读存储介质还可以用于暂时地存储已经输出或者将要输出的数据。
此外,这里需要指出的是:本申请实施例还提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行前文图3、图4任一个所对应实施例提供的方法。
本申请实施例的说明书和权利要求书及附图中的术语“第一”、“第二”等是用于区别不同对象,而非用于描述特定顺序。此外,术语“包括”以及它们任何变形,意图在于覆盖不排他的包含。例如包含了一系列步骤或单元的过程、方法、装置、产品或设备没有限定于已列出的步骤或模块,而是可选地还包括没有列出的步骤或模块,或可选地还包括对于这些过程、方法、装置、产品或设备固有的其他步骤单元。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照网元一般性地描述了各示例的组成及步骤。这些网元究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的网元,但是这种实现不应认为超出本申请的范围。
以上所揭露的仅为本申请较佳实施例而已,当然不能以此来限定本申请之权利范围,因此依本申请权利要求所作的等同变化,仍属本申请所涵盖的范围。
Claims (15)
1.一种基于区块链的数据处理方法,其特征在于,包括:
在通过共识池进行第一区块的共识处理的过程中,获取第二区块,通过所述共识池进行所述第二区块的共识处理;所述第一区块为所述第二区块的父区块;所述第一区块的共识处理和所述第二区块的共识处理是并行执行的;
在对所述第二区块进行共识处理的过程中,将所述第二区块中的交易按照交易数据序号添加至交易执行池中,并行执行所述交易执行池中的交易,得到所述交易执行池中的交易对应的交易执行缓存数据,将所述交易执行池中的交易对应的交易执行缓存数据添加至待合并队列;
若所述第二区块的共识处理结果为共识通过结果,且所述待合并队列中包含所述第二区块中每个交易分别对应的交易执行缓存数据,且存在所述第一区块的块缓存数据,则对所述待合并队列中与所述第二区块相关的交易执行缓存数据进行冲突合并处理,得到所述第二区块的块缓存数据,将所述第二区块的块缓存数据添加至所述存储队列;所述存储队列中的块缓存数据用于被顺序写入区块链账本中。
2.根据权利要求1所述的方法,其特征在于,所述在通过共识池进行第一区块的共识处理的过程中,获取第二区块,通过所述共识池进行所述第二区块的共识处理,包括:
在通过共识池进行第一区块的共识处理的过程中,确定所述共识池的运行状态;
若所述共识池的运行状态为运行未饱和状态,则基于交易池组装第二区块,通过所述共识池进行所述第二区块的共识处理。
3.根据权利要求2所述的方法,其特征在于,所述在通过共识池进行第一区块的共识处理的过程中,确定所述共识池的运行状态,包括:
在通过共识池进行第一区块的共识处理的过程中,检测所述共识池中正在进行共识处理的区块的数量,作为并行共识区块数量;
若所述并行共识区块数量小于第一数量阈值,则确定所述共识池的运行状态为运行未饱和状态。
4.根据权利要求2所述的方法,其特征在于,所述共识池包括一个或多个区块共识线程;
所述在通过共识池进行第一区块的共识处理的过程中,确定所述共识池的运行状态,包括:
在通过共识池进行第一区块的共识处理的过程中,检测所述一个或多个区块共识线程的运行状态;
若所述一个或多个区块共识线程中包含运行状态为空闲状态的区块共识线程,则确定所述共识池的运行状态为运行未饱和状态。
5.根据权利要求2所述的方法,其特征在于,所述共识池包括一个或多个区块共识线程;所述基于交易池组装第二区块,通过所述共识池进行所述第二区块的共识处理,包括:
根据区块配置信息从交易池中获取待打包交易,对所述待打包交易进行打包处理,得到第二区块;
从所述一个或多个区块共识线程中,获取运行状态为空闲状态的区块共识线程,作为目标区块共识线程;
通过所述目标区块共识线程进行所述第二区块的共识处理。
6.根据权利要求5所述的方法,其特征在于,所述通过所述目标区块共识线程进行所述第二区块的共识处理,包括:
通过所述目标区块共识线程构造针对所述第二区块的预准备信息,将所述预准备信息广播至共识节点集群,以使所述共识节点集群根据所述预准备信息对所述第二区块进行预投票处理,得到第一预投票结果;
对所述第二区块进行预投票处理,得到第二预投票结果;
将所述第二预投票结果广播至所述共识节点集群,以使所述共识节点集群根据所述第一预投票结果和所述第二预投票结果,对所述第二区块进行预提交处理,得到第一预提交结果;
当接收到的第一预投票结果和所述第二预投票结果中预投票赞成结果的数量超过第二数量阈值时,对所述第二区块进行预提交处理,得到第二预提交结果;
当接收到的第一预提交结果和所述第二预提交结果中预提交赞成结果的数量超过预提交赞成数量阈值时,确定所述第二区块的共识处理结果为共识通过结果。
7.根据权利要求1所述的方法,其特征在于,所述在对所述第二区块进行共识处理的过程中,将所述第二区块中的交易按照交易数据序号添加至交易执行池中,并行执行所述交易执行池中的交易,得到所述交易执行池中的交易对应的交易执行缓存数据,将所述交易执行池中的交易对应的交易执行缓存数据添加至待合并队列,包括:
在对所述第二区块进行共识处理的过程中,将所述第二区块中的交易按照交易数据序号添加至交易执行池中;
获取交易执行池中运行状态为空闲状态的交易执行线程,通过所述交易执行线程从所述交易执行池中按序获取待执行交易;所述待执行交易的交易数量等于所述运行状态为空闲状态的交易执行线程对应的线程数量;
并行执行所述待执行交易,得到所述待执行交易对应的交易执行缓存数据;
根据所述待执行交易对应的区块高度以及交易数据序号,将所述交易执行缓存数据按序添加至待合并队列。
8.根据权利要求1所述的方法,其特征在于,所述对所述待合并队列中与所述第二区块相关的交易执行缓存数据进行冲突合并处理,得到所述第二区块的块缓存数据,包括:
按序遍历所述待合并队列中与所述第二区块相关的交易执行缓存数据,获取第k个交易执行缓存数据;k为小于或等于H的正整数;H为所述第二区块中交易对应的交易总数量;
对所述第k个交易执行缓存数据进冲突检测,得到数据冲突检测结果;
若所述第k个交易执行缓存数据对应的冲突检测结果为数据冲突结果,则对所述第k个交易执行缓存数据进行冲突合并更新,得到第k个合并更新缓存数据;
若所述第k个交易执行缓存数据对应的冲突检测结果为数据不冲突结果,则将所述第k个交易执行缓存数据,作为第k个合并更新缓存数据;
将H个合并更新缓存数据,作为所述第二区块的块缓存数据。
9.根据权利要求8所述的方法,其特征在于,所述第k个交易执行缓存数据包括交易执行读缓存数据;
所述对所述第k个交易执行缓存数据进冲突检测,得到数据冲突检测结果,包括:
获取所述第k个交易执行缓存数据对应的交易的最新交易执行读缓存数据;
若所述最新交易执行读缓存数据与所述交易执行读缓存数据相同,则确定所述第k个交易执行缓存数据对应的冲突检测结果为数据不冲突结果;
若所述最新交易执行读缓存数据与所述交易执行读缓存数据不相同,则确定所述第k个交易执行缓存数据对应的冲突检测结果为数据冲突结果。
10.根据权利要求9所述的方法,其特征在于,所述第k个交易执行缓存数据还包括交易执行写缓存数据;
所述对所述第k个交易执行缓存数据进行冲突合并更新,得到第k个合并更新缓存数据,包括:
根据所述最新交易执行读缓存数据执行所述第k个交易执行缓存数据对应的交易,得到最新交易写缓存数据;
将所述第k个交易执行缓存数据中的交易执行读缓存数据更新为所述最新交易执行读缓存数据,将所述第k个交易执行缓存数据中的交易执行写缓存数据更新为所述最新交易写缓存数据;
将更新后的第k个交易执行缓存数据,作为第k个合并更新缓存数据。
11.根据权利要求9所述的方法,其特征在于,所述获取所述第k个交易执行缓存数据对应的交易的最新交易执行读缓存数据,包括:
在已更新缓存数据中查找是否存在与所述第k个交易执行缓存数据对应的交易的读缓存数据;所述已更新缓存数据包括所述存储队列中的块缓存数据以及与所述第二区块相关的k-1个已更新交易缓存数据分别对应的合并更新缓存数据;所述k-1个已更新交易缓存数据为在所述待合并队列中的位置或添加时间处于所述第k个交易执行缓存数据之前的交易执行缓存数据;
若在所述已更新缓存数据中查找到与所述第k个交易执行缓存数据对应的交易的读缓存数据,则将所述已更新缓存数据中与所述第k个交易执行缓存数据对应的交易的读缓存数据作为最新交易执行读缓存数据;
若在所述已更新缓存数据中未查找到与所述第k个交易执行缓存数据对应的交易的读缓存数据,则在区块链账本中查找是否存在与所述第k个交易执行缓存数据对应的交易的读缓存数据;
若在所述区块链账本中查找到所述第k个交易执行缓存数据对应的交易的读缓存数据,则将所述区块链账本中与所述第k个交易执行缓存数据对应的交易的读缓存数据作为最新交易执行读缓存数据;
若在所述区块链账本中未查找到所述第k个交易执行缓存数据对应的交易的读缓存数据,则将默认空白数据作为最新交易执行读缓存数据。
12.一种基于区块链的数据处理装置,其特征在于,包括:
并行共识模块,用于在通过共识池进行第一区块的共识处理的过程中,获取第二区块,通过所述共识池进行所述第二区块的共识处理;所述第一区块为所述第二区块的父区块;所述第一区块的共识处理和所述第二区块的共识处理是并行执行的;
并行执行模块,用于在对所述第二区块进行共识处理的过程中,将所述第二区块中的交易按照交易数据序号添加至交易执行池中,并行执行所述交易执行池中的交易,得到所述交易执行池中的交易对应的交易执行缓存数据,将所述交易执行池中的交易对应的交易执行缓存数据添加至待合并队列;
冲突合并模块,用于若所述第二区块的共识处理结果为共识通过结果,且所述待合并队列中包含所述第二区块中每个交易分别对应的交易执行缓存数据,且存在所述第一区块的块缓存数据,则对所述待合并队列中与所述第二区块相关的交易执行缓存数据进行冲突合并处理,得到所述第二区块的块缓存数据,将所述第二区块的块缓存数据添加至所述存储队列;所述存储队列中的块缓存数据用于被顺序写入区块链账本中。
13.一种计算机设备,其特征在于,包括:处理器、存储器以及网络接口;
所述处理器与所述存储器、所述网络接口相连,其中,所述网络接口用于提供数据通信功能,所述存储器用于存储程序代码,所述处理器用于调用所述程序代码,以执行权利要求1-11任一项所述的方法。
14.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有计算机程序,所述计算机程序适于由处理器加载并执行权利要求1-11任一项所述的方法。
15.一种计算机程序产品,包括计算机程序/指令,其特征在于,所述计算机程序/指令被处理器执行时,可以执行权利要求1-11任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310110568.8A CN116977067A (zh) | 2023-01-31 | 2023-01-31 | 基于区块链的数据处理方法、装置、设备及可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310110568.8A CN116977067A (zh) | 2023-01-31 | 2023-01-31 | 基于区块链的数据处理方法、装置、设备及可读存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116977067A true CN116977067A (zh) | 2023-10-31 |
Family
ID=88477286
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310110568.8A Pending CN116977067A (zh) | 2023-01-31 | 2023-01-31 | 基于区块链的数据处理方法、装置、设备及可读存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116977067A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117527832A (zh) * | 2024-01-03 | 2024-02-06 | 杭州趣链科技有限公司 | 一种区块链的交易排序方法、装置、电子设备和存储介质 |
-
2023
- 2023-01-31 CN CN202310110568.8A patent/CN116977067A/zh active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117527832A (zh) * | 2024-01-03 | 2024-02-06 | 杭州趣链科技有限公司 | 一种区块链的交易排序方法、装置、电子设备和存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN113329031B (zh) | 一种区块的状态树的生成方法及装置 | |
US20210326867A1 (en) | Fork-Tolerant Consensus Protocol | |
EP3353671A1 (en) | Distributed data processing method and system | |
CN113570466B (zh) | 一种交易数据处理方法、装置以及可读存储介质 | |
CN110413650B (zh) | 一种业务数据的处理方法、装置、设备和存储介质 | |
CN113568981B (zh) | 一种交易数据处理方法、装置、设备以及介质 | |
JP5801482B2 (ja) | キーバリューストレージに対するデータの保存および読み出しを行う方法およびシステム | |
CN113326165B (zh) | 基于区块链的数据处理方法、设备及计算机可读存储介质 | |
CN111899019A (zh) | 一种黑名单多方交叉验证和共享的方法及*** | |
CN113064764B (zh) | 在区块链***中执行区块的方法及装置 | |
WO2023020242A1 (zh) | 基于区块链的数据处理方法、装置、计算机设备、计算机可读存储介质及计算机程序产品 | |
CN112767151A (zh) | 应用于区块链中验证节点的交易处理方法和装置 | |
CN116977067A (zh) | 基于区块链的数据处理方法、装置、设备及可读存储介质 | |
US20230336368A1 (en) | Block chain-based data processing method and related apparatus | |
US11568399B2 (en) | Distributed ledger management system, distributed ledger management method, and node | |
CN116701452A (zh) | 数据处理方法、相关设备、存储介质及程序产品 | |
WO2023160040A1 (zh) | 基于区块链的数据处理方法、装置、设备及可读存储介质 | |
CN116016374A (zh) | 基于区块链的数据处理方法、装置、设备及可读存储介质 | |
US20240205032A1 (en) | Blockchain data processing method, apparatus, and device, computer-readable storage medium, and computer program product | |
CN110889040B (zh) | 用于推送信息的方法和装置 | |
CN117390117A (zh) | 基于区块链的数据处理方法、装置、设备及可读存储介质 | |
CN117421369A (zh) | 基于区块链的数据处理方法、装置、设备及可读存储介质 | |
CN117255130A (zh) | 一种基于区块链的数据处理方法、装置、设备及介质 | |
KR20240002729A (ko) | 외부 저장장치를 활용하는 비잔틴 장애 감내 블록 데이터 저장 시스템, 장치 및 방법 | |
CN116680729A (zh) | 一种基于智能合约的数据处理方法、装置及相关设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication |