CN112508573B - 一种交易数据处理方法、装置以及计算机设备 - Google Patents
一种交易数据处理方法、装置以及计算机设备 Download PDFInfo
- Publication number
- CN112508573B CN112508573B CN202110122558.7A CN202110122558A CN112508573B CN 112508573 B CN112508573 B CN 112508573B CN 202110122558 A CN202110122558 A CN 202110122558A CN 112508573 B CN112508573 B CN 112508573B
- Authority
- CN
- China
- Prior art keywords
- transaction
- service
- services
- node
- data set
- 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.)
- Active
Links
Images
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
- G06Q20/00—Payment architectures, schemes or protocols
- G06Q20/38—Payment protocols; Details thereof
- G06Q20/382—Payment protocols; Details thereof insuring higher security of transaction
- G06Q20/3829—Payment protocols; Details thereof insuring higher security of transaction involving key management
-
- 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
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/60—Protecting data
- G06F21/64—Protecting data integrity, e.g. using checksums, certificates or signatures
Abstract
本申请实施例提供了一种交易数据处理方法、装置以及计算机设备,该方法包括:从待打包的N个交易业务中获取第一交易业务;基于第一交易业务的交易执行顺序、第一交易业务对应的读数据集以及冲突检测条件对第一交易业务进行冲突检测;若存在满足冲突检测条件的交易业务,则将满足冲突检测条件的交易业务作为前向依赖业务,记录第一交易业务与前向依赖业务之间的业务依赖关系;基于记录到的业务依赖关系,构建与N个交易业务相关联的有向无环图,将打包得到的携带有向无环图的提议区块发送给第二节点,以使第二节点基于提议区块中的有向无环图串行或者并行执行N个交易业务。采用本申请,可以实现交易业务的并行执行,并可以提高区块链的吞吐量。
Description
技术领域
本申请涉及计算机技术领域,尤其涉及一种交易数据处理方法、装置以及计算机设备。
背景技术
一个区块可以由多个交易业务构成,当打包节点将该区块写入区块链之前,需要通过共识网络中的共识节点分别对该区块进行共识,即需要这些共识节点分别对该区块中的每个交易业务进行交易验证。
其中,可以理解的是,当这些共识节点对该区块中的这些交易业务进行交易验证时,往往需要按照这些交易业务(例如,交易业务1、交易业务2和交易业务3)的交易执行顺序,串行执行这些交易业务。例如,每个共识节点均需要先执行完交易业务1之后,才可以执行交易业务2,且在执行完交易业务2之后,才可以继续执行交易业务3。由此可见,在这些共识节点按照交易执行顺序遍历执行该区块中的这些交易业务时,势必会消耗较长的业务执行时长,以至于会降低这些交易业务的执行效率,进而降低了这些共识节点的共识性能,以至于降低了区块链的吞吐量。
发明内容
本申请实施例提供一种交易数据处理方法、装置以及计算机设备,可以实现交易业务的并行执行,并可以提高区块链的吞吐量。
本申请实施例一方面提供了一种交易数据处理方法,包括:
从待打包的N个交易业务中获取第一交易业务,获取第一交易业务对应的读数据集;第一交易业务为N个交易业务中除首个交易业务之外的交易业务;N为正整数;
确定第一交易业务在N个交易业务中的交易执行顺序,基于交易执行顺序、第一交易业务对应的读数据集以及冲突检测条件对第一交易业务进行冲突检测,得到冲突检测结果;
若冲突检测结果指示N个交易业务中存在满足冲突检测条件的交易业务,则将满足冲突检测条件的交易业务作为与第一交易业务相关联的前向依赖业务,记录第一交易业务与前向依赖业务之间的业务依赖关系;
基于记录到的业务依赖关系,构建与N个交易业务相关联的有向无环图,将有向无环图和N个交易业务进行打包,得到携带有向无环图的提议区块,将提议区块发送给第二节点,以使第二节点基于提议区块中的有向无环图所指示的业务依赖关系串行或者并行执行N个交易业务;第二节点属于第一节点所属的区块链网络中的共识节点。
本申请实施例一方面提供了一种交易数据处理装置,包括:
第一获取模块,用于从待打包的N个交易业务中获取第一交易业务,获取第一交易业务对应的读数据集;第一交易业务为N个交易业务中除首个交易业务之外的交易业务;N为正整数;
冲突检测模块,用于确定第一交易业务在N个交易业务中的交易执行顺序,基于交易执行顺序、第一交易业务对应的读数据集以及冲突检测条件对第一交易业务进行冲突检测,得到冲突检测结果;
依赖记录模块,用于若冲突检测结果指示N个交易业务中存在满足冲突检测条件的交易业务,则将满足冲突检测条件的交易业务作为与第一交易业务相关联的前向依赖业务,记录第一交易业务与前向依赖业务之间的业务依赖关系;
区块发送模块,用于基于记录到的业务依赖关系,构建与N个交易业务相关联的有向无环图,将有向无环图和N个交易业务进行打包,得到携带有向无环图的提议区块,将提议区块发送给第二节点,以使第二节点基于提议区块中的有向无环图所指示的业务依赖关系串行或者并行执行N个交易业务;第二节点属于第一节点所属的区块链网络中的共识节点。
其中,第一交易业务为从N个交易业务中所获取到的待被执行的交易业务,第一交易业务对应的交易读缓存中包括第一交易业务对应的读数据集;
冲突检测模块包括:
顺序确定单元,用于获取为N个交易业务中的每个交易业务配置的交易标识,确定第一交易业务的交易标识在N个交易业务的交易标识中的标识位置,基于标识位置确定第一交易业务的交易执行顺序;
交易查找单元,用于在N个交易业务中,查找交易执行顺序早于第一交易业务的交易执行顺序的交易业务,将查找到的交易业务作为与第一交易业务相关联的前序交易业务;前序交易业务为从N个交易业务中所获取到的已被执行的交易业务;
写集获取单元,用于获取前序交易业务的交易写缓存,从交易写缓存中获取前序交易业务对应的写数据集;
冲突检测单元,用于基于前序交易业务对应的写数据集、第一交易业务对应的读数据集以及冲突检测条件,对第一交易业务进行冲突检测,得到冲突检测结果。
其中,装置还包括:
第二获取模块,用于从N个交易业务中获取首个交易业务,基于首个交易业务对应的读数据集执行首个交易业务,得到首个交易业务的首个业务执行结果,将首个业务执行结果添加至首个交易业务的首个交易写缓存,基于首个交易写缓存中所存储的数据构建得到首个交易业务对应的写数据集;首个交易业务的交易执行顺序早于第一交易业务的交易执行顺序,且首个交易业务用于作为第一交易业务的前序交易业务。
其中,冲突检测单元包括:
数据比较子单元,用于将第一交易业务对应的读数据集与前序交易业务对应的写数据集进行字符串比较,得到字符串比较结果;
第一比较子单元,用于若字符串比较结果指示第一交易业务对应的读数据集与前序交易业务对应的写数据集之间存在重叠字符串,则将存在重叠字符串的前序交易业务确定为满足冲突检测条件的目标前序交易业务;
字段确定子单元,用于将第一交易业务的交易索引值添加至目标前序交易业务的历史关键字段所对应的初始交易子字段,得到目标前序交易业务的目标交易子字段,在第一交易业务的目标关键字段中对第一交易业务的交易父字段中的依赖数量进行递增处理,得到递增后的交易父字段;
结果确定子单元,用于将目标前序交易业务的目标交易子字段和递增后的交易父字段,作为与第一交易业务相关联的冲突检测结果。
其中,冲突检测单元还包括:
第二比较子单元,用于若字符串比较结果指示第一交易业务对应的读数据集与前序交易业务对应的写数据集之间均不存在重叠字符串,则将前序交易业务确定为不满足冲突检测条件的交易业务,基于不满足冲突检测条件的交易业务,在第一交易业务的目标关键字段中将第一交易业务的交易父字段中的依赖数量设置为目标阈值,基于目标阈值,将第一交易业务添加至首个交易业务所属的并行交易数据集,且从N个交易业务中获取用于更新第一交易业务的第二交易业务;第二交易业务的交易执行顺序晚于第一交易业务的交易执行顺序;并行交易数据集中的每个交易业务的依赖数量均为目标阈值,且并行交易数据集中的每个交易业务之间存在并行依赖关系,并行依赖关系用于更新业务依赖关系。
其中,业务依赖关系包含串行依赖关系和并行依赖关系;并行依赖关系是由首个交易业务所属的并行交易数据集中的交易业务所确定的;串行依赖关系是由与第一交易业务相关联的前向依赖业务所确定的;
区块发送模块包括:
第一获取单元,用于基于记录到的业务依赖关系中的并行依赖关系,从N个交易业务中挑选携带目标阈值的交易父字段所对应的交易业务,将挑选出的交易业务作为第一连接业务;第一连接业务中包含首个交易业务;
第二获取单元,用于基于记录到的业务依赖关系中的串行依赖关系,从第一连接业务的目标交易子字段中,获取与第一连接业务相关联的子交易列表;子交易列表中包含M个第二连接业务;M为小于N的非负整数;
无环图构建单元,用于基于第一连接业务和M个第二连接业务,构建得到与N个交易业务相关联的有向无环图,将有向无环图和N个交易业务进行打包,得到携带有向无环图的提议区块,将提议区块发送给第二节点。
其中,装置还包括:
合约调用模块,用于基于第一交易业务对应的读数据集中的合约调用地址以及合约名称,获取用于执行第一交易业务的智能合约,调用智能合约执行第一交易业务,得到第一交易业务对应的交易业务执行结果,将交易业务执行结果添加至第一交易业务的交易写缓存,基于交易写缓存中所存储的数据构建得到第一交易业务对应的写数据集。
本申请实施例一方面提供了一种交易数据处理方法,包括:
接收第一节点发送的携带有向无环图的提议区块;有向无环图是基于提议区块中的N个交易业务之间的业务依赖关系所构建的;业务依赖关系是从N个交易业务中获取第一交易业务之后,由第一交易业务以及与第一交易业务相关联的前向依赖业务所确定的;前向依赖业务是基于第一交易业务在N个交易业务中的交易执行顺序、第一交易业务对应的读数据集以及冲突检测条件,对第一交易业务进行冲突检测所得到的;第一节点属于第二节点所属的区块链网络中的打包节点;第一交易业务为N个交易业务中除首个交易业务之外的交易业务;N为正整数;
基于有向无环图所指示的业务依赖关系,从N个交易业务中挑选满足交易执行条件的交易业务,将挑选出的交易业务作为第一连接业务,获取与第一连接业务相关联的子交易列表;子交易列表中包含M个第二连接业务;M为小于N的非负整数;第一连接业务中包含首个交易业务;
基于第一连接业务和M个第二连接业务,构建与提议区块中的N个交易业务相关联的辅助无环图,基于辅助无环图对有向无环图进行合法验证。
本申请实施例一方面提供了一种交易数据处理装置,包括:
区块接收模块,用于接收第一节点发送的携带有向无环图的提议区块;有向无环图是基于提议区块中的N个交易业务之间的业务依赖关系所构建的;业务依赖关系是从N个交易业务中获取第一交易业务之后,由第一交易业务以及与第一交易业务相关联的前向依赖业务所确定的;前向依赖业务是基于第一交易业务在N个交易业务中的交易执行顺序、第一交易业务对应的读数据集以及冲突检测条件,对第一交易业务进行冲突检测所得到的;第一节点属于第二节点所属的区块链网络中的打包节点;第一交易业务为N个交易业务中除首个交易业务之外的交易业务;N为正整数;
交易挑选模块,用于基于有向无环图所指示的业务依赖关系,从N个交易业务中挑选满足交易执行条件的交易业务,将挑选出的交易业务作为第一连接业务,获取与第一连接业务相关联的子交易列表;子交易列表中包含M个第二连接业务;M为小于N的非负整数;
合法验证模块,用于基于第一连接业务和M个第二连接业务,构建与提议区块中的N个交易业务相关联的辅助无环图,基于辅助无环图对有向无环图进行合法验证。
其中,合法验证模块包括:
第一执行单元,用于通过交易协调器分别将第一连接业务和M个第二连接业务传递至与交易协调器相关联的交易执行协程池,在交易执行协程池中存在处于闲置状态的协程时,将处于闲置状态的协程作为第一协程,在第一协程的业务状态为工作状态时,通过第一协程执行第一连接业务,得到第一连接业务对应的第一交易执行结果;
交易确定单元,用于基于第一交易执行结果,将M个第二连接业务中每个第二连接业务的交易父字段的依赖数量进行递减处理,将递减处理后的每个第二连接业务分别作为待处理业务;
业务确定单元,用于从每个待处理业务中查找交易父字段的依赖数量达到交易执行条件中的目标阈值的待处理业务,将查找到的待处理业务作为与第一连接业务相关联的后向依赖业务;
第二执行单元,用于在交易执行协程池中将处于闲置状态的协程作为第二协程,在第二协程的业务状态为工作状态时,通过第二协程执行后向依赖业务,得到后向依赖业务对应的第二交易执行结果,直到执行完每个待处理业务时,得到每个待处理业务对应的第二交易执行结果;
合法验证单元,用于基于第一交易执行结果、每个待处理业务对应的第二交易执行结果,构建与提议区块中的N个交易业务相关联的辅助无环图,基于辅助无环图对有向无环图进行合法验证。
其中,合法验证模块还包括:
协程释放单元,用于基于第一交易执行结果,在交易执行协程池的工作队列中释放第一协程;
状态切换单元,用于将第一协程的业务状态由工作状态切换为闲置状态,将处于闲置状态的第一协程添加至交易执行协程池所对应的闲置队列。
其中,合法验证单元包括:
第一确定子单元,用于在合并第一交易执行结果和每个待处理业务对应的第二交易执行结果时,将第一交易执行结果写入第一连接业务的第一交易写缓存,将写入第一交易写缓存中的数据作为第一连接业务的第一写数据集;
第二确定子单元,用于在每个待处理业务对应的第二交易执行结果中遍历获取第i个交易执行结果,将第i个交易执行结果写入第i个待处理业务的第二交易写缓存,将写入第i个待处理业务的第二交易写缓存中的数据作为第i个待处理业务的第二写数据集,且在第i个待处理业务的交易读缓存中获取第i个待处理业务对应的第二读数据集,直到执行完每个待处理业务时,得到每个待处理业务的第二读数据集;i为小于或者等于M的非负整数;
辅助构建子单元,用于基于第一连接业务的第一写数据集和每个待处理业务的第二读数据集,构建与N个交易业务相关联的辅助无环图;
合法确定子单元,用于将辅助无环图和有向无环图进行相似比较,得到相似比较结果,基于相似比较结果确定有向无环图的合法性。
其中,合法验证模块还包括:
节点删除单元,用于在确定有向无环图不具备合法性时,调用用于维护共识节点列表的共识委员会合约,通过共识委员会合约获取共识节点列表,在共识节点列表中删除第一节点的节点标识。
本申请实施例一方面提供了一种计算机设备,包括:处理器和存储器;
处理器与存储器相连,其中,存储器用于存储计算机程序,计算机程序被处理器执行时,使得该计算机设备执行本申请实施例提供的方法。
本申请实施例一方面提供了一种计算机可读存储介质,计算机可读存储介质存储有计算机程序,该计算机程序适于由处理器加载并执行,以使得具有该处理器的计算机设备执行本申请实施例提供的方法。
本申请实施例一方面提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行本申请实施例提供的方法。
在本申请实施例中,具有区块打包功能的第一节点(即打包节点)可以从待打包的N个交易业务中,将当前获取到的待执行的交易业务作为第一交易业务,且可以获取该第一交易业务对应的读数据集。其中,第一交易业务可以为N个交易业务中除首个交易业务之外的交易业务,这里的N可以为正整数。进一步地,第一节点可以确定第一交易业务在N个交易业务中的交易执行顺序,进而可以基于交易执行顺序、第一交易业务对应的读数据集以及冲突检测条件对第一交易业务进行冲突检测,以得到冲突检测结果。进一步地,若冲突检测结果指示N个交易业务中存在满足冲突检测条件的交易业务,则第一节点可以将满足冲突检测条件的交易业务作为与第一交易业务相关联的前向依赖业务,进而记录第一交易业务与前向依赖业务之间的业务依赖关系,这样,可以得到每个交易业务与各自的前向依赖业务之间的业务依赖关系。进一步地,第一节点可以基于前述记录到的业务依赖关系,构建与N个交易业务相关联的有向无环图,并可以将有向无环图和N个交易业务进行打包,得到携带该有向无环图的提议区块,将提议区块发送给第二节点(即打包节点所属的区块链网络中的共识节点),以使第二节点可以基于提议区块中的有向无环图所指示的业务依赖关系并行以及串行执行这N个交易业务。由此可见,本申请实施例中的第一节点(即打包节点)可以按照交易执行顺序串行执行待打包的N个交易业务,并可以根据串行执行每个交易业务的过程中所记录到的每个交易业务的读数据集和写数据集,确定出同一区块中的N个交易业务之间的业务依赖关系,进而在根据这些业务依赖关系构建得到有向无环图的之后,得到携带有向无环图的提议区块,可以尽可能地确保该第一节点所属区块链网络中的其他共识节点(即第二节点)可以快速基于有向无环图所指示的业务依赖关系,并行以及串行该提议区块中的N个交易业务,显然,通过第二节点所获取到的有向无环图,可以合理地让N个交易业务实现串并结合,这样,在交易冲突量较小的情况下,可以尽可能地确保这N个交易业务中的大部分交易业务均能够并行执行,从而可以改善区块链网络中的这些共识节点的共识性能,以至于可以有效地提高区块链的吞吐量。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本申请实施例提供的一种区块链节点系统的结构示意图;
图2是本申请实施例提供的一种进行数据交互的场景示意图;
图3是本申请实施例提供的一种交易数据处理方法的流程示意图;
图4是本申请实施例提供的一种进行冲突检测的场景示意图;
图5是本申请实施例提供的一种对交易业务进行冲突检测的流程示意图;
图6是本申请实施例提供的一种构建有向无环图的场景示意图;
图7是本申请实施例提供的一种处理交易业务的场景示意图;
图8是本申请实施例提供的一种交易数据处理方法的流程示意图;
图9是本申请实施例提供的一种获取交易业务的场景示意图;
图10是本申请实施例提供的一种调度交易业务的场景示意图;
图11是本申请实施例提供的一种串行以及并行执行交易业务的场景示意图;
图12是本申请实施例提供的一种交易数据处理装置的结构示意图;
图13是本申请实施例提供的一种交易数据处理装置的结构示意图;
图14是本申请实施例提供的一种计算机设备的结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
具体的,请参见图1,图1是本申请实施例提供的一种区块链节点系统的结构示意图。区块链是一种分布式数据存储、点对点传输、共识机制以及加密算法等计算机技术的新型应用模式,主要用于对数据按时间顺序进行整理,并加密成账本,使其不可被篡改和伪造,同时可进行数据的验证、存储和更新。区块链本质上是一个去中心化的数据库,该数据库中的每个节点均存储一条相同的区块链,区块链网络中包括共识节点,共识节点负责区块链全网的共识。
可以理解的是,区块(Block)是在区块链网络上承载交易数据(即交易业务)的数据包,是一种被标记上时间戳和之前一个区块的哈希值的数据结构,区块经过网络的共识机制验证并确定区块中的交易。
可以理解的是,区块链系统中可以包括有智能合约,该智能合约在区块链系统中可以理解为是一种区块链各节点(包括共识节点)可以理解并执行的代码,可以执行任意逻辑并得到结果。应当理解,区块链中可以包括一个或多个智能合约,这些智能合约可以标识号(Identity document,ID)或名称来进行区分,而交易业务请求中可以携带智能合约的标识号或名称,以此指定区块链需要运行的智能合约。
如图1所示的区块链节点系统可以对应于区块链网络,该区块链网络可以包括但不限于联盟链所对应的区块链网络。区块链节点系统是指用于进行区块链节点与区块链节点之间数据共享的系统,该区块链节点系统中可以包括多个节点,多个节点具体可以包括节点10a、节点10b、节点10c、…、节点10n,这里的节点10a、节点10b、节点10c、…、节点10n可以统称为区块链节点。
每个节点在进行正常工作时可以接收到输入信息,并基于接收到的输入信息维护该区块链节点系统内的共享数据。为了保证区块链节点系统内的信息互通,区块链节点系统中的每个节点之间可以存在信息连接,节点之间可以通过上述信息连接进行信息传输。例如,当区块链节点系统中的任意节点接收到输入信息时,区块链节点系统中的其他节点便根据共识算法获取该输入信息,将该输入信息作为共享数据中的数据进行存储,使得区块链节点系统中全部节点上存储的数据均一致。
可以理解的是,上述的信息连接不限定连接方式,可以通过有线通信方式进行直接或间接地连接,也可以通过无线通信方式进行直接或间接地连接,还可以通过其他连接方式,本申请在此不做限制。
可以理解的是,区块链网络可以基于节点标识实现节点之间的信息连接,对于区块链节点系统中的每个节点,均具有与其对应的节点标识,而且区块链节点系统中的每个节点均可以存储有区块链节点系统中其他节点的节点标识,以便后续根据其他节点的节点标识,将生成的区块广播至区块链节点系统中的其他节点。每个节点中可维护一个如下表所示的节点标识列表,将节点名称和节点标识对应存储至该节点标识列表中。
其中,节点标识可为IP(Internet Protocol,网络之间互联的协议)地址以及其他任一种能够用于标识区块链网络中节点的信息,表1中仅以IP地址为例进行说明。例如,节点1(例如,节点1可以为图1所示的节点10a)可以通过节点标识117.116.189.145向节点2(例如,节点2可以为图1所示的节点10b)发送信息(例如,区块),且节点2可以通过节点标识117.114.151.174确定该信息是由节点1所发送的。
可以理解的是,本申请实施例所提供的交易数据处理方法可以由计算机设备执行,计算机设备包括但不限于终端或服务器。其中,服务器可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、CDN、以及大数据和人工智能平台等基础云计算服务的云服务器。其中,终端可以是手机、平板电脑、笔记本电脑、掌上电脑、智能音响、移动互联网设备(MID,mobile internet device)、POS(Point Of Sales,销售点)机、可穿戴设备(例如智能手表、智能手环等)等。
应当理解,在区块链中,在将一个区块(即提议区块、待上链区块)进行上链之前,该区块必须经过区块链网络中的共识节点进行共识,在共识通过后才能将该区块添加到区块链上。可以理解的是,当区块链被用于政府或者商业机构的一些场景中时,并非区块链中的所有参与节点(即上述区块链节点系统中的区块链节点)都有足够的资源和必要性成为区块链的共识节点。例如,在图1所示的区块链节点系统中,可以将节点10a、节点10b、节点10c作为该区块链节点系统中的共识节点,其中,节点10a可以作为打包生成区块的打包节点,节点10b和节点10c可以作为参与共识的共识节点。
可以理解的是,区块链所在打包节点(打包节点属于共识节点)可以根据区块链节点系统中其他共识节点的节点标识,将新生成的区块(即提议区块)分别发送给打包节点所在的区块链节点系统中的其他共识节点,由共识节点对新生成的区块进行共识,并在共识成功后将新生成的区块添加至其存储的区块链。
应当理解,本申请实施例中的第一节点和第二节点可以为区块链网络中的共识节点。其中,第一节点可以为区块链网络中的打包节点。因此,本申请实施例可以将对交易业务进行打包处理的区块链节点统称为第一节点(即打包节点,例如,图1所示的节点10a),还可以将对打包处理所得到的区块进行共识的区块链节点统称为第二节点(即共识节点,例如,图1所示的节点10b和节点10c)。
为便于理解,进一步地,请参见图2,图2是本申请实施例提供的一种进行数据交互的场景示意图。其中,如图2所示的第一节点可以为上述图1所对应实施例中的节点10a,如图2所示的第二节点可以为上述图2所对应实施例中的节点10b。如图2所示,第一节点中可以包括待打包的N个交易业务,这里的N个交易业务具体可以包括交易2a、交易2b、…、交易2n。其中,这些交易业务(即交易2a、交易2b、…、交易2n)可以按照交易执行顺序排列。比如,如图2所示,交易2a的交易执行顺序1可以早于交易2b的交易执行顺序2,交易2b的交易执行顺序2可以早于交易2c(未在图上示出)的交易执行顺序3,以此类推,交易2(n-1)(未在图上示出)的交易执行顺序(n-1)可以早于交易2n的交易执行顺序n。
可以理解的是,第一节点可以从N个交易业务中遍历获取待执行的交易业务。例如,第一节点可从N个交易业务中获取首个交易业务(例如,交易2a)。由于该交易2a的交易执行顺序为交易执行顺序1,则第一节点可以获取该交易2a对应的读数据集1,直接基于交易2a对应的读数据集1执行该交易2a,得到该交易2a的首个业务执行结果,即第一节点可以基于无需对该交易2a进行冲突检测,以得到该交易2a的冲突检测结果(例如,结果1)。
应当理解,当第一节点执行完交易2a之后,该交易2a将演变成其他待执行的交易业务(例如,交易2b)的前序交易业务。所以,当第一节点从N个交易业务中获取新的待执行的交易业务(例如,图2所示的交易2b),作为第一交易业务时,可以获取该交易2b对应的读数据集2,并可以在N个交易业务中确定该交易2b的交易执行顺序为交易执行顺序2,进而基于读数据集2、交易执行顺序2和冲突检测条件,对该交易2b进行冲突检测(比如,可以判断该交易2b和该交易2b的前序交易业务(例如,上述交易2a)之间是否存在重叠字符串),以得到该交易2b的冲突检测结果(例如,结果2)。
进一步地,第一节点可以基于结果2确定与交易2b相关联的前向依赖业务。比如,假设上述交易2a(即交易2b的前序交易业务)与交易2b之间存在重叠字符串,则该第一节点可以基于该结果2,将上述交易2a确定为与该交易2b相关联的前向依赖业务,并记录交易2b与前向依赖业务(即交易2a)之间的业务依赖关系。
应当理解,当第一节点执行完交易2b之后,该交易2b将演变成其他待执行的交易业务(例如,交易2c,未在图上示出)的前序交易业务。同理,第一节点还可以从N个交易业务中继续获取另一待执行的交易业务(例如,交易2c),作为新的第一交易业务(本申请实施例可以将该新的第一交易业务称之为第二交易业务),并获取该交易2c对应的读数据集3,确定该交易2c在N个交易业务中的交易执行顺序3,进而基于读数据集3、交易执行顺序3和冲突检测条件对交易2c进行冲突检测(比如,可以判断该交易2c和该交易2c的前序交易业务(例如,上述交易2a和交易2b)之间是否存在重叠字符串),得到该交易2c的冲突检测结果(例如,结果3)。
进一步地,第一节点可以基于结果3确定与交易2c相关联的前向依赖业务。比如,假设该交易2c与该交易2c的前序交易业务(例如,上述交易2a和交易2b)之间均存在重叠字符串,则该第一节点可以基于该结果3,将上述交易2a和交易2b作为与该交易2c相关联的前向依赖业务,并记录交易2c与前向依赖业务(即交易2a和交易2b)之间的业务依赖关系。
以此类推,第一节点可以进一步从N个交易业务中,将遍历获取到的其他待执行的交易业务(例如,交易2d、…、交易2n),分别作为第一交易业务,以对交易2d、…、交易2n分别进行冲突检测,进而可以基于每个交易业务的冲突检测结果(例如,结果4、…、结果n),确定出与每个交易业务相关联的前向依赖业务,进而可以记录得到其他待执行的交易业务(例如,交易2d、…、交易2n)和与其相关联的前向依赖业务之间的业务依赖关系。
其中,可以理解的是,本申请实施例可以在冲突检测结果指示存在与当前执行的第一交易业务相关联的前向依赖业务时,将当前执行的第一交易业务的交易父字段所对应的依赖数量进行递增处理。
可选的,本申请实施例还可以在冲突检测结果指示不存在与当前执行的第一交易业务相关联的前向依赖业务时,在当前执行的第一交易业务的目标关键字段中将当前执行的第一交易业务的交易父字段所对应的依赖数量设置为目标阈值(例如,设置为0),这意味着当前执行的该第一交易业务不依赖于交易执行顺序在其之前的每个前序交易业务。此时,第一节点可以进一步从N个交易业务中获取用于更新该第一交易业务(例如,上述交易2b)的第二交易业务。比如,这里的第二交易业务可以为交易执行顺序晚于该交易2b的交易2c。
进一步地,第一节点可以基于上述记录到的业务依赖关系,构建与N个交易业务相关联的有向无环图,将有向无环图和N个交易业务进行打包,得到包含有向无环图的提议区块,并将包含有向无环图的提议区块发送给第二节点。因此,第二节点在接收到第一节点发送的携带有向无环图的提议区块时,可以基于提议区块中的有向无环图所指示的业务依赖关系,获取满足交易执行条件的第一连接业务,获取与第一连接业务相关联的子交易列表中的M个第二连接业务,并获取第一连接业务的第一写数据集和M个第二连接业务中的每个第二连接业务的第二读数据集,基于第一写数据集和第二读数据集,构建与N个交易业务相关联的辅助无环图,进而基于在第二节点所构建的辅助无环图对从第一节点接收到的有向无环图进行合法验证,得到合法验证结果。其中,第一连接业务中包含首个交易业务(即交易2a),这里的M可以为小于N的非负整数。
其中,可以理解的是,第二节点可以串行执行第一连接业务和M个第二连接业务,也可以并行执行满足交易执行条件的第一连接业务,还可以并行执行M个第二连接业务,因此,在第二节点中使用串行和并行结合的方式执行提议区块中的N个交易业务,可以节省第二节点中的计算及内存消耗,进而提高第二节点对交易业务的执行效率,进而提升区块链的性能。此外,通过辅助无环图对有向无环图进行合法验证,可以使提议区块中的N个交易业务的执行结果在所有区块链节点中保持一致。
其中,第一节点基于记录到的业务依赖关系构建与N个交易业务相关联的有向无环图的具体过程,以及第二节点基于有向无环图所指示的业务依赖关系并行或者串行执行N个交易业务的具体过程,可以参见下述图3-图11所对应的实施例的描述。
进一步地,请参见图3,图3是本申请实施例提供的一种交易数据处理方法的流程示意图。该方法可以由第一节点(例如,上述图1所示的区块链节点10a)执行,也可以由第二节点(例如,上述图1所示的区块链节点10b)执行,还可以由第一节点和第二节点共同执行。为便于理解,本实施例以该方法由第一节点执行为例进行说明。其中,该交易数据处理方法至少可以包括以下步骤S101-步骤S104:
步骤S101,从待打包的N个交易业务中获取第一交易业务,获取第一交易业务对应的读数据集;
其中,第一节点可以从待打包的N个交易业务中依次获取待执行的交易业务,将待执行的交易业务作为第一交易业务,这里的第一交易业务可以为N个交易业务中除首个交易业务之外的交易业务,这里的N可以为正整数。
应当理解,第一交易业务对应的交易读缓存中包括第一交易业务对应的读数据集。因此,第一节点可以从第一交易业务对应的交易读缓存中获取第一交易业务对应的读数据集,基于第一交易业务对应的读数据集中的合约调用地址以及合约名称,获取用于执行第一交易业务的智能合约,调用该智能合约执行第一交易业务,得到第一交易业务对应的交易业务执行结果,以将交易业务执行结果添加至第一交易业务的交易写缓存,进而可以基于交易写缓存中所存储的数据构建得到第一交易业务对应的写数据集。
其中,可以理解的是,N个交易业务的块缓存(即下述提议区块的块缓存)中暂时保存了待打包的N个交易业务的交易结果(即首个交易业务对应的首个业务执行结果和第一交易业务对应的交易业务执行结果),基于块缓存可以为N个交易业务创建对应的交易读缓存和交易写缓存,一个交易业务对应一个交易写缓存和一个交易读缓存,交易读缓存中存储有交易业务对应的读数据集,交易写缓存中存储有交易业务对应的写数据集。
可以理解的是,第一节点可以从N个交易业务中获取首个交易业务,基于首个交易业务对应的读数据集执行首个交易业务,得到首个交易业务的首个业务执行结果,将首个业务执行结果添加至首个交易业务的首个交易写缓存,基于首个交易写缓存中所存储的数据构建得到首个交易业务对应的写数据集。其中,首个交易业务的交易执行顺序早于第一交易业务的交易执行顺序,且首个交易业务用于作为第一交易业务的前序交易业务。
步骤S102,确定第一交易业务在N个交易业务中的交易执行顺序,基于交易执行顺序、第一交易业务对应的读数据集以及冲突检测条件对第一交易业务进行冲突检测,得到冲突检测结果;
具体的,第一节点可以获取为N个交易业务中的每个交易业务配置的交易标识,确定第一交易业务的交易标识在N个交易业务的交易标识中的标识位置,基于标识位置确定第一交易业务的交易执行顺序。进一步地,第一节点可以在N个交易业务中,查找交易执行顺序早于第一交易业务的交易执行顺序的交易业务,将查找到的交易业务作为与第一交易业务相关联的前序交易业务。其中,前序交易业务为从N个交易业务中所获取到的已被执行的交易业务,第一交易业务为从N个交易业务中所获取到的待被执行的交易业务。进一步地,第一节点可以获取前序交易业务的交易写缓存,从交易写缓存中获取前序交易业务对应的写数据集。进一步地,第一节点可以基于前序交易业务对应的写数据集、第一交易业务对应的读数据集以及冲突检测条件,对第一交易业务进行冲突检测,得到冲突检测结果。
可以理解的是,本申请实施例可以将交易执行顺序早于第一交易业务的交易执行顺序的交易业务,作为与第一交易业务相关联的前序交易业务,相应的,本申请实施例可以将第一交易业务作为与前序交易业务相关联的后序交易业务。可以理解的是,与某个交易业务(例如,第一交易业务)相关联的前序交易业务的数量可以为零个、一个或多个,与某个交易业务(例如,第一交易业务)相关联的后序交易业务的数量可以为零个、一个或多个,本申请对此不做限制。
可以理解的是,第一节点可以从前序交易业务对应的交易读缓存中获取前序交易业务对应的读数据集,基于前序交易业务对应的读数据集中的合约调用地址以及合约名称,获取用于执行前序交易业务的智能合约,调用该智能合约执行前序交易业务,得到前序交易业务对应的前序业务执行结果,以将前序业务执行结果添加至前序交易业务的交易写缓存,进而可以基于交易写缓存中所存储的数据构建得到前序交易业务对应的写数据集。其中,前序交易业务的交易写缓存和交易读缓存存储在提议区块对应的块缓存中。
为便于理解,请参见图4,图4是本申请实施例提供的一种进行冲突检测的场景示意图。如图4所示的N个交易业务可以为待打包的交易业务,这里的N个交易业务具体可以包括:交易1、…、交易N-2、交易N-1和交易N,这里的N个交易业务按照交易执行顺序排列。
其中,可以理解的是,第一节点可以根据N个交易业务的交易时间戳,为N个交易业务中的每个交易业务配置交易标识,进而基于每个交易业务的交易标识的标识位置确定N个交易业务的交易执行顺序。其中,交易时间戳可以表示交易业务被写入交易池的时间戳,比如,交易1的交易时间戳可以为时刻T1,…,交易N-2的交易时间戳可以为时刻T(N-2),交易N-1的交易时间戳可以为时刻T(N-1),交易N的交易时间戳可以为时刻TN。因此,交易1的交易标识可以为“1”,…,交易N-2的交易标识可以为“N-2”,交易N-1的交易标识可以为“N-1”,交易N的交易标识可以为“N”。
其中,可以理解的是,在等待前一个交易标识的交易业务执行完成后,后一个交易标识的交易业务会作为新的待被执行的交易业务,而前一个交易标识的交易业务会作为已被执行的交易业务。若时刻T1、…、时刻TN按照时间先后顺序排列,即时刻T1早于时刻TN,则在处理完交易序号为“1”的交易1后,可以对交易序号为“2”的交易2进行处理,…,在处理完交易序号为“N-1”的交易N-1后,可以对交易序号为“N”的交易N进行处理。
可选的,可以理解的是,若交易业务具有相同的交易时间戳,则具有相同的交易时间戳的交易业务具有相同的交易标识,例如,交易2和交易3的交易时间戳可以均为时刻T2,则交易2和交易3的交易标识可以均为“2”,进而可以说明交易2和交易3在N个交易业务中具有相同的交易执行顺序。应当理解,本申请实施例以N个交易业务的交易时间戳均不相同为例进行说明。
如图4所示,在从N个交易业务中获取到的待执行的交易业务为交易N-1时,即在将交易N-1作为第一交易业务时,可以从N个交易业务中查找交易执行顺序早于第一交易业务的交易执行顺序的交易1、…、交易N-2,进而将交易1、…、交易N-2作为与交易N-1相关联的前序交易业务。
可以理解的是,基于前序交易业务对应的写数据集、第一交易业务对应的读数据集以及冲突检测条件,对第一交易业务进行冲突检测,得到冲突检测结果的具体过程可以描述为:第一节点可以将第一交易业务对应的读数据集与前序交易业务对应的写数据集进行字符串比较,得到字符串比较结果。进一步地,若字符串比较结果指示第一交易业务对应的读数据集与前序交易业务对应的写数据集之间存在重叠字符串,则第一节点可以将存在重叠字符串的前序交易业务确定为满足冲突检测条件的目标前序交易业务。进一步地,第一节点可以将第一交易业务的交易索引值添加至目标前序交易业务的历史关键字段所对应的初始交易子字段,得到目标前序交易业务的目标交易子字段,在第一交易业务的目标关键字段中对第一交易业务的交易父字段中的依赖数量进行递增处理,得到递增后的交易父字段。进一步地,第一节点可以将目标前序交易业务的目标交易子字段和递增后的交易父字段,作为与第一交易业务相关联的冲突检测结果。
其中,可以理解的是,前序交易业务的历史关键字段所对应的初始交易子字段(或目标交易子字段),可以用于记录依赖于前序交易业务的子交易列表,第一交易业务的交易父字段中的依赖数量,可以用于记录第一交易业务需要依赖的前序交易业务的数量。
请再参见图4,在交易N-1作为第一交易业务、交易1、…、交易N-2作为与第一交易业务相关联的前序交易业务时,交易N-2可以为前序交易业务4a,交易1可以为前序交易业务4b,第一节点可以获取前序交易业务4a的写数据集40a和前序交易业务4b的写数据集40b,将交易N-1的读数据集和写数据集40a进行比较,得到字符串比较结果400a,且将交易N-1的读数据集和写数据集40b进行比较,得到字符串比较结果400b。第一节点可以基于字符串比较结果400a和字符串比较结果400b,确定读数据集和写数据集(例如,写数据集40a和写数据集40b)之间是否存在重叠字符串,进而确定满足冲突检测条件的目标前序交易业务,例如,在读数据集和写数据集40a之间存在重叠字符串时,将写数据集40a对应的前序交易业务4a(即交易N-2)确定为满足冲突检测条件的目标前序交易业务。
同理,第一节点可以获取前序交易业务中除前序交易业务4a和前序交易业务4b之外的前序交易业务(例如,交易2、…、交易N-3,未在图上示出)的写数据集,并将第一交易业务对应的读数据集与这些前序交易业务(例如,交易2、…、交易N-3,未在图上示出)对应的写数据集进行比较,这里假设在前序交易业务中交易N-2为满足冲突检测条件的目标前序交易业务。
应当理解,在交易N-2为满足冲突检测条件的交易业务时,第一节点将交易N-1的交易索引值(例如,交易N-1的交易索引值可以为“N-1”)添加至交易N-2的交易子字段(即初始交易子字段),得到添加有“N-1”的交易子字段(即目标交易子字段),且将交易N-1的交易父字段中的依赖数量F进行递增处理,得到递增处理后的依赖数量(F+1)。
可以理解的是,第一交易业务对应的读数据集和前序交易业务对应的写数据集可以是由一组或多组键值对(键即KEY,值即VALUE)组成的,即KEY=VALUE,第一交易业务对应的读数据集和前序交易业务对应的写数据集之间的重叠字符串的确定,可以由读数据集和写数据集之间是否存在相同的KEY来进行判断。其中,若读数据集和写数据集之间存在重叠字符串(即重叠键),则表示第一交易业务对应的读数据集被前序交易业务改变了,可以表示第一交易业务使用了前序交易业务改变的数据,因此,第一交易业务需要在前序交易业务之后执行。
为便于理解,请参见图5,图5是本申请实施例提供的一种对交易业务进行冲突检测的流程示意图。如图5所示的当前交易可以为第一节点按照交易标识从N个交易业务中依次获取的待执行的交易业务(即首个交易业务和第一交易业务),这里的N个交易业务可以为上述图4所对应实施例中的交易1、…、交易N。
应当理解,在执行步骤S51时,第一节点可以首先从N个交易业务中获取交易1(即首个交易业务),进而在执行步骤S52时,确定不存在与交易1相关联的前序交易(即前序交易业务),进而执行步骤S56,结束对交易1的冲突检测。
应当理解,在N个交易业务中还存在待执行的交易业务时,第一节点可以继续执行步骤S51,在执行步骤S51时,第一节点可以从N个交易业务中获取交易2(即第一交易业务),进而在执行步骤S52时,确定交易1为与交易2相关联的前序交易。因此,第一节点可以执行步骤S53,判断交易2的读集(即读数据集)和交易1的写集(即写数据集)是否有重叠字符串(即重叠键),进而可以在交易2的读集和交易1的写集不存在重叠字符串时,执行步骤S52,确定不存在与交易2相关联的前序交易,进而执行步骤S56,结束对交易2的冲突检测。
应当理解,在N个交易业务中还存在待执行的交易业务时,第一节点可以继续执行步骤S51,在执行步骤S51时,第一节点可以从N个交易业务中获取交易3(即第一交易业务),进而在执行步骤S52时,确定交易2为与交易3相关联的前序交易。因此,第一节点可以执行步骤S53,判断交易3的读集和交易2的写集是否有重叠字符串,进而可以在交易3的读集和交易2的写集不存在重叠字符串时,执行步骤S52,确定交易1为与交易3相关联的前序交易。
进一步地,第一节点可以执行步骤S53,判断交易3的读集和交易1的写集是否有重叠字符串,进而可以在交易3的读集和交易1的写集存在重叠字符串时,执行步骤S54和步骤S55,将交易3的索引(即交易索引值)加入交易1的交易子字段列表(即子交易列表),将交易3的交易父字段数量(即交易父字段中的依赖数量)加1,进而执行步骤S56之后,继续执行步骤S52,确定不存在与交易3相关联的前序交易,进而执行步骤S56,结束对交易3的冲突检测。
以此类推,在N个交易业务中还存在待执行的交易业务时,第一节点可以继续执行步骤S51,直到从N个交易业务中获取交易N,执行步骤S56结束对交易N的冲突检测。其中,第一节点对交易4、…、交易N的冲突检测的具体过程,可以参见上述对交易1、交易2和交易3的冲突检测的描述,在此不进行赘述。
可以理解的是,若字符串比较结果指示第一交易业务对应的读数据集与前序交易业务对应的写数据集之间均不存在重叠字符串,则第一节点可以将前序交易业务确定为不满足冲突检测条件的交易业务,基于不满足冲突检测条件的交易业务,在第一交易业务的目标关键字段中将第一交易业务的交易父字段中的依赖数量设置为目标阈值(例如,0、none),基于目标阈值,将第一交易业务添加至首个交易业务所属的并行交易数据集,且从N个交易业务中获取用于更新第一交易业务的第二交易业务。其中,第二交易业务的交易执行顺序晚于第一交易业务的交易执行顺序;并行交易数据集中的每个交易业务的依赖数量均为目标阈值,且并行交易数据集中的每个交易业务之间存在并行依赖关系,并行依赖关系用于更新业务依赖关系。
步骤S103,若冲突检测结果指示N个交易业务中存在满足冲突检测条件的交易业务,则将满足冲突检测条件的交易业务作为与第一交易业务相关联的前向依赖业务,记录第一交易业务与前向依赖业务之间的业务依赖关系;
可以理解的是,本申请实施例可以将满足冲突检测条件的交易业务作为与第一交易业务相关联的前向依赖业务,相应的,本申请实施例可以将第一交易业务作为与前向依赖业务相关联的后向依赖业务。应当理解,与某个交易业务(例如,第一交易业务)相关联的前向依赖业务的数量可以为零个、一个或多个,与某个交易业务(例如,第一交易业务)相关联的后向依赖业务的数量可以为零个、一个或多个,本申请对此不做限制。
步骤S104,基于记录到的业务依赖关系,构建与N个交易业务相关联的有向无环图,将有向无环图和N个交易业务进行打包,得到携带有向无环图的提议区块,将提议区块发送给第二节点,以使第二节点基于提议区块中的有向无环图所指示的业务依赖关系串行或者并行执行N个交易业务。
具体的,第一节点可以基于记录到的业务依赖关系中的并行依赖关系,从N个交易业务中挑选携带目标阈值的交易父字段所对应的交易业务,将挑选出的交易业务作为第一连接业务。其中,第一连接业务中包含首个交易业务。进一步地,第一节点可以基于记录到的业务依赖关系中的串行依赖关系,从第一连接业务的目标交易子字段中,获取与第一连接业务相关联的子交易列表。其中,子交易列表中包含M个第二连接业务,这里的M可以为小于N的非负整数。进一步地,第一节点可以基于第一连接业务和M个第二连接业务,构建得到与N个交易业务相关联的有向无环图,将有向无环图和N个交易业务进行打包,得到携带有向无环图的提议区块,将提议区块发送给第二节点。其中,第二节点属于第一节点所属的区块链网络中的共识节点。其中,业务依赖关系包含串行依赖关系和并行依赖关系;并行依赖关系是由首个交易业务所属的并行交易数据集中的交易业务所确定的,串行依赖关系是由与第一交易业务相关联的前向依赖业务所确定的。可以理解的是,第一节点可以从并行交易数据集中挑选第一连接业务。
可选的,在与第一连接业务相关联的子交易列表为空时,子交易列表中包含0个交易业务,则在N个交易业务中不存在与第一连接业务具有业务依赖关系的第二连接业务,即在有向无环图中,不存在与第一连接业务具有连接关系的第二连接业务。因此,第一节点可以基于第一连接业务,直接构建得到与N个交易业务相关联的有向无环图。
可以理解的是,在基于第一连接业务和M个第二连接业务,构建得到与N个交易业务相关联的有向无环图时,可以先构建第一连接业务和M个第二连接业务之间的有向无环图,即将第一连接业务连接至M个第二连接业务。进一步地,第一节点可以将M个第二连接业务作为新的第一连接业务,基于记录到的业务依赖关系中的串行依赖关系,从新的第一连接业务的目标交易子字段中,获取与新的第一连接业务相关联的子交易列表。其中,子交易列表中包含新的P个第二连接业务,进而可以构建新的第一连接业务和新的P个第二连接业务之间的有向无环图,即将新的第一连接业务连接至新的P个第二连接业务,这里的P可以为小于N的非负整数。以此类推,直到与最新的第一连接业务相关联的子交易列表为空时,得到与N个交易业务相关联的有向无环图。
为便于理解,请参见图6,图6是本申请实施例提供的一种构建有向无环图的场景示意图。交易Y-2(即前向依赖业务Y-2)和交易Y-1(即前向依赖业务Y-1)可以为与交易Y相关联的前序交易业务,这里的交易Y可以为当前执行的交易业务,即第一交易业务Y。如图6所示,交易Y-2的写数据集中的交易索引值为[D1、D7],交易Y-1的写数据集中的交易索引值为[D3、D5],第一交易业务Y的读数据集中的交易索引值为[D1、D3],这里的交易索引值可以是读数据集和写数据集中的KEY。因此,第一交易业务Y使用了交易Y-2改变的数据D1和交易Y-2改变的数据D3,则交易Y-2和交易Y-1可以称为与第一交易业务Y相关联的前向依赖业务。
应当理解,在第一交易业务Y中,交易父字段的值(即交易父字段中的依赖数量)为2,交易子字段的值(即交易子字段中的子交易列表)为none(即空),表示第一交易业务Y依赖于两个前向依赖业务的执行;在前向依赖交易Y-2中,交易父字段的值为none(即0),交易子字段的值为[Y],表示第一交易业务Y需在前向依赖交易Y-2之后执行;在前向依赖交易Y-1中,交易父字段的值为none(即0),交易子字段的值为[Y],表示第一交易业务Y需在前向依赖交易Y-1之后执行。
进一步地,第一节点可以基于第一交易业务Y和前向依赖业务之间的业务依赖关系中的并行依赖关系和串行依赖关系,即第一交易业务Y、前向依赖交易Y-1和前向依赖交易Y-2的交易父字段和交易子字段,构建图6所示的有向无环图6,该有向无环图6表示了一种前后的业务依赖关系,具有并行依赖关系的交易业务可以并行执行,具有串行依赖关系的交易业务需等到交易父字段中的交易业务执行完才能执行。因此,前向依赖交易Y-2和前向依赖交易Y-1可以并行执行,在前向依赖交易Y-2和前向依赖交易Y-1执行完后,才能执行第一交易业务Y。
为便于理解,请参见图7,图7是本申请实施例提供的一种处理交易业务的场景示意图。如图7所示,节点1可以为第一节点,节点1进行打包所得到的提议区块中可以包括N个交易业务,在N等于8时,提议区块中可以包括8个交易业务,这里的8个交易业务具体可以包括:交易1(即tx1),交易2(即tx2),交易3(即tx3),交易4(即tx4),交易5(即tx5),交易6(即tx6),交易7(即tx7),交易8(即tx8),这里的交易1、…、交易8按照交易执行顺序进行排列。
可以理解的是,节点1可以按照交易执行顺序串行执行待打包的8个交易业务,同时通过交易缓存器(即交易缓存组件)记录每个交易业务的交易读写集(即读数据集和写数据集),进而基于记录到的交易读写集,通过冲突检测器(即冲突检测组件)按照交易执行顺序对8个交易业务进行冲突检测,以得到8个交易业务之间的业务依赖关系,进而可以基于记录到的业务依赖关系,通过有向无环图构造器(即有向无环图构造组件)构建与8个交易业务相关联的有向无环图7。
可以理解的是,第一节点可以通过有向无环图存储器(即有向无环图存储组件)将有向无环图进行存储,对于有向无环图中的N个交易业务而言,可以以交易列表的方式存储N个交易业务,N个交易业务中的每个交易业务为交易列表中的一项,每一项为一个tx(即交易业务),每一个tx可以包括一个交易父字段和一个交易子字段。可选的,该有向无环图存储的方式还可以为代码方式,代码方式可以将N个交易业务抽象为一个类,该类可以表示为tx,N个交易业务中的每个交易业务作为该类的一个对象,该对象可以包括每个交易业务的交易父字段和交易子字段。其中,交易父字段可以表示为“parent”,交易子字段可以表示为“son”。
例如,交易1可以表示为:
tx1{
parent:none,
son=[tx4,tx8]
}
该tx1表示交易1的交易父字段中的依赖数量为0,交易子字段中的子交易列表为[tx4,tx8],因此,与交易1相关联的前向依赖业务的数量为0,与交易1相关联的后向依赖业务可以为交易4和交易8,即交易1可以为与交易4相关联的前向依赖业务,交易1可以为与交易8相关联的前向依赖业务。
同理,交易2可以表示为:
tx2{
parent:none,
son=none
}
该tx2表示交易2的交易父字段中的依赖数量为0,交易子字段中的子交易列表为空,即与交易2相关联的前向依赖业务的数量为0,与交易2相关联的后向依赖业务为空。
同理,对交易3、…、交易8的表示,可以参见对交易1和交易2的表示,在此不进行赘述。
可以理解的是,第二节点在接收到第一节点发送的携带有向无环图的提议区块之后,可以基于提议区块中的有向无环图所指示的业务依赖关系,串行或者并行执行提议区块中的8个交易业务。其中,具有并行依赖关系的交易业务可以并行执行,具有串行依赖关系的交易业务需要等待前向依赖业务执行完才能执行,例如,在图7所对应的实施例中,交易1、交易2和交易3可以并行执行;在交易1执行完后,可以并行执行交易4和交易8,在交易3执行完后,可以执行交易5;在交易4执行完后,可以执行交易6;在交易6执行完后,可以执行交易7。
本申请实施例中的第一节点(即打包节点)可以按照交易执行顺序串行执行待打包的N个交易业务,并可以根据串行执行每个交易业务的过程中所记录到的每个交易业务的读数据集和写数据集,确定出同一区块中的N个交易业务之间的业务依赖关系,进而在根据这些业务依赖关系构建得到有向无环图的之后,得到携带有向无环图的提议区块,可以尽可能地确保该第一节点所属区块链网络中的其他共识节点(即第二节点)可以快速基于有向无环图所指示的业务依赖关系,并行以及串行该提议区块中的N个交易业务,显然,通过第二节点所获取到的有向无环图,可以合理地让N个交易业务实现串并结合,这样,在交易冲突量较小的情况下,可以尽可能地确保这N个交易业务中的大部分交易业务均能够并行执行,从而可以改善区块链网络中的这些共识节点的共识性能,以至于可以有效地提高区块链的吞吐量。
进一步地,请参见图8,图8是本申请实施例提供的一种交易数据处理方法的流程示意图。该方法可以由第一节点(例如,上述图1所示的区块链节点10a)执行,也可以由第二节点(例如,上述图1所示的区块链节点10b)执行,还可以由第一节点和第二节点共同执行。为便于理解,本实施例以该方法由第一节点和第二节点共同执行为例进行说明。其中,该交易数据处理方法可以包括以下步骤:
步骤S201,第一节点从待打包的N个交易业务中获取第一交易业务,获取第一交易业务对应的读数据集;
其中,第一交易业务可以为N个交易业务中除首个交易业务之外的交易业务,这里的N为正整数。
其中,第一节点获取第一交易业务和第一交易业务对应的读数据集的具体过程,可以参见上述图3所对应实施例中对步骤S101的描述,这里将不再进行赘述。
步骤S202,第一节点确定第一交易业务在N个交易业务中的交易执行顺序,基于交易执行顺序、第一交易业务对应的读数据集以及冲突检测条件对第一交易业务进行冲突检测,得到冲突检测结果;
其中,第一节点对第一交易业务进行冲突检测,以得到冲突检测结果的具体过程,可以参见上述图3所对应实施例中对步骤S102的描述,这里将不再进行赘述。
步骤S203,若冲突检测结果指示N个交易业务中存在满足冲突检测条件的交易业务,则第一节点将满足冲突检测条件的交易业务作为与第一交易业务相关联的前向依赖业务,记录第一交易业务与前向依赖业务之间的业务依赖关系;
其中,第一节点确定与第一交易业务相关联的前向依赖业务,且记录第一交易业务与前向依赖业务之间的业务依赖关系的具体过程,可以参见上述图3所对应实施例中对步骤S103的描述,这里将不再进行赘述。
步骤S204,第一节点基于记录到的业务依赖关系,构建与N个交易业务相关联的有向无环图,将有向无环图和N个交易业务进行打包,得到携带有向无环图的提议区块,将提议区块发送给第二节点;
其中,第一节点基于记录到的业务依赖关系,构建与N个交易业务相关联的有向无环图的具体过程,可以参见上述图3所对应实施例中对步骤S104的描述,这里将不再进行赘述。
步骤S205,第二节点接收第一节点发送的携带有向无环图的提议区块;
其中,第二节点属于第一节点所属的区块链网络中的共识节点,第一节点属于第二节点所属的区块链网络中的打包节点。其中,打包节点属于区块链网络中的共识节点,这里的第一节点可以为区块链网络的共识节点中的任意一个共识节点。
步骤S206,第二节点基于有向无环图所指示的业务依赖关系,从N个交易业务中挑选满足交易执行条件的交易业务,将挑选出的交易业务作为第一连接业务,获取与第一连接业务相关联的子交易列表;
其中,子交易列表中包含M个第二连接业务,这里的M可以为小于N的非负整数;第一连接业务中可以包含首个交易业务。
可以理解的是,N个交易业务中携带目标阈值的交易业务即为满足交易执行条件的交易业务,即满足交易执行条件的交易业务的交易父字段中的依赖数量等于目标阈值。
为便于理解,请参见图9,图9是本申请实施例提供的一种获取交易业务的场景示意图。如图9所示的有向无环图9可以为上述图7所对应实施例中的有向无环图7。交易1的交易父字段中的依赖数量等于目标阈值(即0),则交易1可以为满足交易执行条件的交易业务,因此,第二节点可以将交易1作为第一连接业务100a。在获取到与交易1相关联的子交易列表时,第二节点可以将子交易列表中的交易业务作为第二连接业务200a,这里可以将交易4和交易8作为第二连接业务200a(即2个第二连接业务)。其中,交易4和交易8的交易父字段中的依赖数量可以等于1。
同理,在另一条执行路径中,交易2的交易父字段中的依赖数量也等于目标阈值(即0),则交易2可以为满足交易执行条件的交易业务,因此,第二节点可以将交易2作为第一连接业务100a。在获取到与交易2相关联的子交易列表时,确定子交易列表中不存在交易业务,即不存在第一连接业务100a(即交易2)所对应的第二连接业务200a。
同理,在另一条执行路径中,交易3的交易父字段中的依赖数量也等于目标阈值(即0),则交易3可以为满足交易执行条件的交易业务,因此,第二节点可以将交易3作为第一连接业务100a。在获取到与交易3相关联的子交易列表时,第二节点可以将子交易列表中的交易业务作为第二连接业务200a,这里可以将交易5作为第二连接业务200a(即1个第二连接业务)。其中,交易5的交易父字段中的依赖数量可以等于1。
应当理解,本申请实施例可以将上述交易1、交易2和交易3统称为第一连接业务,将上述交易4、交易8和交易5统称为第二连接业务。
步骤S207,第二节点基于第一连接业务和M个第二连接业务,构建与提议区块中的N个交易业务相关联的辅助无环图,基于辅助无环图对有向无环图进行合法验证。
具体的,第二节点可以通过交易协调器分别将第一连接业务和M个第二连接业务传递至与交易协调器相关联的交易执行协程池,在交易执行协程池中存在处于闲置状态的协程时,将处于闲置状态的协程作为第一协程,在第一协程的业务状态为工作状态时,通过第一协程执行第一连接业务,得到第一连接业务对应的第一交易执行结果。进一步地,第二节点可以基于第一交易执行结果,将M个第二连接业务中每个第二连接业务的交易父字段的依赖数量进行递减处理,将递减处理后的每个第二连接业务分别作为待处理业务。进一步地,第二节点可以从每个待处理业务中查找交易父字段的依赖数量达到交易执行条件中的目标阈值的待处理业务,将查找到的待处理业务作为与第一连接业务相关联的后向依赖业务。进一步地,第二节点可以在交易执行协程池中将处于闲置状态的协程作为第二协程,在第二协程的业务状态为工作状态时,通过第二协程执行后向依赖业务,得到后向依赖业务对应的第二交易执行结果,直到执行完每个待处理业务时,得到每个待处理业务对应的第二交易执行结果。进一步地,第二节点可以基于第一交易执行结果、每个待处理业务对应的第二交易执行结果,构建与提议区块中的N个交易业务相关联的辅助无环图,基于辅助无环图对有向无环图进行合法验证。
可选的,在第一协程的数量小于第一连接业务的数量时,可以通过第一协程执行第一连接业务中的一部分第一连接业务,在交易执行协程池中存在新的处于闲置状态的第一协程时,使用这些新的处于闲置状态的第一协程来执行第一连接业务中的另一部分第一连接业务。同理,在第二协程的数量小于第二连接业务的数量时,可以通过第二协程执行后向依赖业务中的一部分后向依赖业务,在交易执行协程池中存在新的处于闲置状态的第二协程时,使用这些新的处于闲置状态的第二协程来执行后向依赖业务中的另一部分后向依赖业务。
可以理解的是,在将处于闲置状态的协程作为第一协程时,可以通过第一协程执行第一连接业务,这里的一个第一连接业务对应一个第一协程,若第一连接业务的数量小于第一协程的数量,则在第一协程执行第一连接业务时,交易执行协程池中还存在处于闲置状态的协程(即第一协程),第二节点可以将这些处于闲置状态的第一协程作为第二协程。例如,在交易执行协程池中存在X1个处于闲置状态的协程时,可以将这X1个协程作为第一协程,在第一连接业务的数量为X2个(假设X2小于X1)时,可以通过X1个协程中的X2个协程执行第一连接业务,并将剩余的(X1-X2)个处于闲置状态的协程(即第一协程)作为第二协程,以通过(X1-X2)个协程执行满足交易执行条件的待处理业务(即后向依赖业务)。
请再参见图9,在第一连接业务100a为交易1,第二连接业务200a为交易4和交易8时,通过第一协程可以执行交易1,在交易1执行完成后,可以将交易4和交易8的交易父字段中的依赖数量进行递减处理,进而将交易4和交易8作为待处理业务。同理,在第一连接业务100a为交易3,第二连接业务200a为交易5时,通过第一协程可以执行交易3,在交易3执行完成后,可以将交易5的交易父字段中的依赖数量进行递减处理,进而将交易4作为待处理业务。同理,在第一连接业务100a为交易2时,通过第一协程可以执行交易2,在交易2执行完成后,由于与交易2相关联的子交易列表为空,无需进行递减操作。
其中,以第一连接业务100a为交易1,第二连接业务200a为交易4和交易8为例,第二节点可以基于第一连接业务100a对应的第一交易执行结果,获取满足交易执行条件的交易业务,即获取交易父字段中的依赖数量等于目标阈值(即0)的交易业务,将获取到的满足交易执行条件的交易业务作为后向依赖业务,例如,这里可以将交易4、交易8作为后向依赖业务(即第二连接业务200a)。
可以理解的是,本申请实施例可以第二连接业务200a作为新的第一连接业务(即第一连接业务100b),在获取到与第一连接业务100b相关联的子交易列表时,第二节点可以将子交易列表中的交易业务作为新的第二连接业务(即第二连接业务200b),这里可以将交易6作为第二连接业务200b(即1个第二连接业务)。
可以理解的是,通过新的第一协程(即第二协程)可以执行交易4和交易8。在交易4执行完成后,可以将交易6的交易子字段中的依赖数量进行递减处理,进而将交易6作为新的待处理业务;在交易8执行完成后,由于与交易8相关联的子交易列表为空,所以无需进行递减操作。
应当理解,第二节点可以基于第一连接业务100b对应的第二交易执行结果(即新的第一交易执行结果),继续获取满足交易执行条件的交易业务,以此类推,直到提议区块中的N个交易业务全部执行完毕。
应当理解,第二节点可以基于第一交易执行结果,在交易执行协程池的工作队列中释放第一协程。进一步地,第二节点可以将第一协程的业务状态由工作状态切换为闲置状态,将处于闲置状态的第一协程添加至交易执行协程池所对应的闲置队列。同理,在将处于闲置状态的第一协程的业务状态切换为工作状态时,第二节点可以在交易执行协程池的闲置队列中释放第一协程,进而将第一协程的业务状态由闲置状态切换为工作状态,将处于工作状态的第一协程添加至交易协程池所对应的工作队列。其中,第二协程的业务状态的切换过程可以参见对第一协程的业务状态的切换过程的描述。应当理解,闲置队列和工作队列中的协程的数量是不确定的,本申请对此不作限定。
为便于理解,请参见图10,图10是本申请实施例提供的一种调度交易业务的场景示意图。如图10所示,交易执行协程池中可以包括工作协程和空闲协程(即闲置协程),工作协程的业务状态为工作状态,空闲协程的业务状态为闲置状态,这里的工作协程具体可以包括:协程1,协程2,…,协程X,这里的空闲协程具体可以包括:协程X+1,协程X+2,…,等。其中,工作协程可以属于交易执行协程池中的工作队列,空闲协程可以属于交易执行协程池中的闲置队列。
如图10所示,交易调度器(即交易协调器、交易调度组件)可以循环地从N个交易业务的待执行交易业务(即交易列表)中查找满足交易执行条件的交易业务,这里的满足交易执行条件的交易业务的交易父字段为空(即交易父字段的依赖数量等于0),进而将满足交易执行条件的交易业务发送给交易执行协程池进行处理,直到交易列表中的所有交易业务执行完毕。
请一并参见图9所对应实施例中的有向无环图9,交易调度器可以获取第一连接业务(例如,交易1),将交易1发送至交易执行协程池,获取交易执行协程池中处于闲置状态的协程,例如,从闲置队列中获取协程X+1,通过协程X+1执行交易1,在闲置队列中释放协程X+1,将协程X+1的业务状态由闲置状态切换为工作状态,将处于工作状态的协程X+1添加至工作队列。
进一步地,通过协程X+1执行完成交易1后,在工作队列中释放协程X+1,将协程X+1的业务状态由工作状态切换为闲置状态,将处于闲置状态的协程X+1添加至闲置队列。交易调度器可以获取待处理业务(即交易4和交易8),将交易4和交易8发送至交易执行协程池,获取交易执行协程池中处于闲置状态的协程,例如,从闲置队列中获取协程X+2和协程X+3,以通过协程X+2执行交易8,通过协程X+3执行交易4。以此类推,直到交易1、交易4、交易8、交易6和交易7执行完毕为止。
同理,交易调度器可以获取第一连接业务(例如,交易2和交易3),将交易2和交易3发送至交易执行协程池,获取交易执行协程池中处于闲置状态的协程,以执行交易2和交易3,进而在执行交易3后执行交易5。其中,交易调度器对交易2和交易3的执行过程可以参见上述对交易1的描述,交易调度器对交易5的执行过程可以参见上述对交易4和交易8的描述。在提议区块中的所有交易业务执行完毕时,交易调度器可以结束对交易列表的查找。
为便于理解,请参见图11,图11是本申请实施例提供的一种串行以及并行执行交易业务的场景示意图。如图11所示,交易1、…、交易8可以为上述图9所对应实施例中的交易业务。节点1(即第一节点)可以为图1所对应实施例中的节点10a,节点2(即第二节点12a)可以为图1所对应实施例中的节点10b,节点3(即第二节点12b)可以为图1所对应实施例中的节点10c,这里的第二节点12a和第二节点12b可以统称为第二节点。可以理解的是,区块链网络中还可以包括其他共识节点,例如,还可以包括第二节点12c(未在图上示出)等。其中,时间轴可以表示提议区块中的N个交易业务的执行顺序,这里不对时间轴上每两个时刻之间的时间间隔进行限定。
应当理解,第一节点可以根据交易1、…、交易8的交易执行顺序,串行执行交易1、…、交易8,例如,在时刻T11执行交易1,在时刻T12执行交易2,在时刻T13执行交易3,在时刻T14执行交易4,在时刻T15执行交易5,在时刻T16执行交易6,在时刻T17执行交易7,在时刻T18执行交易8。
应当理解,第二节点12a可以根据有向无环图确定的业务依赖关系,串行以及并行执行交易1、…、交易8,例如,在时刻T21并行执行交易1、交易2和交易3,在执行完交易1、交易2和交易3之后,在时刻T22并行执行交易4、交易8和交易5,在执行完交易4、交易8和交易5之后,在时刻T23执行交易6,在执行完交易6后,在时刻T24执行交易7。
应当理解,在第二节点12a中,交易1、交易2和交易3之间不存在业务依赖关系,彼此相互独立,因此交易1、交易2和交易3可以并行执行。可以理解的是,交易4、交易8和交易5的执行时刻可以不相同,在交易1执行完成后可以执行交易4和交易8,在交易3执行完成后可以执行交易5。在假设交易1和交易3的执行时间相同、且存在足够的处于闲置状态的协程时,交易4、交易8和交易5可以在同一时刻(例如,上述时刻T22)执行。
同理,第二节点12b执行交易1、…、交易8的具体过程,可以参见第二节点12a执行交易1、…、交易8的描述,这里将不进行赘述。其中,第二节点12a和第二节点12b执行交易业务的总时间可以相同、也可以不相同。
应当理解,在区块链网络的除第一节点、第二节点12a和第二节点12b以外的其他共识节点(例如,第二节点12c)中,执行N个交易业务的具体过程,可以一并参见第二节点12a和第二节点12b执行N个交易业务的描述,这里将不进行赘述。
可以理解的是,基于第一交易执行结果、每个待处理业务对应的第二交易执行结果,构建与提议区块中的N个交易业务相关联的辅助无环图,基于辅助无环图对有向无环图进行合法验证的具体过程可以描述为:在合并第一交易执行结果和每个待处理业务对应的第二交易执行结果时,第二节点可以将第一交易执行结果写入第一连接业务的第一交易写缓存,将写入第一交易写缓存中的数据作为第一连接业务的第一写数据集。进一步地,第二节点可以在每个待处理业务对应的第二交易执行结果中遍历获取第i个交易执行结果,将第i个交易执行结果写入第i个待处理业务的第二交易写缓存,将写入第i个待处理业务的第二交易写缓存中的数据作为第i个待处理业务的第二写数据集,且在第i个待处理业务的交易读缓存中获取第i个待处理业务对应的第二读数据集,直到执行完每个待处理业务时,得到每个待处理业务的第二读数据集。其中,这里的i可以为小于或者等于M的非负整数。进一步地,第二节点可以基于第一连接业务的第一写数据集和每个待处理业务的第二读数据集,构建与N个交易业务相关联的辅助无环图。进一步地,第二节点可以将辅助无环图和有向无环图进行相似比较,得到相似比较结果,基于相似比较结果确定有向无环图的合法性。
其中,可以理解的是,第二节点基于第一连接业务的第一写数据集和每个待处理业务的第二读数据集,构建与N个交易业务相关联的辅助无环图的具体过程,可以参见第一节点构建与N个交易业务相关联的有向无环图的描述,这里将不进行赘述。
其中,可以理解的是,在基于第一连接业务的第一写数据集和每个待处理业务的第二读数据集,构建与N个交易业务相关联的辅助无环图时,可以先基于第一连接业务的第一写数据集和每个待处理业务的第二读数据集,构建与第一连接业务和每个待处理业务相关联的第一辅助无环图。进一步地,第二节点可以将每个待处理业务作为新的第一连接业务,将每个待处理业务的第二写数据集作为新的第一写数据集,获取与每个待处理业务相关联的子交易列表。其中,子交易列表中包含新的待处理业务,进而可以获取新的待处理业务的新的第二读数据集,基于新的第一连接业务的新的第一写数据集和新的待处理业务的新的第二读数据集,构建与新的第一连接业务和新的待处理业务相关联的第二辅助无环图。其中,第二辅助无环图是在第一辅助无环图的基础上所构建的。以此类推,直到与最新的第一连接业务相关联的子交易列表为空时,得到与N个交易业务相关联的辅助无环图。
可以理解的是,在第一节点作恶时,第一节点可以向第二节点发送包含虚假有向无环图的提议区块,因此,第二节点可以通过有向无环图有效验证器(即有向无环图有效验证组件)判断提议区块中的有向无环图的真假性,以对第一节点是否有作恶行为进行判断。其中,通过对从第一节点接收到的有向无环图和在第二节点所构造的辅助无环图进行比较,可以快速的对接收到的有向无环图的合法性进行判断,若上述相似比较结果指示辅助无环图与有向无环图不相同,则第二节点可以通过共识委员会合约发起对第一节点的作恶投票,在共识节点列表中的共识节点的作恶投票数达到投票阈值时,确定有向无环图是非法的。
应当理解,在确定有向无环图不具备合法性时,第二节点可以调用用于维护共识节点列表的共识委员会合约,通过共识委员会合约获取共识节点列表,在共识节点列表中删除第一节点的节点标识(即链的惩罚)。
由此可见,第一节点(即参与共识的打包节点)在按照N个交易业务的交易执行顺序串行执行第一交易业务(应当理解,这里的第一交易业务为N个交易业务中除首个交易业务之外的其他交易业务)的过程中,可以进行冲突检测,进而可以根据冲突检测结果记录得到每个交易业务之间的业务依赖关系,这样,在根据这些业务依赖关系构建得到有向无环图之后,可以进一步将打包得到的携带有向无环图的提议区块,发送给区块链网络中的其他共识节点(例如,第二节点),以使其他节点(例如,第二节点)能够直接根据接收到的提议区块中的有向无环图所指示的业务依赖关系串行或者并行执行这N个交易业务。应当理解,通过在这些共识节点中根据有向无环图实现对交易业务的并行执行,可以提高交易业务的执行效率,从而可以改善第二节点的共识性能,进而可以提高区块链的吞吐量。
进一步地,请参见图12,图12是本申请实施例提供的一种交易数据处理装置的结构示意图。其中,该交易数据处理装置1可以包括:第一获取模块11,冲突检测模块12,依赖记录模块13,区块发送模块14;进一步地,交易数据处理装置1还可以包括:合约调用模块15,第二获取模块16;
第一获取模块11,用于从待打包的N个交易业务中获取第一交易业务,获取第一交易业务对应的读数据集;第一交易业务为N个交易业务中除首个交易业务之外的交易业务;N为正整数;
冲突检测模块12,用于确定第一交易业务在N个交易业务中的交易执行顺序,基于交易执行顺序、第一交易业务对应的读数据集以及冲突检测条件对第一交易业务进行冲突检测,得到冲突检测结果;
其中,第一交易业务为从N个交易业务中所获取到的待被执行的交易业务,第一交易业务对应的交易读缓存中包括第一交易业务对应的读数据集;
冲突检测模块12包括:顺序确定单元121,交易查找单元122,写集获取单元123,冲突检测单元124;
顺序确定单元121,用于获取为N个交易业务中的每个交易业务配置的交易标识,确定第一交易业务的交易标识在N个交易业务的交易标识中的标识位置,基于标识位置确定第一交易业务的交易执行顺序;
交易查找单元122,用于在N个交易业务中,查找交易执行顺序早于第一交易业务的交易执行顺序的交易业务,将查找到的交易业务作为与第一交易业务相关联的前序交易业务;前序交易业务为从N个交易业务中所获取到的已被执行的交易业务;
写集获取单元123,用于获取前序交易业务的交易写缓存,从交易写缓存中获取前序交易业务对应的写数据集;
冲突检测单元124,用于基于前序交易业务对应的写数据集、第一交易业务对应的读数据集以及冲突检测条件,对第一交易业务进行冲突检测,得到冲突检测结果。
其中,冲突检测单元124包括:数据比较子单元1241,第一比较子单元1242,字段确定子单元1243,结果确定子单元1244;可选的,冲突检测单元124可以进一步包括:第二比较子单元1245;
数据比较子单元1241,用于将第一交易业务对应的读数据集与前序交易业务对应的写数据集进行字符串比较,得到字符串比较结果;
第一比较子单元1242,用于若字符串比较结果指示第一交易业务对应的读数据集与前序交易业务对应的写数据集之间存在重叠字符串,则将存在重叠字符串的前序交易业务确定为满足冲突检测条件的目标前序交易业务;
字段确定子单元1243,用于将第一交易业务的交易索引值添加至目标前序交易业务的历史关键字段所对应的初始交易子字段,得到目标前序交易业务的目标交易子字段,在第一交易业务的目标关键字段中对第一交易业务的交易父字段中的依赖数量进行递增处理,得到递增后的交易父字段;
结果确定子单元1244,用于将目标前序交易业务的目标交易子字段和递增后的交易父字段,作为与第一交易业务相关联的冲突检测结果。
可选的,第二比较子单元1245,用于若字符串比较结果指示第一交易业务对应的读数据集与前序交易业务对应的写数据集之间均不存在重叠字符串,则将前序交易业务确定为不满足冲突检测条件的交易业务,基于不满足冲突检测条件的交易业务,在第一交易业务的目标关键字段中将第一交易业务的交易父字段中的依赖数量设置为目标阈值,基于目标阈值,将第一交易业务添加至首个交易业务所属的并行交易数据集,且从N个交易业务中获取用于更新第一交易业务的第二交易业务;第二交易业务的交易执行顺序晚于第一交易业务的交易执行顺序;并行交易数据集中的每个交易业务的依赖数量均为目标阈值,且并行交易数据集中的每个交易业务之间存在并行依赖关系,并行依赖关系用于更新业务依赖关系。
其中,数据比较子单元1241,第一比较子单元1242,字段确定子单元1243,结果确定子单元1244以及第二比较子单元1245的具体实现方式,可以参见上述图3所对应实施例中对步骤S102的描述,这里将不再进行赘述。
其中,顺序确定单元121,交易查找单元122,写集获取单元123以及冲突检测单元124的具体实现方式,可以参见上述图3所对应实施例中对步骤S102的描述,这里将不再进行赘述。
依赖记录模块13,用于若冲突检测结果指示N个交易业务中存在满足冲突检测条件的交易业务,则将满足冲突检测条件的交易业务作为与第一交易业务相关联的前向依赖业务,记录第一交易业务与前向依赖业务之间的业务依赖关系;
区块发送模块14,用于基于记录到的业务依赖关系,构建与N个交易业务相关联的有向无环图,将有向无环图和N个交易业务进行打包,得到携带有向无环图的提议区块,将提议区块发送给第二节点,以使第二节点基于提议区块中的有向无环图所指示的业务依赖关系串行或者并行执行N个交易业务;第二节点属于第一节点所属的区块链网络中的共识节点。
其中,业务依赖关系包含串行依赖关系和并行依赖关系;并行依赖关系是由首个交易业务所属的并行交易数据集中的交易业务所确定的;串行依赖关系是由与第一交易业务相关联的前向依赖业务所确定的;
区块发送模块14包括:第一获取单元141,第二获取单元142,无环图构建单元143;
第一获取单元141,用于基于记录到的业务依赖关系中的并行依赖关系,从N个交易业务中挑选携带目标阈值的交易父字段所对应的交易业务,将挑选出的交易业务作为第一连接业务;第一连接业务中包含首个交易业务;
第二获取单元142,用于基于记录到的业务依赖关系中的串行依赖关系,从第一连接业务的目标交易子字段中,获取与第一连接业务相关联的子交易列表;子交易列表中包含M个第二连接业务;M为小于N的非负整数;
无环图构建单元143,用于基于第一连接业务和M个第二连接业务,构建得到与N个交易业务相关联的有向无环图,将有向无环图和N个交易业务进行打包,得到携带有向无环图的提议区块,将提议区块发送给第二节点。
其中,第一获取单元141,第二获取单元142以及无环图构建单元143的具体实现方式,可以参见上述图3所对应实施例中对步骤S104的描述,这里将不再进行赘述。
可选的,合约调用模块15,用于基于第一交易业务对应的读数据集中的合约调用地址以及合约名称,获取用于执行第一交易业务的智能合约,调用智能合约执行第一交易业务,得到第一交易业务对应的交易业务执行结果,将交易业务执行结果添加至第一交易业务的交易写缓存,基于交易写缓存中所存储的数据构建得到第一交易业务对应的写数据集。
可选的,第二获取模块16,用于从N个交易业务中获取首个交易业务,基于首个交易业务对应的读数据集执行首个交易业务,得到首个交易业务的首个业务执行结果,将首个业务执行结果添加至首个交易业务的首个交易写缓存,基于首个交易写缓存中所存储的数据构建得到首个交易业务对应的写数据集;首个交易业务的交易执行顺序早于第一交易业务的交易执行顺序,且首个交易业务用于作为第一交易业务的前序交易业务。
其中,第一获取模块11,冲突检测模块12,依赖记录模块13、区块发送模块14,合约调用模块15以及第二获取模块16的具体实现方式,可以参见上述图3所对应实施例中对步骤S101-步骤S104的描述,这里将不再进行赘述。另外,对采用相同方法的有益效果描述,也不再进行赘述。
进一步地,请参见图13,图13是本申请实施例提供的一种交易数据处理装置的结构示意图。其中,该交易数据处理装置2可以包括:区块接收模块21,交易挑选模块22,合法验证模块23;
区块接收模块21,用于接收第一节点发送的携带有向无环图的提议区块;有向无环图是基于提议区块中的N个交易业务之间的业务依赖关系所构建的;业务依赖关系是从N个交易业务中获取第一交易业务之后,由第一交易业务以及与第一交易业务相关联的前向依赖业务所确定的;前向依赖业务是基于第一交易业务在N个交易业务中的交易执行顺序、第一交易业务对应的读数据集以及冲突检测条件,对第一交易业务进行冲突检测所得到的;第一节点属于第二节点所属的区块链网络中的打包节点;第一交易业务为N个交易业务中除首个交易业务之外的交易业务;N为正整数;
交易挑选模块22,用于基于有向无环图所指示的业务依赖关系,从N个交易业务中挑选满足交易执行条件的交易业务,将挑选出的交易业务作为第一连接业务,获取与第一连接业务相关联的子交易列表;子交易列表中包含M个第二连接业务;M为小于N的非负整数;第一连接业务中包含首个交易业务;
合法验证模块23,用于基于第一连接业务和M个第二连接业务,构建与提议区块中的N个交易业务相关联的辅助无环图,基于辅助无环图对有向无环图进行合法验证。
其中,合法验证模块23包括:第一执行单元231,交易确定单元232,业务确定单元233,第二执行单元234,合法验证单元235;可选的,合法验证模块23可以进一步包括:协程释放单元236,状态切换单元237,节点删除单元238;
第一执行单元231,用于通过交易协调器分别将第一连接业务和M个第二连接业务传递至与交易协调器相关联的交易执行协程池,在交易执行协程池中存在处于闲置状态的协程时,将处于闲置状态的协程作为第一协程,在第一协程的业务状态为工作状态时,通过第一协程执行第一连接业务,得到第一连接业务对应的第一交易执行结果;
交易确定单元232,用于基于第一交易执行结果,将M个第二连接业务中每个第二连接业务的交易父字段的依赖数量进行递减处理,将递减处理后的每个第二连接业务分别作为待处理业务;
业务确定单元233,用于从每个待处理业务中查找交易父字段的依赖数量达到交易执行条件中的目标阈值的待处理业务,将查找到的待处理业务作为与第一连接业务相关联的后向依赖业务;
第二执行单元234,用于在交易执行协程池中将处于闲置状态的协程作为第二协程,在第二协程的业务状态为工作状态时,通过第二协程执行后向依赖业务,得到后向依赖业务对应的第二交易执行结果,直到执行完每个待处理业务时,得到每个待处理业务对应的第二交易执行结果;
合法验证单元235,用于基于第一交易执行结果、每个待处理业务对应的第二交易执行结果,构建与提议区块中的N个交易业务相关联的辅助无环图,基于辅助无环图对有向无环图进行合法验证。
其中,合法验证单元235包括:第一确定子单元2351,第二确定子单元2352,辅助构建子单元2353,合法确定子单元2354;
第一确定子单元2351,用于在合并第一交易执行结果和每个待处理业务对应的第二交易执行结果时,将第一交易执行结果写入第一连接业务的第一交易写缓存,将写入第一交易写缓存中的数据作为第一连接业务的第一写数据集;
第二确定子单元2352,用于在每个待处理业务对应的第二交易执行结果中遍历获取第i个交易执行结果,将第i个交易执行结果写入第i个待处理业务的第二交易写缓存,将写入第i个待处理业务的第二交易写缓存中的数据作为第i个待处理业务的第二写数据集,且在第i个待处理业务的交易读缓存中获取第i个待处理业务对应的第二读数据集,直到执行完每个待处理业务时,得到每个待处理业务的第二读数据集;i为小于或者等于M的非负整数;
辅助构建子单元2353,用于基于第一连接业务的第一写数据集和每个待处理业务的第二读数据集,构建与N个交易业务相关联的辅助无环图;
合法确定子单元2354,用于将辅助无环图和有向无环图进行相似比较,得到相似比较结果,基于相似比较结果确定有向无环图的合法性。
其中,第一确定子单元2351,第二确定子单元2352,辅助构建子单元2353以及合法确定子单元2354的具体实现方式,可以参见上述图8所对应实施例中对步骤S207的描述,这里将不再进行赘述。
可选的,协程释放单元236,用于基于第一交易执行结果,在交易执行协程池的工作队列中释放第一协程;
状态切换单元237,用于将第一协程的业务状态由工作状态切换为闲置状态,将处于闲置状态的第一协程添加至交易执行协程池所对应的闲置队列。
可选的,节点删除单元238,用于在确定有向无环图不具备合法性时,调用用于维护共识节点列表的共识委员会合约,通过共识委员会合约获取共识节点列表,在共识节点列表中删除第一节点的节点标识。
其中,第一执行单元231,交易确定单元232,业务确定单元233,第二执行单元234、合法验证单元235、协程释放单元236,状态切换单元237以及节点删除单元238的具体实现方式,可以参见上述图8所对应实施例中对步骤S207的描述,这里将不再进行赘述。
其中,区块接收模块21,交易挑选模块22以及合法验证模块23的具体实现方式,可以参见上述图8所对应实施例中对步骤S205-步骤S207的描述,这里将不再进行赘述。另外,对采用相同方法的有益效果描述,也不再进行赘述。
进一步地,请参见图14,图14是本申请实施例提供的一种计算机设备的结构示意图。如图14所示,该计算机设备2000可以包括:处理器2001,网络接口2004和存储器2005,此外,上述计算机设备2000还可以包括:用户接口2003,和至少一个通信总线2002。其中,通信总线2002用于实现这些组件之间的连接通信。其中,用户接口2003可以包括显示屏(Display)、键盘(Keyboard),可选用户接口2003还可以包括标准的有线接口、无线接口。可选的,网络接口2004可以包括标准的有线接口、无线接口(如WI-FI接口)。存储器2005可以是高速RAM存储器,也可以是非不稳定的存储器(non-volatile memory),例如至少一个磁盘存储器。可选的,存储器2005还可以是至少一个位于远离前述处理器2001的存储装置。如图14所示,作为一种计算机可读存储介质的存储器2005中可以包括操作系统、网络通信模块、用户接口模块以及设备控制应用程序。
在如图14所示的计算机设备2000中,网络接口2004可提供网络通讯功能;而用户接口2003主要用于为用户提供输入的接口;而处理器2001可以用于调用存储器2005中存储的设备控制应用程序。
应当理解,本申请实施例中所描述的计算机设备2000可执行前文图3和图8所对应实施例中对交易数据处理方法的描述,也可执行前文图12和图13所对应实施例中对交易数据处理装置1和交易数据处理装置2的描述,在此不再赘述。另外,对采用相同方法的有益效果描述,也不再进行赘述。
此外,这里需要指出的是:本申请实施例还提供了一种计算机可读存储介质,且计算机可读存储介质中存储有前文提及的交易数据处理装置1和交易数据处理装置2所执行的计算机程序,且计算机程序包括程序指令,当处理器执行程序指令时,能够执行前文图3和图8所对应实施例中对交易数据处理方法的描述,因此,这里将不再进行赘述。另外,对采用相同方法的有益效果描述,也不再进行赘述。对于本申请所涉及的计算机可读存储介质实施例中未披露的技术细节,请参照本申请方法实施例的描述。
此外,需要说明的是:本申请实施例还提供了一种计算机程序产品或计算机程序,该计算机程序产品或者计算机程序可以包括计算机指令,该计算机指令可以存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器可以执行该计算机指令,使得该计算机设备执行前文图3和图8所对应实施例中对交易数据处理方法的描述,因此,这里将不再进行赘述。另外,对采用相同方法的有益效果描述,也不再进行赘述。对于本申请所涉及的计算机程序产品或者计算机程序实施例中未披露的技术细节,请参照本申请方法实施例的描述。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,计算机程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)或随机存储记忆体(Random Access Memory,RAM)等。
以上所揭露的仅为本申请较佳实施例而已,当然不能以此来限定本申请之权利范围,因此依本申请权利要求所作的等同变化,仍属本申请所涵盖的范围。
Claims (14)
1.一种交易数据处理方法,其特征在于,所述方法由第一节点执行,包括:
从待打包的N个交易业务中获取第一交易业务,获取所述第一交易业务对应的读数据集;所述第一交易业务为所述N个交易业务中除首个交易业务之外的交易业务;所述N为正整数;
确定所述第一交易业务在所述N个交易业务中的交易执行顺序,基于所述交易执行顺序、所述第一交易业务对应的读数据集以及冲突检测条件对所述第一交易业务进行冲突检测,得到冲突检测结果;
若所述冲突检测结果指示所述N个交易业务中存在满足所述冲突检测条件的交易业务,则将满足所述冲突检测条件的交易业务作为与所述第一交易业务相关联的前向依赖业务,记录所述第一交易业务与所述前向依赖业务之间的业务依赖关系;其中,所述业务依赖关系包含串行依赖关系和并行依赖关系;所述并行依赖关系是由所述首个交易业务所属的并行交易数据集中的交易业务所确定的;所述串行依赖关系是由与所述第一交易业务相关联的前向依赖业务所确定的;
基于记录到的所述业务依赖关系中的所述并行依赖关系,从所述N个交易业务中挑选携带目标阈值的交易父字段所对应的交易业务,将挑选出的交易业务作为第一连接业务;所述第一连接业务中包含所述首个交易业务;
基于记录到的所述业务依赖关系中的所述串行依赖关系,从所述第一连接业务的目标交易子字段中,获取与所述第一连接业务相关联的子交易列表;所述子交易列表中包含M个第二连接业务;所述M为小于所述N的非负整数;
基于所述第一连接业务和所述M个第二连接业务,构建得到与所述N个交易业务相关联的有向无环图,将所述有向无环图和所述N个交易业务进行打包,得到携带所述有向无环图的提议区块,将所述提议区块发送给第二节点,以使所述第二节点基于所述提议区块中的所述有向无环图所指示的所述业务依赖关系串行或者并行执行所述N个交易业务;所述第二节点属于所述第一节点所属的区块链网络中的共识节点。
2.根据权利要求1所述的方法,所述第一交易业务为从所述N个交易业务中所获取到的待被执行的交易业务,所述第一交易业务对应的交易读缓存中包括所述第一交易业务对应的读数据集;
所述确定所述第一交易业务在所述N个交易业务中的交易执行顺序,基于所述交易执行顺序、所述第一交易业务对应的读数据集以及冲突检测条件对所述第一交易业务进行冲突检测,得到冲突检测结果,包括:
获取为所述N个交易业务中的每个交易业务配置的交易标识,确定所述第一交易业务的交易标识在所述N个交易业务的交易标识中的标识位置,基于所述标识位置确定所述第一交易业务的交易执行顺序;
在所述N个交易业务中,查找交易执行顺序早于所述第一交易业务的交易执行顺序的交易业务,将查找到的交易业务作为与所述第一交易业务相关联的前序交易业务;所述前序交易业务为从所述N个交易业务中所获取到的已被执行的交易业务;
获取所述前序交易业务的交易写缓存,从所述交易写缓存中获取所述前序交易业务对应的写数据集;
基于所述前序交易业务对应的写数据集、所述第一交易业务对应的读数据集以及冲突检测条件,对所述第一交易业务进行冲突检测,得到冲突检测结果。
3.根据权利要求2所述的方法,其特征在于,所述方法还包括:
从所述N个交易业务中获取所述首个交易业务,基于所述首个交易业务对应的读数据集执行所述首个交易业务,得到所述首个交易业务的首个业务执行结果,将所述首个业务执行结果添加至所述首个交易业务的首个交易写缓存,基于所述首个交易写缓存中所存储的数据构建得到所述首个交易业务对应的写数据集;所述首个交易业务的交易执行顺序早于所述第一交易业务的交易执行顺序,且所述首个交易业务用于作为所述第一交易业务的前序交易业务。
4.根据权利要求2所述的方法,其特征在于,所述基于所述前序交易业务对应的写数据集、所述第一交易业务对应的读数据集以及冲突检测条件,对所述第一交易业务进行冲突检测,得到冲突检测结果,包括:
将所述第一交易业务对应的读数据集与所述前序交易业务对应的写数据集进行字符串比较,得到字符串比较结果;
若所述字符串比较结果指示所述第一交易业务对应的读数据集与所述前序交易业务对应的写数据集之间存在重叠字符串,则将存在重叠字符串的前序交易业务确定为满足冲突检测条件的目标前序交易业务;
将所述第一交易业务的交易索引值添加至所述目标前序交易业务的历史关键字段所对应的初始交易子字段,得到所述目标前序交易业务的目标交易子字段,在所述第一交易业务的目标关键字段中对所述第一交易业务的交易父字段中的依赖数量进行递增处理,得到递增后的交易父字段;
将所述目标前序交易业务的目标交易子字段和所述递增后的交易父字段,作为与所述第一交易业务相关联的冲突检测结果。
5.根据权利要求4所述的方法,其特征在于,所述方法还包括:
若所述字符串比较结果指示所述第一交易业务对应的读数据集与所述前序交易业务对应的写数据集之间均不存在重叠字符串,则将所述前序交易业务确定为不满足所述冲突检测条件的交易业务,基于不满足所述冲突检测条件的交易业务,在所述第一交易业务的目标关键字段中将所述第一交易业务的交易父字段中的依赖数量设置为目标阈值,基于所述目标阈值,将所述第一交易业务添加至所述首个交易业务所属的并行交易数据集,且从所述N个交易业务中获取用于更新所述第一交易业务的第二交易业务;所述第二交易业务的交易执行顺序晚于所述第一交易业务的交易执行顺序;所述并行交易数据集中的每个交易业务的依赖数量均为所述目标阈值,且所述并行交易数据集中的每个交易业务之间存在并行依赖关系,所述并行依赖关系用于更新所述业务依赖关系。
6.根据权利要求1所述的方法,其特征在于,所述方法还包括:
基于所述第一交易业务对应的读数据集中的合约调用地址以及合约名称,获取用于执行所述第一交易业务的智能合约,调用所述智能合约执行所述第一交易业务,得到所述第一交易业务对应的交易业务执行结果,将所述交易业务执行结果添加至所述第一交易业务的交易写缓存,基于所述交易写缓存中所存储的数据构建得到所述第一交易业务对应的写数据集。
7.一种交易数据处理方法,其特征在于,所述方法由第二节点执行,包括:
接收第一节点发送的携带有向无环图的提议区块;所述有向无环图是基于所述提议区块中的N个交易业务之间的业务依赖关系所构建的;所述业务依赖关系是从所述N个交易业务中获取第一交易业务之后,由所述N个交易业务中的首个交易业务以及与所述第一交易业务相关联的前向依赖业务所确定的;所述前向依赖业务是基于所述第一交易业务在所述N个交易业务中的交易执行顺序、所述第一交易业务对应的读数据集以及冲突检测条件,对所述第一交易业务进行冲突检测所得到的;所述第一节点属于所述第二节点所属的区块链网络中的打包节点;所述第一交易业务为所述N个交易业务中除所述首个交易业务之外的交易业务;所述N为正整数;
基于所述有向无环图所指示的所述业务依赖关系,从所述N个交易业务中挑选满足交易执行条件的交易业务,将挑选出的交易业务作为第一连接业务,获取与所述第一连接业务相关联的子交易列表;所述子交易列表中包含M个第二连接业务;所述M为小于所述N的非负整数;所述第一连接业务中包含所述首个交易业务;
基于所述第一连接业务和所述M个第二连接业务,构建与所述提议区块中的N个交易业务相关联的辅助无环图,基于所述辅助无环图对所述有向无环图进行合法验证。
8.根据权利要求7所述的方法,其特征在于,所述基于所述第一连接业务和所述M个第二连接业务,构建与所述提议区块中的N个交易业务相关联的辅助无环图,基于所述辅助无环图对所述有向无环图进行合法验证,包括:
通过交易协调器分别将所述第一连接业务和所述M个第二连接业务传递至与所述交易协调器相关联的交易执行协程池,在所述交易执行协程池中存在处于闲置状态的协程时,将处于闲置状态的协程作为第一协程,在所述第一协程的业务状态为工作状态时,通过所述第一协程执行所述第一连接业务,得到所述第一连接业务对应的第一交易执行结果;
基于所述第一交易执行结果,将所述M个第二连接业务中每个第二连接业务的交易父字段的依赖数量进行递减处理,将递减处理后的每个第二连接业务分别作为待处理业务;
从每个待处理业务中查找交易父字段的依赖数量达到所述交易执行条件中的目标阈值的待处理业务,将查找到的待处理业务作为与所述第一连接业务相关联的后向依赖业务;
在所述交易执行协程池中将处于闲置状态的协程作为第二协程,在所述第二协程的业务状态为工作状态时,通过所述第二协程执行所述后向依赖业务,得到所述后向依赖业务对应的第二交易执行结果,直到执行完所述每个待处理业务时,得到所述每个待处理业务对应的第二交易执行结果;
基于所述第一交易执行结果、所述每个待处理业务对应的第二交易执行结果,构建与所述提议区块中的所述N个交易业务相关联的辅助无环图,基于所述辅助无环图对所述有向无环图进行合法验证。
9.根据权利要求8所述的方法,其特征在于,所述方法还包括:
基于所述第一交易执行结果,在所述交易执行协程池的工作队列中释放所述第一协程;
将所述第一协程的业务状态由所述工作状态切换为所述闲置状态,将处于闲置状态的第一协程添加至所述交易执行协程池所对应的闲置队列。
10.根据权利要求8所述的方法,其特征在于,所述基于所述第一交易执行结果、所述每个待处理业务对应的第二交易执行结果,构建与所述提议区块中的所述N个交易业务相关联的辅助无环图,基于所述辅助无环图对所述有向无环图进行合法验证,包括:
在合并所述第一交易执行结果和所述每个待处理业务对应的第二交易执行结果时,将所述第一交易执行结果写入所述第一连接业务的第一交易写缓存,将写入所述第一交易写缓存中的数据作为所述第一连接业务的第一写数据集;
在所述每个待处理业务对应的第二交易执行结果中遍历获取第i个交易执行结果,将所述第i个交易执行结果写入第i个待处理业务的第二交易写缓存,将写入所述第i个待处理业务的第二交易写缓存中的数据作为所述第i个待处理业务的第二写数据集,且在所述第i个待处理业务的交易读缓存中获取所述第i个待处理业务对应的第二读数据集,直到执行完所述每个待处理业务时,得到所述每个待处理业务的第二读数据集;所述i为小于或者等于所述M的非负整数;
基于所述第一连接业务的第一写数据集和所述每个待处理业务的第二读数据集,构建与所述N个交易业务相关联的辅助无环图;
将所述辅助无环图和所述有向无环图进行相似比较,得到相似比较结果,基于所述相似比较结果确定所述有向无环图的合法性。
11.根据权利要求8所述的方法,其特征在于,所述方法还包括:
在确定所述有向无环图不具备合法性时,调用用于维护共识节点列表的共识委员会合约,通过所述共识委员会合约获取所述共识节点列表,在所述共识节点列表中删除所述第一节点的节点标识。
12.一种交易数据处理装置,其特征在于,所述装置由第一节点执行,包括:
第一获取模块,用于从待打包的N个交易业务中获取第一交易业务,获取所述第一交易业务对应的读数据集;所述第一交易业务为所述N个交易业务中除首个交易业务之外的交易业务;所述N为正整数;
冲突检测模块,用于确定所述第一交易业务在所述N个交易业务中的交易执行顺序,基于所述交易执行顺序、所述第一交易业务对应的读数据集以及冲突检测条件对所述第一交易业务进行冲突检测,得到冲突检测结果;
依赖记录模块,用于若所述冲突检测结果指示所述N个交易业务中存在满足所述冲突检测条件的交易业务,则将满足所述冲突检测条件的交易业务作为与所述第一交易业务相关联的前向依赖业务,记录所述第一交易业务与所述前向依赖业务之间的业务依赖关系;其中,所述业务依赖关系包含串行依赖关系和并行依赖关系;所述并行依赖关系是由所述首个交易业务所属的并行交易数据集中的交易业务所确定的;所述串行依赖关系是由与所述第一交易业务相关联的前向依赖业务所确定的;
区块发送模块,用于基于记录到的所述业务依赖关系中的所述并行依赖关系,从所述N个交易业务中挑选携带目标阈值的交易父字段所对应的交易业务,将挑选出的交易业务作为第一连接业务;所述第一连接业务中包含所述首个交易业务;
所述区块发送模块,还用于基于记录到的所述业务依赖关系中的所述串行依赖关系,从所述第一连接业务的目标交易子字段中,获取与所述第一连接业务相关联的子交易列表;所述子交易列表中包含M个第二连接业务;所述M为小于所述N的非负整数;
所述区块发送模块,还用于基于所述第一连接业务和所述M个第二连接业务,构建得到与所述N个交易业务相关联的有向无环图,将所述有向无环图和所述N个交易业务进行打包,得到携带所述有向无环图的提议区块,将所述提议区块发送给第二节点,以使所述第二节点基于所述提议区块中的所述有向无环图所指示的所述业务依赖关系串行或者并行执行所述N个交易业务;所述第二节点属于所述第一节点所属的区块链网络中的共识节点。
13.一种交易数据处理装置,其特征在于,所述装置由第二节点执行,包括:
区块接收模块,用于接收第一节点发送的携带有向无环图的提议区块;所述有向无环图是基于所述提议区块中的N个交易业务之间的业务依赖关系所构建的;所述业务依赖关系是从所述N个交易业务中获取第一交易业务之后,由所述N个交易业务中的首个交易业务以及与所述第一交易业务相关联的前向依赖业务所确定的;所述前向依赖业务是基于所述第一交易业务在所述N个交易业务中的交易执行顺序、所述第一交易业务对应的读数据集以及冲突检测条件,对所述第一交易业务进行冲突检测所得到的;所述第一节点属于所述第二节点所属的区块链网络中的打包节点;所述第一交易业务为所述N个交易业务中除所述首个交易业务之外的交易业务;所述N为正整数;
交易挑选模块,用于基于所述有向无环图所指示的所述业务依赖关系,从所述N个交易业务中挑选满足交易执行条件的交易业务,将挑选出的交易业务作为第一连接业务,获取与所述第一连接业务相关联的子交易列表;所述子交易列表中包含M个第二连接业务;所述M为小于所述N的非负整数;所述第一连接业务中包含所述首个交易业务;
合法验证模块,用于基于所述第一连接业务和所述M个第二连接业务,构建与所述提议区块中的N个交易业务相关联的辅助无环图,基于所述辅助无环图对所述有向无环图进行合法验证。
14.一种计算机设备,其特征在于,包括:处理器和存储器;
所述处理器与存储器相连,其中,所述存储器用于存储计算机程序,所述处理器用于调用所述计算机程序,以使得所述计算机设备执行权利要求1-11任一项所述的方法。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110442672.8A CN113034142B (zh) | 2021-01-29 | 2021-01-29 | 一种交易数据处理方法、装置以及计算机设备 |
CN202110122558.7A CN112508573B (zh) | 2021-01-29 | 2021-01-29 | 一种交易数据处理方法、装置以及计算机设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110122558.7A CN112508573B (zh) | 2021-01-29 | 2021-01-29 | 一种交易数据处理方法、装置以及计算机设备 |
Related Child Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110442672.8A Division CN113034142B (zh) | 2021-01-29 | 2021-01-29 | 一种交易数据处理方法、装置以及计算机设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112508573A CN112508573A (zh) | 2021-03-16 |
CN112508573B true CN112508573B (zh) | 2021-04-30 |
Family
ID=74952518
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110442672.8A Active CN113034142B (zh) | 2021-01-29 | 2021-01-29 | 一种交易数据处理方法、装置以及计算机设备 |
CN202110122558.7A Active CN112508573B (zh) | 2021-01-29 | 2021-01-29 | 一种交易数据处理方法、装置以及计算机设备 |
Family Applications Before (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110442672.8A Active CN113034142B (zh) | 2021-01-29 | 2021-01-29 | 一种交易数据处理方法、装置以及计算机设备 |
Country Status (1)
Country | Link |
---|---|
CN (2) | CN113034142B (zh) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113923217B (zh) * | 2021-09-30 | 2024-04-16 | 中国人民解放军国防科技大学 | 一种基于dag的异步拜占庭共识方法及系统 |
CN114529417A (zh) * | 2022-02-25 | 2022-05-24 | 蚂蚁区块链科技(上海)有限公司 | 执行交易的方法、区块链、主节点和从节点 |
CN114328133A (zh) * | 2022-03-16 | 2022-04-12 | 北京微芯感知科技有限公司 | 单机构分布式冲突检测方法、系统和存算分离架构 |
CN115220924A (zh) * | 2022-07-29 | 2022-10-21 | 蚂蚁区块链科技(上海)有限公司 | 区块链系统中的交易冲突检测方法及区块链节点 |
CN115373824B (zh) * | 2022-10-24 | 2023-02-03 | 恒生电子股份有限公司 | 冲突检测方法、装置、计算设备和计算机可读存储介质 |
CN116109112B (zh) * | 2023-04-12 | 2023-06-27 | 徐工汉云技术股份有限公司 | 基于聚合接口的业务数据处理方法、装置、介质和设备 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107679857A (zh) * | 2017-10-10 | 2018-02-09 | 马晶瑶 | 区块链的跨链交易方法和存储介质 |
CN108958925A (zh) * | 2018-04-26 | 2018-12-07 | 武汉龙津科技有限公司 | 一种节能的工作量证明方法与系统 |
KR101946196B1 (ko) * | 2018-03-26 | 2019-02-08 | 그래프 블록체인 리미티드 | 프라이빗 블록체인 기반 시스템을 관제하는 관제시스템 및 관제방법 |
CN109508337A (zh) * | 2018-11-12 | 2019-03-22 | 杭州秘猿科技有限公司 | 一种交易并行执行方法、装置、电子设备及系统 |
CN111340482A (zh) * | 2020-02-10 | 2020-06-26 | 腾讯科技(深圳)有限公司 | 冲突检测方法、装置、节点设备及存储介质 |
CN111724258A (zh) * | 2020-05-28 | 2020-09-29 | 天津大学 | 基于环形拓扑、依赖图及多版本控制的联盟链交易并发方案的实现方法 |
Family Cites Families (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20150172412A1 (en) * | 2012-07-06 | 2015-06-18 | Cornell University | Managing dependencies between operations in a distributed system |
US10255108B2 (en) * | 2016-01-26 | 2019-04-09 | International Business Machines Corporation | Parallel execution of blockchain transactions |
CN106897351B (zh) * | 2016-12-29 | 2020-11-10 | 北京瑞卓喜投科技发展有限公司 | 有向无环图型区块链的生成方法及系统 |
CN108537543B (zh) * | 2018-03-30 | 2023-07-28 | 百度在线网络技术(北京)有限公司 | 区块链数据的并行处理方法、装置、设备和存储介质 |
CN108846659B (zh) * | 2018-06-13 | 2021-09-14 | 深圳前海微众银行股份有限公司 | 基于区块链的转账方法、装置及存储介质 |
CN110728578A (zh) * | 2019-09-29 | 2020-01-24 | 南京金宁汇科技有限公司 | 区块链交易的并行执行方法、系统及存储介质 |
CN110806923B (zh) * | 2019-10-29 | 2023-02-24 | 百度在线网络技术(北京)有限公司 | 一种区块链任务的并行处理方法、装置、电子设备和介质 |
CN111506783B (zh) * | 2020-04-08 | 2023-12-22 | 百度在线网络技术(北京)有限公司 | 区块链中事务请求处理方法、装置、设备和介质 |
CN111556115B (zh) * | 2020-04-22 | 2023-04-21 | 财付通支付科技有限公司 | 一种基于区块链的数据处理方法、装置、设备及存储介质 |
CN112150163A (zh) * | 2020-11-26 | 2020-12-29 | 北京微芯区块链与边缘计算研究院 | 区块链的合约交易并行执行方法及装置 |
-
2021
- 2021-01-29 CN CN202110442672.8A patent/CN113034142B/zh active Active
- 2021-01-29 CN CN202110122558.7A patent/CN112508573B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107679857A (zh) * | 2017-10-10 | 2018-02-09 | 马晶瑶 | 区块链的跨链交易方法和存储介质 |
KR101946196B1 (ko) * | 2018-03-26 | 2019-02-08 | 그래프 블록체인 리미티드 | 프라이빗 블록체인 기반 시스템을 관제하는 관제시스템 및 관제방법 |
CN108958925A (zh) * | 2018-04-26 | 2018-12-07 | 武汉龙津科技有限公司 | 一种节能的工作量证明方法与系统 |
CN109508337A (zh) * | 2018-11-12 | 2019-03-22 | 杭州秘猿科技有限公司 | 一种交易并行执行方法、装置、电子设备及系统 |
CN111340482A (zh) * | 2020-02-10 | 2020-06-26 | 腾讯科技(深圳)有限公司 | 冲突检测方法、装置、节点设备及存储介质 |
CN111724258A (zh) * | 2020-05-28 | 2020-09-29 | 天津大学 | 基于环形拓扑、依赖图及多版本控制的联盟链交易并发方案的实现方法 |
Also Published As
Publication number | Publication date |
---|---|
CN113034142B (zh) | 2022-08-02 |
CN112508573A (zh) | 2021-03-16 |
CN113034142A (zh) | 2021-06-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112508573B (zh) | 一种交易数据处理方法、装置以及计算机设备 | |
US20170083579A1 (en) | Distributed data processing method and system | |
CN113570466B (zh) | 一种交易数据处理方法、装置以及可读存储介质 | |
EP4206944A1 (en) | Blockchain-based method and apparatus for data processing, device, and readable storage medium | |
US10938565B2 (en) | Method and apparatus for inter-blockchain transmission of authenticable message | |
JP2019523952A (ja) | ストリーミングデータ分散処理方法及び装置 | |
CN111597567B (zh) | 数据处理方法、装置、节点设备及存储介质 | |
CN110555079B (zh) | 数据处理方法、装置、设备以及存储介质 | |
US20230370285A1 (en) | Block-chain-based data processing method, computer device, computer-readable storage medium | |
CN111885050A (zh) | 基于区块链网络的数据存储方法、装置、相关设备及介质 | |
CN112037061A (zh) | 区块链中交易的处理方法、装置、电子设备及存储介质 | |
WO2023071373A1 (zh) | 一种区块链共识方法、装置、设备及存储介质 | |
CN114647698A (zh) | 数据同步方法、装置及计算机存储介质 | |
Tennakoon et al. | Collachain: A bft collaborative middleware for decentralized applications | |
CN116703601B (zh) | 基于区块链网络的数据处理方法、装置、设备及存储介质 | |
CN116933886B (zh) | 一种量子计算执行方法、系统、电子设备及存储介质 | |
CN116055052A (zh) | 基于区块链的数据处理方法、装置、设备及可读存储介质 | |
CN116701452A (zh) | 数据处理方法、相关设备、存储介质及程序产品 | |
CN115174589B (zh) | 区块链虚拟机的选择方法、装置、电子设备及存储介质 | |
WO2024007856A1 (zh) | 数据处理方法、装置及设备、介质、产品 | |
CN110889040B (zh) | 用于推送信息的方法和装置 | |
CN115705344A (zh) | 事件处理方法、电子设备及存储介质 | |
CN117692401A (zh) | 消息发送方法、装置、服务器及存储介质 | |
CN116804938A (zh) | 一种传输探测方法、装置及存储介质和终端设备 | |
CN116016374A (zh) | 基于区块链的数据处理方法、装置、设备及可读存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
REG | Reference to a national code |
Ref country code: HK Ref legal event code: DE Ref document number: 40040997 Country of ref document: HK |