一种基于区块链的数据处理方法、设备及可读存储介质与流程

未命名 08-05 阅读:75 评论:0


1.本技术涉及计算机技术领域,尤其涉及一种基于区块链的数据处理方法、设备及可读存储介质。


背景技术:

2.交易在执行的过程中,交易对应的txnonce(transaction number once,交易非重复数)和发送该交易的区块链账户对应的accountnonce(account number once,账户非重复数)必须相等,否则该交易为无效交易。而区块中只要出现至少一个交易为无效交易,就会造成该区块无法达成共识,无法上链。其中,txnonce用于标识发送该交易的区块链账户希望该交易在区块链账户发送的交易中的交易执行顺序,从0开始递增;accountnonce用于标识当前世界状态下该区块链账户已经执行的交易数量,从0开始递增。
3.目前在区块链网络中,区块链节点接收到交易后,会把交易放入交易池中进行缓存,然后将交易池中的部分交易打包生成区块。但是由于网络波动或者用户误操作等原因,同一区块链账户下的不同txnonce的交易,可能并不是完全按照从小到大的顺序到达区块链节点,造成交易被错误地认为不合法而无法被交易池接收,区块链系统的容错率低,即使交易能被交易池接收,也可能出现产生区块时所包含的交易的txnonce与当前世界状态下发送该交易的账户的accountnonce不匹配的问题,导致区块无法达成共识,无法上链。


技术实现要素:

4.本技术实施例提供了一种基于区块链的数据处理方法、设备及可读存储介质,可以增强区块链系统的容错性,提高区块上链的成功率。
5.本技术实施例一方面提供了一种基于区块链的数据处理方法,包括:
6.获取目标账户发送的目标交易,获取与目标账户对应的目标账户准备队列和目标账户等待队列;目标交易包含有目标执行顺序标识;目标账户准备队列用于存储处于已准备状态的准备交易、以及与准备交易具有映射关系的执行顺序标识;目标账户等待队列用于存储处于未准备状态的等待交易、以及与等待交易具有映射关系的执行顺序标识;
7.若目标交易处于已准备状态,则将目标交易和目标执行顺序标识添加至目标账户准备队列,得到过渡账户准备队列;
8.在目标账户等待队列中,将与目标执行顺序标识能构成顺序标识连续序列的执行顺序标识,作为升级执行顺序标识,将升级执行顺序标识和升级执行顺序标识对应的等待交易按序添加至过渡账户准备队列,得到升级账户准备队列;
9.将升级账户准备队列中的目标交易和升级执行顺序标识对应的等待交易添加至总准备队列中;总准备队列中的交易会按照交易插入时间顺序被打包进候选区块。
10.本技术实施例一方面提供了一种基于区块链的数据处理装置,包括:
11.获取模块,用于获取目标账户发送的目标交易,获取与目标账户对应的目标账户准备队列和目标账户等待队列;目标交易包含有目标执行顺序标识;目标账户准备队列用
于存储处于已准备状态的准备交易、以及与准备交易具有映射关系的执行顺序标识;目标账户等待队列用于存储处于未准备状态的等待交易、以及与等待交易具有映射关系的执行顺序标识;
12.交易过渡模块,用于若目标交易处于已准备状态,则将目标交易和目标执行顺序标识添加至目标账户准备队列,得到过渡账户准备队列;
13.交易升级模块,用于在目标账户等待队列中,将与目标执行顺序标识能构成顺序标识连续序列的执行顺序标识,作为升级执行顺序标识,将升级执行顺序标识和升级执行顺序标识对应的等待交易按序迁移至过渡账户准备队列,得到升级账户准备队列;
14.交易添加模块,用于将升级账户准备队列中的目标交易和升级执行顺序标识对应的等待交易添加至总准备队列中;总准备队列中的交易会按照交易插入时间顺序被打包进候选区块。
15.其中,上述数据处理装置,还包括:
16.第一状态确定模块,用于若目标账户准备队列为空队列,则对目标执行顺序标识和目标账户的当前已执行交易标识进行比对;
17.第一状态确定模块,还用于若目标执行顺序标识和目标账户的当前已执行交易标识相同,则确定目标交易处于已准备状态;
18.第一状态确定模块,还用于若目标执行顺序标识和目标账户的当前已执行交易标识不相同,则确定目标交易处于未准备状态,将目标交易和目标执行顺序标识添加至目标账户等待队列。
19.其中,上述数据处理装置,还包括:
20.第二状态确定模块,用于若目标账户准备队列为非空队列,则确定目标执行顺序标识与目标账户准备队列中最大的执行顺序标识之间的标识关系;
21.第二状态确定模块,还用于若标识关系满足顺序连续关系,则确定目标交易处于已准备状态;
22.第二状态确定模块,还用于若标识关系不满足顺序连续关系,则确定目标交易处于未准备状态,将目标交易和目标执行顺序标识添加至目标账户等待队列。
23.其中,上述数据处理装置,还包括:
24.遍历模块,用于根据目标执行顺序标识遍历目标账户准备队列和目标账户等待队列,得到针对目标交易的遍历结果;
25.冲突确定模块,还用于若遍历结果指示待处理队列中存在具有目标执行顺序标识的交易,则将待处理队列中的具有目标执行顺序标识的交易,确定为冲突交易;待处理队列为目标账户准备队列或目标账户等待队列;
26.第一覆盖模块,用于若目标交易与冲突交易之间满足冲突覆盖条件,则基于目标交易对冲突交易进行覆盖处理;
27.第二覆盖模块,用于若目标交易与冲突交易之间不满足冲突覆盖条件,则调用交易过渡模块来执行若目标交易处于已准备状态,则将目标交易和目标执行顺序标识添加至目标账户准备队列,得到过渡账户准备队列的步骤。
28.其中,上述数据处理装置,还包括:
29.覆盖确定模块,用于获取目标交易的交易执行开销,获取冲突交易的交易执行开
销;
30.覆盖确定模块,还用于若目标交易的交易执行开销大于冲突交易的交易执行开销,则确定目标交易与冲突交易之间满足冲突覆盖条件;
31.覆盖确定模块,还用于若目标交易的交易执行开销小于或等于冲突交易的交易执行开销,则确定目标交易与冲突交易之间不满足冲突覆盖条件,向目标用户发送交易覆盖失败报错信息。
32.其中,第一覆盖模块,包括:
33.第一替换单元,用于若待处理队列为目标账户准备队列,则在目标账户准备队列中,将冲突交易替换为目标交易,在总准备队列中,将冲突交易替换为目标交易;
34.第二替换单元,用于若待处理队列为目标账户等待队列,则在目标账户等待队列中,将冲突交易替换为目标交易。
35.其中,上述数据处理装置,还包括:
36.第一交易处理模块,用于获取账户交易数量上限阈值;
37.第一交易处理模块,还用于若目标账户准备队列中的准备交易的数量和目标账户等待队列中的等待交易的数量的总和等于账户交易数量上限阈值,则向目标账户发送交易上限报错信息;
38.第一交易处理模块,还用于若准备交易的数量和等待交易的数量的总和小于账户交易数量上限,则调用交易过渡模块来执行若目标交易处于已准备状态,则将目标交易和目标执行顺序标识添加至目标账户准备队列,得到过渡账户准备队列的步骤。
39.其中,上述数据处理装置,还包括:
40.第二交易处理模块,用于获取目标账户的当前已执行交易数量;
41.第二交易处理模块,还用于若目标期望执行顺序标识小于当前已执行交易数量,则向目标账户发送交易过时报错信息;
42.第二交易处理模块,还用于若目标执行顺序标识大于或等于当前已执行交易数量,则调用交易过渡模块来执行若目标交易处于已准备状态,则将目标交易和目标执行顺序标识添加至目标账户准备队列,得到过渡账户准备队列的步骤。
43.其中,上述数据处理装置,还包括:
44.第三交易处理模块,用于获取目标交易的交易执行开销,查询目标账户的账户资源;
45.第三交易处理模块,还用于若账户资源小于交易执行开销,则向目标账户发送资源不足报错信息;
46.第三交易处理模块,还用于若账户余额大于或等于交易执行开销,则调用交易过渡模块来执行若目标交易处于已准备状态,则将目标交易和目标执行顺序标识添加至目标账户准备队列,得到过渡账户准备队列的步骤。
47.其中,上述数据处理装置,还包括:
48.交易打包模块,用于将总准备队列中的交易按照交易插入时间顺序打包进候选区块中;区块中的交易数量小于或等于区块交易数量阈值;
49.队列更新模块,用于对候选区块进行共识处理,得到新区块,遍历新区块,得到目标账户的最大执行顺序标识;
50.队列更新模块,还用于在目标账户准备队列中,获取与第一待删除执行顺序标识具有映射关系的准备交易,作为待删除准备交易;第一待删除执行顺序标识为目标账户准备队列中,小于或等于最大执行顺序标识的执行顺序标识;
51.队列更新模块,还用于在目标账户准备队列中,删除待删除准备交易和第一待删除执行顺序标识,得到更新账户准备队列;
52.队列更新模块,还用于在总准备队列中删除待删除准备交易,得到更新总准备队列;
53.队列更新模块,还用于在目标账户等待队列中,获取与第二待删除执行顺序标识具有映射关系的等待交易,作为待删除等待交易;第二待删除执行顺序标识为目标账户等待队列中,小于或等于最大执行顺序标识的执行顺序标识;
54.队列更新模块,还用于在目标账户等待队列中删除待删除等待交易和第二待删除执行顺序标识,得到更新账户等待队列。
55.其中,上述数据处理装置,还包括:
56.队列优化模块,用于获取更新账户等待队列中的最小执行顺序标识;
57.队列优化模块,还用于根据最大执行顺序标识生成优化执行顺序标识;
58.队列优化模块,还用于若最小执行顺序标识等于优化执行顺序标识,则在目标账户等待队列中,将与最小执行顺序标识能构成顺序标识连续序列的执行顺序标识,作为优化升级执行顺序标识,将最小执行顺序标识、最小执行顺序标识对应的等待交易、优化升级执行顺序标识和优化升级执行顺序标识对应的等待交易按序迁移至更新账户准备队列,得到优化升级账户准备队列;
59.队列优化模块,还用于将最小执行顺序标识、最小执行顺序标识对应的等待交易、优化升级执行顺序标识和优化升级执行顺序标识对应的等待交易按序添加至更新总准备队列中,得到优化升级总准备队列。
60.其中,上述数据处理装置,还包括:
61.队列删除模块,用于获取更新账户准备队列中的最小执行顺序标识对应的准备交易,作为待判定准备交易;
62.队列删除模块,还用于获取待判定准备交易的交易执行开销;查询目标账户的账户资源;
63.队列删除模块,还用于若待判定准备交易的交易执行开销大于账户资源,则从更新账户准备队列中删除待判定准备交易以及最小执行顺序标识,从更新总准备队列中删除待判定准备交易;
64.队列删除模块,还用于在删除后的更新账户准备队列中,将大于最小执行顺序标识的执行顺序标识,作为降级执行顺序标识,将降级执行顺序标识和降级执行顺序标识对应的准备交易迁移至更新账户等待队列,得到降级账户等待队列;
65.队列删除模块,还用于将降级执行顺序标识和降级执行顺序标识对应的准备交易从删除后的更新账户准备队列中删除;
66.队列删除模块,还用于将降级执行顺序标识和降级执行顺序标识对应的准备交易从删除后的更新总准备队列中删除。
67.本技术实施例一方面提供了一种计算机设备,包括:处理器、存储器、网络接口;
68.上述处理器与上述存储器、上述网络接口相连,其中,上述网络接口用于提供数据通信网元,上述存储器用于存储计算机程序,上述处理器用于调用上述计算机程序,以执行本技术实施例中的方法。
69.本技术实施例一方面提供了一种计算机可读存储介质,上述计算机可读存储介质中存储有计算机程序,上述计算机程序适于由处理器加载并执行本技术实施例中的方法。
70.本技术实施例一方面提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中,计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行本技术实施例中的方法。
71.本技术实施例中,目标账户处于已准备状态的准备交易和与准备交易具有映射关系的执行顺序标识将存储在目标账户准备队列中,目标账户处于未准备状态的等待交易和与等待交易具有映射关系的执行顺序标识将存储在目标账户等待队列中,然后当获取到目标账户发送的包含有目标执行顺序标识的目标交易时,若目标交易处于已准备状态,则将目标交易和目标执行顺序标识添加至目标账户准备队列中,得到过渡账户准备队列,随后在目标账户等待队列中,将与目标执行顺序标识能构成顺序标识连续序列的执行顺序标识,作为升级执行顺序标识,将升级执行顺序标识和升级执行顺序标识对应的等待交易按序添加至过渡账户准备队列,得到升级账户准备队列,同时,将升级账户准备队列中的目标交易和升级执行顺序标识对应的等待交易均添加至总准备队列中。其中,总准备队列中的交易会按照交易插入时间顺序被打包进候选区块。通过本技术实施例提供的方法,将目标账户处于已准备状态的准备交易均存储在目标账户准备队列中,且目标账户的准备交易才可以添加进总准备队列中,可以保证基于总准备队列中的交易打包生成的候选区块中不会出现处于未准备状态的等待交易,可以提高区块上链的成功率。另外,目标账户发送的处于未准备状态的交易不会被拒绝接收,会先暂时存储在目标账户等待队列中,每当目标账户有新的处于已准备状态的交易添加进目标账户准备队列时,对目标账户等待队列进行升级,符合条件的等待交易会被添加进目标账户准备队列中,进一步被添加进总准备队列中等待打包,可以增强区块链系统的容错性。
附图说明
72.为了更清楚地说明本技术实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
73.图1是本技术实施例提供的一种区块链节点系统的结构示意图;
74.图2是本技术实施例提供的一种基于区块链的数据处理的场景示意图;
75.图3是本技术实施例提供的一种基于区块链的数据处理方法的流程示意图;
76.图4是本技术实施例提供的一种用于交易池管理的队列构建示意图;
77.图5是本技术实施例提供的一种基于区块链的数据处理方法的流程示意图;
78.图6是本技术实施例提供的一种基于区块链的数据处理方法的流程示意图;
79.图7是本技术实施例提供的一种交易接收方法的流程示意图;
80.图8是本技术实施例提供的一种刷新交易池的流程示意图;
81.图9是本技术实施例提供的一种数据处理装置的结构示意图;
82.图10是本技术实施例提供的一种计算机设备的结构示意。
具体实施方式
83.下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本技术一部分实施例,而不是全部的实施例。基于本技术中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本技术保护的范围。
84.区块链是运行区块链技术的载体和组织方式。区块链技术(blockchain technology,bt)也被称之为分布式账本技术,是一种互联网数据库技术,其特点是去中心化、公开透明,让每个人均可参与数据库记录。区块链技术是利用块链式数据结构来验证与存储数据、利用分布式节点共识算法来生成和更新数据、利用密码学的方式保证数据传输和访问的安全、利用由自动化脚本代码组成的智能合约来编程和操作数据的一种分布式基础架构与计算方式。
85.为便于理解,以下将对区块链及其相关概念进行阐述:
86.区块链:区块链是一种分布式数据存储、点对点传输、共识机制以及加密算法等计算机技术的新型应用模式,主要用于对数据按时间顺序进行整理,并加密成账本,使其不可被篡改和伪造,同时可进行数据的验证、存储和更新。区块链本质上是一个去中心化的数据库,该数据库中的每个节点均存储一条相同的区块链,区块链网络可以将节点区分为共识节点和业务节点,其中共识节点负责区块链全网的共识。对于区块链网络中交易数据被写入账本的过程可以为:客户端发送交易数据至业务节点,随后该交易数据以接力棒的方式在区块链网络中的业务节点之间传递,直到共识节点收到该交易数据,共识节点再将该交易数据打包进区块,与其他共识节点之间进行共识,在共识通过后,将携带该交易数据的区块写入账本。
87.区块:是在区块链网络上承载交易数据(即交易业务)的数据包,是一种被标记上时间戳和之前一个区块的哈希值的数据结构,区块经过网络的共识机制验证并确定区块中的交易。
88.哈希值:也称作信息特征值或特征值,哈希值是通过哈希算法将任意长度的输入数据转换为密码并进行固定输出而生成的,不能通过解密哈希值来检索原始输入数据,它是一个单向的加密函数。在区块链中,每个区块(除了初始区块)都包含前继区块的哈希值,前继区块被称为当前区块的父区块。哈希值是区块链技术中的潜力核心基础和最重要的方面,它保留了记录和查看数据的真实性,以及区块链作为一个整体的完整性。
89.区块链账户:内有账户地址作为其唯一的标识,区块链账户中包含有余额作为当前世界状态下该区块链账户的数字资源,区块链账户对应有accountnonce,用于记录当前世界状态下已经执行了多少个由该区块链账户发送的交易,accountnonce初始值为0,每有一个该区块链账户下的交易执行后,accountnonce递增1。需要说明的是,本技术后续实施例中所提到的账户,均指区块链账户,后续不再进行赘述。
90.交易:区块链账户发送的交易,内有交易哈希作为唯一标识,包含有账户地址标识
所属发送该交易的区块链账户,并有txnonce标识其所属区块链账户希望该交易在当前世界状态下的交易执行顺序,例如区块链账户希望第一个执行的交易的txnonce为0,希望第二个执行的交易的txnonce为1,如此类推。因此交易的txnonce与当前世界状态下执行该交易前的所属区块链账户的accountnonce必须相等,否则该交易为无效交易。区块中只要出现至少一个交易为无效交易,即会造成该区块无法达成共识,无法上链。交易内还有txfee(交易手续费)字段作为区块链账户需要支付的让区块链系统执行该交易的开销。对于不同的区块链类型,txfee字段可能由某些字段通过既定规则计算得到,例如,value(转账额度)+gas(消耗)*gasprice(消耗单价)。
91.上链:每个区块包含若干个交易,当一个区块经过共识插入到每个区块链节点内的区块链数据结构的过程,称为上链。
92.世界状态:区块链内各个账户所拥有的持久化数据共同组成的视图,由于交易的执行本身会修改若干个账户的部分持久化数据,因此每个区块内的每个交易执行后会有一个新的世界状态,每个区块上链后更是会更新每个区块链节点的世界状态。在同一区块上链后,每个区块链节点的世界状态必然一致。
93.请参见图1,图1是本技术实施例提供的一种区块链节点系统的结构示意图。如图1所示的区块链节点系统可以对应于区块链网络,该区块链网络可以包括但不限于联盟链所对应的区块链网络。区块链节点系统是指用于进行区块链节点与区块链节点之间数据共享的系统,该区块链节点系统中可以包括多个区块链节点,多个区块链节点具体可以包括区块链节点10a、区块链节点10b、区块链节点10c、区块链节点10d、

、区块链节点10n。其中,每个区块链节点在进行正常工作时可以接收到外界发送的数据,并基于接收到的数据进行区块上链处理,也可以向外界发送数据。为了保证各个区块链节点之间的数据互通,每个区块链节点之间可以存在数据连接,例如区块链节点10a和区块链节点10b之间存在数据连接,区块链节点10a和区块链节点10c之间存在数据连接,区块链节点10b和区块链节点10c之间存在数据连接。
94.可以理解的是,区块链节点之间可以通过上述数据连接进行数据或者区块传输。区块链网络可以基于节点标识实现区块链节点之间的数据连接,对于区块链网络中的每个区块链节点,均具有与其对应的节点标识,而且上述每个区块链节点均可以存储与自身有相连关系的其他区块链节点的节点标识,以便后续根据其他区块链节点的节点标识,将获取到的数据或生成的区块广播至其他区块链节点,例如区块链节点10a中可以维护一个如表1所示的节点标识列表,该节点标识列表保存着其他节点的节点名称和节点标识:
95.表1
96.节点名称节点标识节点10a117.114.151.174节点10b117.116.189.145节点10c117.114.151.183节点10d117.117.125.169
……
节点10n117.116.189.125
97.其中,节点标识可为网络之间互联的协议(internet protocol,ip)地址以及其他
任意一种能够用于标识区块链网络中节点的信息,表1中仅以ip地址为例进行说明。例如,区块链节点10a可以通过节点标识117.116.189.145向区块链节点10b发送信息(例如,区块),且区块链节点10b可以通过节点标识117.114.151.174确定该信息是由区块链节点10a所发送的。
98.在区块链中,在将一个区块进行上链之前,该区块必须经过区块链网络中的共识节点进行共识,在共识通过后才能将该区块添加到区块链上。可以理解的是,当区块链被用于政府或者商业机构的一些场景中时,并非区块链中的所有参与节点(即上述区块链节点系统中的区块链节点)都有足够的资源和必要性成为区块链的共识节点。例如,在图1所示的区块链节点系统中,可以将区块链节点10a、区块链节点10b、区块链节点10c和区块链节点10d作为该区块链节点系统中的共识节点。区块链节点系统中的共识节点参与共识,也就是对区块(包含一批交易)进行共识,包括生成区块,对区块进行投票;而非共识节点不参与共识,但会帮助传播区块和投票消息,以及相互同步状态等。
99.其中,可以理解的是,上述的数据连接不限定连接方式,可以通过有线通信方式进行直接或间接地连接,也可以通过无线通信方式进行直接或间接地连接,还可以通过其他连接方式,本技术在此不做限制。
100.可以理解的是,本技术实施例所提供的数据处理方法可以由计算机设备执行,计算机设备包括但不限于上述区块链节点(可以为服务器或者终端)。上述服务器可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、cdn、以及大数据和人工智能平台等基础云计算服务的云服务器。上述终端可以是智能手机、平板电脑、笔记本电脑、台式计算机、智能音箱、智能手表等,但并不局限于此。
101.可以理解的是,本技术实施例可应用于各种场景,包括但不限于云技术、人工智能、智慧交通、辅助驾驶等场景。
102.可以理解的是,在本技术的具体实施方式中,涉及到的交易数据等相关的数据,当本技术以上实施例运用到具体产品或技术中时,需要获得用户许可或者同意,且相关数据的收集、使用和处理需要遵守相关国家和地区的相关法律法规和标准。
103.其中,区块链节点可以包含以下模块:
104.交易池:存储区块链网络中已知但尚未包含在区块链中的交易。区块链节点通过交易池缓存接收到的交易,并且会把txnonce等于当前世界状态里所属区块链账户的accountnonce及后续连续txnonce的交易,交由共识模块进行打包共识出块。而当有新区块共识达成然后插入到区块链结构之后,会触发交易池的刷新操作,即删除掉已经包含在区块链中的交易。
105.共识模块:对交易进行打包生成候选区块,并在各个区块链节点之间,基于共识算法达成共识,产生新区块。
106.区块链结构:所有区块首尾相连组成的链式结构,存储着区块链系统的所有交易。
107.世界状态:当前区块链结构中最新一个区块内的交易执行过后的所有账户的数据集合。
108.配置模块:存储交易池总上限、单个账户上限、区块交易数上限等相关配置。
109.如图1所示,区块链账号发送的交易会广播至所有区块链节点,但是由于存在网络
延迟、传输距离太长等问题,区块链节点并不是一定按照执行顺序标识(即上述txnonce)的从小到大的顺序接收到属于同个区块链账户的交易,此时交易池缓存的交易中,会出现某个区块链账户发送的交易对应的执行顺序标识中,最小的执行顺序标识与当前世界状态下该区块链账户的当前已执行交易数量(即上述accountnonce)不相等,或者,某个区块链账户发送的交易对应的执行顺序标识不连续的等问题,此时区块链节点系统中的区块链节点可以对交易池中缓存的交易进行精细化管理。
110.具体的,区块链节点可以对交易池中的交易按照账户的维度进行管理,再进一步地将同一账户发送的交易划分为账户准备队列和账户等待队列,以目标账户为例,其对应有目标账户准备队列和目标账户等待队列,目标账户准备队列用于存储目标账户发送的处于已准备状态的准备交易、以及与准备交易具有映射关系的执行顺序标识;目标账户等待队列用于存储目标账户发送的处于未准备状态的等待交易、以及与等待交易具有映射关系的执行顺序标识。其中,处于已准备状态的准备交易对应的执行顺序标识之间的标识关系满足顺序连续关系,且目标账户准备队列中最小的执行顺序标识要和当前世界状态下该目标账户对应的当前已执行交易数量相同。目标账户准备队列中的准备交易在被添加进目标账户准备队列的同时,会被添加进总准备队列中,此外,区块链网络中其他账户发送的处于已准备状态的准备交易在被添加进对应的账户准备队列中时,也会被添加进总准备队列中。总准备队列中的交易将会按照交易插入时间顺序被打包进候选区块。此时,被打包进候选区块的交易均能按照其执行顺序标识所指示的执行顺序被执行,候选区块共识通过的概率会提高。
111.因此,当区块链节点接收到目标账户新发送的目标交易时,可以先确定该目标交易是否处于已准备状态,若目标交易处于已准备状态,则将目标交易和目标交易对应的目标执行顺序标识添加至目标账户准备队列,得到过渡账户准备队列;然后区块链节点可以对目标账户等待队列进行交易升级处理,即在目标账户等待队列中,将与目标执行顺序标识能构成顺序标识连续序列的执行顺序标识,作为升级执行顺序标识,将升级执行顺序标识和升级执行顺序标识对应的等待交易按序迁移至过渡账户准备队列,得到升级账户准备队列,最后,区块链节点可以将升级账户准备队列中的目标交易和升级执行顺序标识对应的等待交易添加至总准备队列中等待打包。
112.为便于理解区块链节点对目标账户发送的目标交易的处理过程,请一并参见图2,图2是本技术实施例提供的一种基于区块链的数据处理的场景示意图。其中,如图2所示的区块链节点20可以为上述图1所对应实施例中的区块链节点系统中的任一区块链节点,如,区块链节点20可以为区块链节点10a。
113.如图2所示,区块链节点20中包含有区块链21,区块链21中包含了多个区块,例如,区块211、区块212等等。在区块中可以包含有不同账户发送的多个交易,例如,区块211中包含了交易a2、交易b1等等;区块212中包含了交易a1等等。其中,交易a2、交易a1是账户a发送的交易,交易b1是账户b发送的交易。区块链节点20中还包含有当前世界状态下的执行数据22。其中,当前世界状态指的是区块211上链至区块链21后区块链网络的世界状态,区块链网络对应的世界状态指区块链网络中各个账户所拥有的持久化数据共同组成的视图,由于交易的执行可以更改账户对应的账户资源,因此每当有新的区块上链至区块链21时,世界状态会发生变更,也就是说,不同区块上链至区块链21时,区块链网络的世界状态不同。执
行数据22中包含有区块链网络各个账户对应的当前已执行交易数量,已经上链的区块中包含的交易均为已执行过的交易,因此交易a2、交易a1以及交易b1均为已执行过的交易,假设区块链21中的其他区块均不包含有账户a和账户b发送的交易,此时执行数据22中会记录账户a对应的当前已执行交易数量为2,账户b对应的当前已执行交易数量为1。
114.如图2所示,区块链节点20中还包含有交易池23。其中,交易池23用于缓存区块链节点20接收到的且未被上链至区块链21的交易。假设,区块链节点20此时接收到了账户a发送的交易a5,该交易a5中包含有执行顺序标识4。其中,执行顺序标识4是指账户a希望交易a5是其在区块链网络中第五个被执行的交易,如果交易a5在区块链网络中的执行顺序不满足执行顺序标识4指示的执行顺序,则交易a5会被认为是无效交易,包含交易a5的区块的上链就不会成功。区块链节点20接收到交易a5后,会将其暂存在交易池23中。为了使得交易a5能作为账户a发送的第五个在区块链中被执行的交易,区块链节点20会获取账户a对应的账户准备队列231和账户等待队列232。其中,账户准备队列231用于存储处于已准备状态的准备交易,假设账户准备队列231中包含有交易a3和交易a3对应的执行顺序标识2,交易a4和交易a4对应的执行顺序标识3。可以理解,处于已准备状态的准备交易在区块链上的执行顺序将和其对应的执行顺序标识指示的执行顺序相同,因为账户准备队列231中的交易a3和交易a4会基于执行顺序标识的从小到大被添加进总准备队列230中,而总准备队列230中用于存储区块链网络中所有账户对应的账户准备队列中的交易,区块链节点20会从总准备队列230中根据交易插入时间顺序将交易打包进区块。所以在执行区块的过程中,交易也会按照交易插入时间顺序被执行。也就是说,区块链节点20之后的区块打包上链的过程中,会先执行交易a3,再执行交易a4,由于区块链节点20已经执行过账户a发送的交易a1和交易a2,因此交易a3会是账户a在区块链网络中第三个被执行的交易,交易a3的执行顺序和交易a3的执行顺序标识2所指示的执行顺序相同,所以交易a3是处于已准备状态的准备交易。同理,交易a4会是账户a在区块链网络中第四个被执行的交易,交易a4的执行顺序和交易a4的执行顺序标识3所指示的执行顺序相同,交易a4也是处于已准备状态的准备交易。其中,账户等待队列232用于存储处于未准备状态的等待交易,假设账户准备队列231中包含有交易a6和交易a6对应的执行顺序标识5,可见账户a希望交易a6是其在区块链网络中第六个被执行的交易,但是,若此时将交易a3、交易a4交易a6打包进区块,交易a6将是账户a在区块链网络中第五个被执行的交易,交易a6的执行顺序与交易a6对应的可执行顺便标识5所指示的执行顺序不同,因此交易a6是处于未准备状态的等待交易。
115.如图2所示,区块链节点20会确定交易a5是否处于已准备状态,区块链节点20会查询账户准备队列231,确定其包含的最大的执行顺序标识为执行顺序标识3,执行顺序标识3和交易a5对应的执行顺序标识4之间满足顺序连续关系,若交易a5在交易a4后一个执行,交易a5就将是账户a在区块链网络中第五个被执行的交易,因此区块链节点20可以确定交易a5的执行顺序和其对应的执行顺序标识4所指示的执行顺序相同,则交易a5处于已准备状态,因此,区块链节点20会将交易a5和交易a5对应的执行顺序标识4一起添加进账户a的账户准备队列231中,得到过渡账户准备队列(图中未画出),在将交易a5和交易a5对应的执行顺序标识4添加进账户a的账户准备队列231后,区块链节点20可以对账户等待队列232中的交易进行一次升级,即判断倘若交易a5将作为账户a在区块链网络中第五个执行的交易后,有无交易能够按照其对应的执行顺序标识所执行的执行顺序来执行,有就将该交易从账户
等待队列232中迁移至账户准备队列231中。如图2所示,交易a6对应的执行顺序标识6和交易a5对应的执行顺序标识5能构成顺序标识连续序列,因此区块链节点20会将交易a6以及交易a6对应的执行顺序标识5迁移至过渡账户准备队列,得到升级账户准备队列233和升级账户等待队列235。最后,区块链节点20会将交易a5和交易a6添加进账户总准备队列230中。
116.通过本技术实施例提供的数据处理方法,对区块链节点暂存在交易池中的交易按照账户维度进行精细化管理,保证被打包进区块中的交易的执行顺序,和其包含的执行顺序标识所指示的执行顺序相同,提高区块共识通过的概率,从而提高区块上链的成功率。
117.进一步地,请参见图3,图3是本技术实施例提供的一种基于区块链的数据处理方法的流程示意图。其中,该方法可以由区块链节点(例如,上述图1所对应实施例中的区块链节点系统中的任一区块链节点)执行。以下将以本方法由区块链节点执行为例进行说明,其中,该基于区块链的数据处理方法至少可以包括以下步骤s101-步骤s104:
118.步骤s101,获取目标账户发送的目标交易,获取与所述目标账户对应的目标账户准备队列和目标账户等待队列;所述目标交易包含有目标执行顺序标识;所述目标账户准备队列用于存储处于已准备状态的准备交易、以及与所述准备交易具有映射关系的执行顺序标识;所述目标账户等待队列用于存储处于未准备状态的等待交易、以及与所述等待交易具有映射关系的执行顺序标识。
119.具体的,执行顺序标识指交易对应的txnonce,用于标识发送该交易的账户希望该交易在账户发送的交易中的交易执行顺序,从0开始递增,例如,账户c发送的交易c3对应的执行顺序标识为2,则账户c希望交易c3是其在区块链网络中第三个被执行的交易,当交易c3执行完以后,账户c的当前已执行交易数量就为3,因此,可以理解,账户c下一个被执行的交易应该是执行顺序标识为3的交易c4。
120.具体的,区块链节点接收到且未被打包进区块的交易会存储在交易池中,区块链节点可以按照账户维度缓存交易,例如,将目标账户的交易进一步划分为处于已准备状态的准备交易和处于未准备状态的等待交易,然后将处于已准备状态的准备交易和其对应的执行顺序标识添加进目标账户准备队列中,将处于未准备状态的等待交易和其对应的执行顺序标识添加进目标账户等待队列中。其中,准备交易处于已准备状态是指若此时按照执行顺序标识从小到大顺序执行交易池中目标账户的所有交易,其在目标账户发送至区块链网络中的所有交易(包含交易池中的交易和已经上链的交易)中的执行顺序,将与其对应的执行顺序标识所指示的执行顺序相同。等待交易处于未准备状态是指若此时按照执行顺序标识从小到大顺序执行交易池中目标账户的所有交易,其在目标账户发送至区块链网络中的所有交易(包含交易池中的交易和已经上链的交易)中的执行顺序,将与其对应的执行顺序标识所指示的执行顺序不相同。当然,区块链节点中的交易需要被打包进候选区块,在候选区块通过共识后,候选区块中的交易才能被执行。
121.具体的,区块链节点在进行交易的打包时,是从总准备队列中按照交易插入时间顺序来获取交易然后打包生成候选区块的。其中,总准备队列中包含了区块链网络中所有账户对应的账户准备队列中的准备交易,不过同一账户的准备交易中的交易是基于其在账户准备队列中的执行顺序标识的顺序被添加进总准备队列中的。因此区块链节点只需保证目标账户准备队列中,准备交易可以按照执行顺序标识从小到大的顺序进行排列,且目标账户准备队列中最小的执行顺序标识等于当前世界状态下目标账户对应的当前已执行交
易数量,也就是目标账户对应的accountnonce,就可以保证当准备交易被打包进候选区块后执行时,准备交易在目标账户发送至区块链网络中的所有交易中的执行顺序为其执行顺序标识所指示的执行顺序。例如,账户d的accountnonce为3,代表账户d已经有3个交易被区块链节点执行过了,此时账户d对应的账户准备队列中包含有交易d4和交易d4对应的执行顺序标识3,交易d5和交易d5对应的执行顺序标识4,区块链节点会根据执行顺序标识从小到大的顺序将交易d4和交易d5添加进总准备队列中,则区块链节点按照交易插入时间顺序,会先将交易d4打包进候选区块,再将交易d5打包进候选区块,则后续区块链节点会依次执行交易d4和交易d5,此时交易d4将是账户d第四个被执行的交易,交易d5将是账户d第五个被执行的交易,交易d4和交易d5对应的执行顺序均符合其对应的执行顺序标识指示的执行顺序。
122.步骤s102,若所述目标交易处于所述已准备状态,则将所述目标交易和所述目标执行顺序标识添加至所述目标账户准备队列,得到过渡账户准备队列。
123.具体的,在接收到目标交易后,区块链节点可以根据目标账户的当前已执行交易数量、目标交易的执行顺序标识和目标账户准备队列中的执行顺序标识的关系来确定目标交易是否处于已准备状态。如果目标交易处于已准备状态,则直接将目标交易和目标交易对应的可执行顺序标识添加进目标账户准备队列,可以得到过渡账户准备队列;如果目标交易处于未准备状态,则将目标交易和目标执行顺序标识添加至目标账户等待队列中。
124.可选的,当目标账户准备队列中不包含有准备交易,即目标账户准备队列为空队列时,此时确定目标交易是否处于已准备状态的一个可行过程,可以为:对目标执行顺序标识和目标账户的当前已执行交易数量进行比对;若目标执行顺序标识和目标账户的当前已执行交易数量相同,则确定目标交易处于已准备状态;若目标执行顺序标识和目标账户的当前已执行交易数量不相同,则确定目标交易处于未准备状态,将目标交易和目标执行顺序标识添加至目标账户等待队列。例如,当账户e的accountnonce为3,账户e对应的账户准备队列为空队列时,区块链节点接收到账户e发送包含执行顺序标识4的交易d5,说明账户e希望交易d5是其第五个被执行的交易,此时若将交易d5添加进账户准备队列,则交易d5会成为账户e第四个被执行的交易,与账户e希望的执行顺序不一致,因此交易d5是处于未准备状态的等待交易,应该将交易d5添加进账户等待队列中等待升级。
125.可选的,当目标账户准备队列中包含有准备交易,即目标账户准备队列为非空队列此时确定目标交易是否处于已准备状态的一个可行过程,可以为:若目标账户准备队列为非空队列,则确定目标执行顺序标识与目标账户准备队列中最大的执行顺序标识之间的标识关系;若标识关系满足顺序连续关系,则确定目标交易处于已准备状态;若标识关系不满足顺序连续关系,则确定目标交易处于未准备状态,将目标交易和目标执行顺序标识添加至目标账户等待队列。可以理解,目标账户准备队列中的准备交易均处于已准备状态,即准备交易均可以按照其执行顺序标识所指示的执行顺序被执行,若目标账户准备队列中最大的执行顺序标识为执行顺序标识5,则执行顺序标识5对应的准备交易会是目标账户第六个被执行的交易,目标交易此时被添加进目标账户准备队列中,会成为目标账户第七个被执行的交易,因此目标交易的执行顺序标识应该为执行顺序标识6,也就是说,目标交易的执行顺序标识应该和执行顺序标识5为顺序连续关系,才能使得目标交易可以按照其执行顺序标识所指示的执行顺序被执行。
126.步骤s103,在所述目标账户等待队列中,将与所述目标执行顺序标识能构成顺序标识连续序列的执行顺序标识,作为升级执行顺序标识,将所述升级执行顺序标识和所述升级执行顺序标识对应的等待交易按序迁移至所述过渡账户准备队列,得到升级账户准备队列。
127.具体的,当目标交易被添加进账户准备队列中得到过渡账户准备队列后,过渡账户准备队列中最大的执行顺序标识就为目标交易对应的目标执行顺序标识,此时区块链节点可以查询目标账户等待队列,将能够和目标执行顺序标识构成顺序标识连续序列的执行顺序标识,作为升级执行顺序标识,将升级执行顺序标识和升级执行顺序标识对应的等待交易按序迁移至所述过渡账户准备队列,得到升级账户准备队列。可以理解,此时升级账户准备队列中的执行顺序标识可以构成以目标账户的当前已执行交易数量为首的顺序标识连续序列。
128.步骤s104,将所述升级账户准备队列中的所述目标交易和所述升级执行顺序标识对应的等待交易添加至总准备队列中;所述总准备队列中的交易会按照交易插入时间顺序被打包进候选区块。
129.具体的,区块链网络中包含有至少两个账户,每个账户均对应有账户准备队列和账户等待队列,区块链节点会在将新的准备交易被添加进某个账户对应的账户准备队列的同时,将其添加进总准备队列中。区块链节点在打包候选区块时,会根据交易插入时间顺序从总准备队列中获取交易。其中,交易插入时间顺序是指交易被添加进总准备队列中的时间顺序。
130.可选的,区块链节点中还可以包含有交易总队列,其中,交易总队列用于记录交易池中的所有交易,也就是说,交易总队列中可以包含有区块链网络中所有账户对应的准备交易和等待交易,方便区块链节点对交易池进行整体查询管理。此外,区块链节点中还可以包含有账户准备队列哈希映射和账户等待队列哈希映射,其中,账户准备队列哈希映射用于区块链节点查找账户对应的账户准备队列;账户等待队列哈希映射用于区块链节点查找到账户对应的账户等待队列。
131.为便于理解,请一并参见图4,图4是本技术实施例提供的一种用于交易池管理的队列构建示意图。如图4所示,区块链节点根据交易池中的交易,可以构建包含整个交易池所有交易的总队列,和用于存储所有账户处于已准备状态的准备交易的总准备队列,还可以构建每个账户对应的账户准备队列和账户等待队列,并建立从账户地址到账户准备队列的账户准备队列哈希映射,从账户地址到账户等待队列的账户等待队列哈希映射。其中,账户地址是账户的唯一地址。
132.如图4所示,交易总队列可以包含有交易和与交易具有映射关系的交易哈希,故交易总队列可以使用从交易哈希映射到交易的hashmap(散列表)哈希映射结构。其中,交易哈希是交易的唯一标识。其中,hashmap是一种健值映射结构,遍历顺序为随机读取。总准备队列可以包含有交易和与交易具有映射关系的交易哈希,且允许区块链节点按照交易插入的时间顺序来存储交易和遍历,故总准备队列可以使用从交易哈希映射到交易的linkedhashmap(连接散列表)结构,并且按照插入的时间顺序存放交易。其中,linkedhashmap是一种健值映射结构,会保持插入时间的顺序进行排序存放和遍历。账户准备队列需要包含准备交易以及与准备交易具有映射关系的txnonce,账户等待队列需要包
含等待交易以及与等待交易具有映射关系的txnonce,且允许区块链节点按照txnonce的大小顺序来存储交易和遍历,因此账户准备队列和账户等待队列均可以使用从txnonce映射到交易的treemap(树列表)结构,按照txnonce字段从小到大对各个交易进行排序存放。其中,treemap是一种健值映射结构,会按照键的大小进行排序存放和遍历。账户准备队列哈希映射可以使用从账户地址到账户准备队列的hashmap结构,账户等待队列哈希映射可以使用从账户地址到账户等待队列的hashmap结构。根据如图4所示的列表,只要区块链节点知道目标交易的txnonce以及发送目标交易的账户的账户地址,就可以快速定位到账户准备队列或账户等待队列中的指定交易。需要说明的是,同一个交易可能逻辑上同时出现在交易总队列、总准备队列或者账户准备列表或账户等待队列中,但是物理上是指该交易的内存指针,而物理上该交易的数据只会在内存中存储一份,以此节省内存。因此,每当本技术实施例在描述交易在某个队列中时,可以指该交易的内存指针在队列中,后文不再赘述。
133.采用本技术实施例提供的方法,将目标账户处于已准备状态的准备交易均存储在目标账户准备队列中,且目标账户的准备交易才可以添加进总准备队列中,可以保证基于总准备队列中的交易打包生成的候选区块中不会出现处于未准备状态的等待交易,可以提高区块上链的成功率。另外,目标账户发送的处于未准备状态的交易不会被拒绝接收,会先暂时存储在目标账户等待队列中,每当目标账户有新的处于已准备状态的交易添加进目标账户准备队列时,对目标账户等待队列进行升级,符合条件的等待交易会被添加进目标账户准备队列中,进一步被添加进总准备队列中等待打包,可以增强区块链系统的容错性。
134.进一步地,请参见图5,图5是本技术实施例提供的一种基于区块链的数据处理方法的流程示意图。其中,该方法可以由区块链节点(例如,上述图1所对应实施例中的区块链节点系统中的任一区块链节点)执行。以下将以本方法由区块链节点执行为例进行说明,其中,该基于区块链的数据处理方法至少可以包括以下步骤201-步骤s207:
135.步骤s201,获取目标账户发送的目标交易,确定所述目标交易的缓存验证结果;所述目标交易包含有目标执行顺序标识。
136.具体的,区块链节点接收到目标账户发送的目标交易后,可以先确定目标交易的缓存验证结果,如果区块链节点确定目标交易的缓存验证结果为合法缓存结果,就可以将目标交易缓存进交易池中,如果区块链节点确定目标交易的缓存验证结果为不合法缓存结果,区块链节点直接向目标账户返回报错信息即可。
137.具体的,确定目标交易的缓存验证结果的一个可行实施方法,可以为:获取交易总队列中的交易总数量;获取交易总数量上限阈值;若交易总数量等于交易总数量上限阈值,则向目标账户返回交易上限报错信息;若交易总数量小于交易总数量上限阈值,则确定目标交易的缓存验证结果为合法缓存结果。其中,交易总数量即交易总队列中包含的交易的数量,也就是此时交易池中缓存的交易数量。应当理解,交易池的容量有限,当交易池中缓存的交易达到上限后,区块链节点就无法将目标交易添加进交易池中了,此时区块链节点只能向目标账户发送交易上限报错信息。另外,交易池的容量上限可以通过区块链节点的配置模块来进行配置。
138.具体的,确定目标交易的缓存验证结果的一个可行实施方法,可以为:获取账户交易数量上限阈值;若目标账户准备队列中的准备交易的数量和目标账户等待队列中的等待交易的数量的总和等于账户交易数量上限阈值,则向目标账户发送交易上限报错信息;若
准备交易的数量和等待交易的数量的总和小于账户交易数量上限,则确定目标交易的缓存验证结果为合法缓存结果。其中,账户交易数量上限阈值是指目标账户可以在交易池中缓存的交易数量的最大值,可以通过区块链节点的配置模块来进行配置。应当理解,目标账户在交易池中缓存的交易包含有准备交易和等待交易,当目标账户在交易池中缓存的交易达到上限后,尽管此时区块链节点的交易池中缓存的交易没有达到上限,但区块链节点接收到目标账户发送的目标交易,仍然不会对其进行缓存,而是会向目标账户返回交易上限报错信息。
139.具体的,确定目标交易的缓存验证结果的一个可行实施方法,可以为:获取目标账户的当前已执行交易数量;若目标期望执行顺序标识小于当前已执行交易数量,则向目标账户发送交易过时报错信息;若目标执行顺序标识大于或等于当前已执行交易数量,则确定目标交易的缓存验证结果为合法缓存结果。可以理解,目标账户的当前已执行交易数量大于目标交易的目标期望执行顺序标识时,目标交易就不可能按照目标期望执行顺序标识所指示的执行顺序被执行了,区块链节点就不用再存储执行目标交易了。
140.具体的,确定目标交易的缓存验证结果的一个可行实施方法,可以为:获取目标交易的交易执行开销,查询目标账户的账户资源;若账户资源小于交易执行开销,则向目标账户发送资源不足报错信息;若账户余额大于或等于交易执行开销,则确定目标交易的缓存验证结果为合法缓存结果。其中,交易执行开销是指目标账户愿意为执行该交易所提供的数字资源,账户资源是指目标账户在区块链网络中所拥有的数字资源。
141.需要说明的是,区块链节点可以同时对目标交易进行上述多个可行实施方法来确定目标交易的缓存验证结果,此时目标交易需要同时满足多个可行实施方法的验证,区块链节点才能确定目标交易的缓存验证结果为合法缓存结果。
142.步骤s202,若所述目标交易的缓存验证结果为合法缓存结果,则获取与所述目标账户对应的目标账户准备队列和目标账户等待队列;所述目标账户准备队列用于存储处于已准备状态的准备交易、以及与所述准备交易具有映射关系的执行顺序标识;所述目标账户等待队列用于存储处于未准备状态的等待交易、以及与所述等待交易具有映射关系的执行顺序标识。
143.具体的,步骤s202的实现可以参见上述图3所对应实施例中的步骤s101,这里不再进行赘述。
144.步骤s203,根据所述目标执行顺序标识遍历所述目标账户准备队列和所述目标账户等待队列,得到针对所述目标交易的遍历结果。
145.具体的,在目标账户发送了携带某个执行顺序标识的交易后,到该交易被打包进候选区块中存在一定的时间差,这段时间内倘若目标账户希望该执行顺序标识所指示的执行顺序执行其他交易,目标账户可以发送同样包含该执行顺序标识的交易至区块链节点,则区块链节点可能获取到具有相同执行顺序标识的多个交易。但是区块链节点只会从具有相同执行顺序标识的多个交易中选择最优或者目标账户最希望执行的交易来执行,其余交易会被舍弃。因此,区块链节点接收到目标交易后,需要确定目标账户对应的目标账户准备队列中是否已经包含有拥有目标执行顺序标识的准备交易,或者目标账户等待队列中是否已经包含有拥有目标执行顺序标识的等待交易。
146.步骤s204,当所述遍历结果指示待处理队列中存在具有所述目标执行顺序标识的
交易时,则将所述待处理队列中的具有所述目标执行顺序标识的交易,确定为冲突交易,若所述目标交易与所述冲突交易之间满足冲突覆盖条件,则基于所述目标交易对所述冲突交易进行覆盖处理;所述待处理队列为所述目标账户准备队列或所述目标账户等待队列。
147.具体的,冲突交易和目标交易具有相同的目标执行顺序标识,区块链节点需要确定目标交易和冲突交易之间是否满足冲突覆盖条件,若目标交易与冲突交易之间满足冲突覆盖条件,则基于目标交易对冲突交易进行覆盖处理,若目标交易与冲突交易之间不满足冲突覆盖条件,则区块链节点会舍弃目标交易。
148.具体的,区块链节点确定目标交易和冲突交易之间是否满足冲突覆盖条件的一个可行实施方法,可以为:获取目标交易的交易执行开销,获取冲突交易的交易执行开销;若目标交易的交易执行开销大于冲突交易的交易执行开销,则确定目标交易与冲突交易之间满足冲突覆盖条件;若目标交易的交易执行开销小于或等于冲突交易的交易执行开销,则确定目标交易与冲突交易之间不满足冲突覆盖条件,向目标用户发送交易覆盖失败报错信息。其中,交易执行开销是指目标账户愿意为区块链网络执行该交易所提供的数字资源,因此交易执行开销更大的交易自然是目标账户更愿意执行的交易,此时,区块链节点会使用目标交易对冲突交易进行覆盖处理。
149.具体的,基于目标交易对冲突交易进行覆盖处理的一个可行实施方法,可以为:若待处理队列为目标账户准备队列,则在目标账户准备队列中,将冲突交易替换为目标交易,在总准备队列中,将冲突交易替换为目标交易;若待处理队列为目标账户等待队列,则在目标账户等待队列中,将冲突交易替换为目标交易。此外,区块链节点可以在交易池中删除该冲突交易。
150.步骤s205,当所述遍历结果指示待处理队列中不存在具有所述目标执行顺序标识的交易时,若所述目标交易处于所述已准备状态,则将所述目标交易和所述目标执行顺序标识添加至所述目标账户准备队列,得到过渡账户准备队列。
151.步骤s206,在所述目标账户等待队列中,将与所述目标执行顺序标识能构成顺序标识连续序列的执行顺序标识,作为升级执行顺序标识,将所述升级执行顺序标识和所述升级执行顺序标识对应的等待交易按序迁移至所述过渡账户准备队列,得到升级账户准备队列。
152.步骤s207,将所述升级账户准备队列中的所述目标交易和所述升级执行顺序标识对应的等待交易添加至总准备队列中;所述总准备队列中的交易会按照交易插入时间顺序被打包进候选区块。
153.具体的,步骤s205-步骤s207的具体实现过程可以参见上述图3所对应实施例中的步骤s102-步骤s104,这里不再进行赘述。
154.采用本技术实施例提供的方法,目标账户在发送了具有目标执行顺序标识的交易后,可以以更高的交易执行开销来发送具有相同目标执行顺序标识的目标交易,来覆盖掉之前发送的交易,提高区块链使用的灵活性,且在包含有之前发送的交易的队列中将之前发送的交易替换为目标交易,不会打乱其余交易的待执行顺序,提高交易打包的有效性。
155.进一步地,请参见图6,图6是本技术实施例提供的一种基于区块链的数据处理方法的流程示意图。其中,该方法可以由区块链节点(例如,上述图1所对应实施例中的区块链节点系统中的任一区块链节点)执行。以下将以本方法由区块链节点执行为例进行说明,其
中,该基于区块链的数据处理方法至少可以包括以下步骤301-步骤s306:
156.步骤s301,获取候选区块。
157.具体的,候选区块可以是区块链节点生成的,也可以是其他区块链节点生成然后广播给区块链节点的。当区块链节点具备出块权限时,可以从总准备队列中按照交易插入时间顺序获取交易,然后依次打包生成候选区块。区块中交易的数量需要小于或者等于区块交易数量阈值,其中,区块交易数量阈值是指区块中可以包含的交易的数量的最大值,可以通过配置模块来配置。
158.步骤s302,对所述候选区块进行共识处理,得到新区块,遍历所述新区块,得到所述目标账户的最大执行顺序标识。
159.具体的,区块链节点可以和其余共识节点一起对该候选区块进行共识,共识通过后执行该候选区块,即执行候选区块中的所有交易,然后得到包含所有交易以及所有交易对应的交易执行结果的新区块。新区块会被插入已有的区块链结构中,得到新的区块链,新的区块链中账户对应的账户资源也会发生变更,会得到新的世界状态。
160.具体的,已经被执行过且写入区块链中的交易,应当从交易池中被删除,相应的也需要从发送该交易的账户对应的账户准备队列和账户等待队列中被删除。区块链节点依然可以按照账户的维度来对交易进行删除,即根据区块中的交易,确定每个账户对应的最大的执行顺序标识,然后对每个账户的准备交易和等待交易进行删除。以目标账户为例进行说明,假设区块链节点遍历区块得到了目标账户的最大执行顺序标识。
161.步骤s303,在目标账户准备队列中,获取与第一待删除执行顺序标识具有映射关系的准备交易,作为待删除准备交易;所述第一待删除执行顺序标识为所述目标账户准备队列中,小于或等于所述最大执行顺序标识的执行顺序标识。
162.具体的,区块链节点可以获取目标账户对应的目标账户准备队列,然后从目标账户准备队列中,查找小于或等于最大执行顺序标识的执行顺序标识,将查找到的执行顺序标识作为第一待删除执行顺序标识。然后,区块链节点可以将目标账户准备队列中,与第一待删除执行顺序标识具有映射关系的准备交易,作为待删除准备交易。
163.步骤s304,在所述目标账户准备队列中,删除所述待删除准备交易和所述第一待删除执行顺序标识,得到更新账户准备队列;在所述总准备队列中删除所述待删除准备交易,得到更新总准备队列。
164.具体的,在确定待删除准备交易后,区块链节点就可以在目标账户准备队列中删除待删除准备交易和第一待删除执行顺序标识,得到更新账户准备队列;并且在总准备队列中删除待删除准备交易,得到更新总准备队列。
165.步骤s305,在所述目标账户等待队列中,获取与第二待删除执行顺序标识具有映射关系的等待交易,作为待删除等待交易;所述第二待删除执行顺序标识为所述目标账户等待队列中,小于或等于所述最大执行顺序标识的执行顺序标识。
166.具体的,区块链节点可以获取目标账户对应的目标账户等待队列,然后从目标账户等待队列中,查找小于或等于最大执行顺序标识的执行顺序标识,将查找到的执行顺序标识作为第二待删除执行顺序标识。然后,区块链节点可以将目标账户等待队列中,与第二待删除执行顺序标识具有映射关系的等待交易,作为待删除等待交易。
167.步骤s306,在所述目标账户等待队列中删除所述待删除等待交易和所述第二待删
除执行顺序标识,得到更新账户等待队列。
168.具体的,在确定待删除准备交易后,区块链节点就可以在目标账户等待队列中删除待删除等待交易和第二待删除执行顺序标识,得到更新账户等待队列。
169.可选的,在删除掉已经执行过的交易后,区块链节点可以对更新账户等待队列进行升级处理,即确定此时更新账户等待队列中的等待交易的准备状态是否发生变更,将准备状态变为已准备状态的等待交易从更新账户等待队列中迁移至更新账户准备队列中。其中,升级处理的一个可行实施方法,可以为:区块链节点获取更新账户等待队列中的最小执行顺序标识;根据最大执行顺序标识生成优化执行顺序标识;若最小执行顺序标识等于优化执行顺序标识,则在目标账户等待队列中,将与最小执行顺序标识能构成顺序标识连续序列的执行顺序标识,作为优化升级执行顺序标识,将最小执行顺序标识、最小执行顺序标识对应的等待交易、优化升级执行顺序标识和优化升级执行顺序标识对应的等待交易按序迁移至更新账户准备队列,得到优化升级账户准备队列;将最小执行顺序标识、最小执行顺序标识对应的等待交易、优化升级执行顺序标识和优化升级执行顺序标识对应的等待交易按序添加至更新总准备队列中,得到优化升级总准备队列。其中,根据最大执行顺序标识生成优化执行顺序标识的过程为:对最大执行顺序标识进行加一,就得到优化执行顺序标识。为便于理解,假设新区块中包含的账户a的最大执行顺序标识为执行顺序标识6,则优化执行顺序标识为执行顺序标识7,假设区块链节点在删除账户等待队列中不大于最大执行顺序标识的执行顺序标识以及其对应的交易后,得到的更新账户等待队列中包含了交易7和交易7对应的执行顺序标识7,交易8和交易8对应的执行顺序标识8以及交易10和交易10对应的执行顺序标识10,可见交易7对应的执行顺序标识和优化执行顺序标识,执行顺序标识7和执行顺序标识8能构成顺序标识连续序列,故区块链节点会将执行顺序标识8作为优化升级执行顺序标识,然后将交易7、交易7对应的执行顺序标识7、交易8和交易8对应的执行顺序标识8按序迁移至更新账户准备队列中。
170.可选的,在删除掉已经执行过的交易后,区块链节点可以删除余额不足的准备交易,即区块链节点可以获取更新账户准备队列中的最小执行顺序标识对应的准备交易,作为待判定准备交易;然后获取待判定准备交易的交易执行开销;查询目标账户的账户资源;若待判定准备交易的交易执行开销大于账户资源,则从更新账户准备队列中删除待判定准备交易以及最小执行顺序标识,从更新总准备队列中删除待判定准备交易;在删除后的更新账户准备队列中,将大于最小执行顺序标识的执行顺序标识,作为降级执行顺序标识,将降级执行顺序标识和降级执行顺序标识对应的准备交易迁移至更新账户等待队列,得到降级账户等待队列;将降级执行顺序标识和降级执行顺序标识对应的准备交易从删除后的更新账户准备队列中删除;将降级执行顺序标识和降级执行顺序标识对应的准备交易从删除后的更新总准备队列中删除。因为在下一次将更新账户准备队列中的交易打包进候选区块时,最小执行顺序标识对应的准备交易将是候选区块中目标账户被执行的第一个交易,若此时目标账户的数字资源不足以支撑最小执行顺序标识对应的准备交易所需要的交易执行开销,候选区块会共识失败,因此区块链节点可以先对最小执行顺序标识对应的准备交易进行判定,如果目标账户余额不足,就将该最小执行顺序标识对应的准备交易删除,此时更新账户准备队列中的其他交易如果被打包进候选区块,就无法按照其对应的执行顺序标识所指示的执行顺序被执行,因此区块链节点可以先将更新账户准备队列中的其他交易迁
移回账户等待队列中进行等待。
171.采用本技术实施例提供的方法,在新增区块时对交易池的刷新操作耗时不受交易池大小影响,只与区块大小相关,提升了交易池刷新操作的效率。
172.进一步的,请参见图7,图7是本技术实施例提供的一种交易接收方法的流程示意图。其中,该交易接收方法可以由区块链节点执行(例如,上述图1所对应实施例中的区块链节点系统中的任一区块链节点)执行。其中,区块链节点可以包含有上述图1所对应实施例所述的交易池、共识模块、区块链结构、世界状态以及配置模块。此外区块链节点可以基于交易池构建上述图4所对应实施例所述的账户准备队列哈希映射、账户等待队列哈希映射、账户准备队列、账户等待队列、总准备队列以及交易总队列。如图7所示,区块链节点收到目标账户发送的目标交易后,会进行以下操作:
173.步骤s701,校验总交易数是否已达到上限。
174.具体的,区块链节点可以根据配置模块中的交易池总上限,判断交易总队列的交易数是否已经超过上限,超过则向目标账户报错,不缓存目标交易;未超过则执行步骤s702。
175.步骤s702,校验账户交易数是否已达到上限。
176.具体的,区块链节点可以根据配置模块中的单个账户上限,获取目标交易中的账户地址,然后根据账户准备队列哈希映射和账户等待队列哈希映射找到目标账户对应的账户准备队列和账户等待队列,确定两者包含的交易数之和是否已经超过单个账户上限,超过则向目标账户报错,不缓存目标交易;未超过则执行步骤s703。
177.步骤s703,校验交易是否过时。
178.具体的,区块链节点需要校验目标交易是否过时,若目标交易的txnonce不小于当前世界状态下目标账户的accountnonce,则确定交易未过时,继续执行步骤s704;否则确定交易过时,向目标账户报错,不缓存目标交易。
179.步骤s704,校验账户余额是否充足。
180.具体的,区块链节点可以根据目标交易携带的账户地址查询当前世界状态下目标账户的账户余额,如果账户余额小于目标交易的txfee则向目标账户报错,不缓存交易;如果账户余额不小于交易的txfee,则执行步骤s705。
181.步骤s705,确定是否交易冲突。
182.具体的,区块链节点可以根据目标交易携带的账户地址,获取目标账户对应的账户准备队列和账户等待队列,然后区块链节点会确定目标账户对应的账户准备队列和账户等待队列中是否有相同txnonce的交易,如果有相同txnonce的交易,则将其确定为冲突交易,执行步骤s706。如果没有相同txnonce的交易,则执行步骤s712。
183.步骤s706,确定是否交易覆盖。
184.具体的,区块链节点可以获取目标交易的txfee和冲突交易的txfee,若目标交易的txfee不大于冲突交易的txfee,则报错,不缓存目标交易;若目标交易的txfee不大于冲突交易的txfee,则执行步骤s707。
185.步骤s707,校验交易是否已准备。
186.具体的,区块链节点根据目标交易包含的账户地址,查找目标账户对应的账户准备队列和账户等待队列中是否有相同txnonce的交易,如果是在账户准备队列中找到,则确
定目标交易已准备,执行步骤s708;如果是在账户等待队列中找到,则确定目标交易未准备,执行步骤s710。
187.步骤s708,覆盖账户准备队列中的冲突交易。
188.具体的,区块链节点根据目标交易包含的账户地址和txnonce,把目标账户对应的账户准备队列中的冲突交易删除,把目标交易添加到账户准备队列中,然后执行步骤s709。
189.步骤s709,覆盖总准备队列中的冲突交易。
190.具体的,区块链节点可以根据冲突交易的交易哈希,把总准备队列中的冲突交易以及冲突交易的交易哈希删除,把目标交易和目标交易的交易哈希添加到总准备队列中,然后执行步骤s711。
191.步骤s710,覆盖账户等待队列中的冲突交易。
192.具体的,区块链节点根据目标交易包含的账户地址和txnonce,把目标账户对应的账户等待队列中的冲突交易删除,把目标交易添加到账户等待队列中,然后执行步骤s711。
193.步骤s711,覆盖交易总队列中的冲突交易。
194.具体的,区块链节点根据冲突交易的交易哈希,把交易总队列中的冲突交易和冲突交易的交易哈希删除,把目标交易以及目标交易的交易哈希添加到交易总队列中,目标交易接收完成,流程结束。
195.步骤s712,校验交易是否已准备。
196.具体的,区块链节点根据目标交易包含的账户地址,查找目标账户对应的账户准备队列,交易已准备需要满足:账户准备队列为空,且目标交易的txnonce等于当前世界状态下目标账户的accountnonce;或者,账户准备队列不为空,且目标交易的txnonce等于账户准备队列中最后一个交易的txnonce再加1。若目标交易已准备,则执行步骤s713;若目标交易未准备,则执行步骤s716。
197.步骤s713,把目标交易添加到账户准备队列中。
198.具体的,区块链节点会将目标交易和目标交易对应的txnonce添加进账户准备队列中的队尾,也就是说,目标交易会成为账户准备队列中的最后一个交易,然后执行步骤s714。
199.步骤s714,查找账户等待队列中可以升级的交易并进行升级。
200.具体的,区块链节点会查找账户等待队列中是否存在可以升级的交易,然后对可以升级的交易进行升级。其中,升级是指把交易从账户等待队列,移动到账户准备队列。区块链节点会继续执行步骤s715。
201.具体的,区块链节点确定是否存在可以升级的交易,并对其进行升级的一个可行方法为:区块链节点可以从账户等待队列的第一个交易开始循环,判断该交易的txnonce是否等于账户准备队列中最后一个交易的txnonce再加1,如果是则把该交易从账户准备队列中删除并添加到账户准备队列中(会成为账户准备队列中最后一个交易),并记录已升级的交易。
202.具体的,区块链节点确定是否存在可以升级的交易,并对其进行升级的一个可行方法为:当账户等待队列中的交易是按照交易对应的txnonce从小到大进行顺序排列时,区块链节点可以判断账户等待队列中的第一个交易的txnonce是否等于账户准备队列中最后一个交易的txnonce再加1,如果是则将和账户等待队列中的第一个交易对应的txnonce能
构成顺序连续序列的txnonce对应的交易均确定为升级交易,将升级交易添加到账户准备队列中。
203.步骤s715,把目标交易和经过升级的交易添加到总准备队列中。
204.具体的,区块链节点会将目标交易和经过升级的交易添加到总准备队列中,然后执行步骤s717。
205.步骤s716,把目标交易添加到账户等待队列中。
206.具体的,区块链节点会将目标交易和目标交易对应的txnonce添加到账户等待队列中,然后执行步骤s717。
207.步骤s717,把目标交易添加到交易总队列中。
208.具体的,区块链节点将目标交易添加到交易总队列中后,目标交易的接收流程结束。
209.采用本技术实施例提供的方法,可以有效接收txnonce未准备好的交易并缓存,待到txnonce准备好后正常打包该交易,提高区块链系统的容错性,并且保证生成候选区块时所打包的交易的txnonce与accountnonce的有效匹配,提高区块生成的成功率。另外,支持同一账户以更高的txfee发送交易请求,覆盖交易池中的相同nonce的交易,提高用户使用区块链的灵活性。
210.区块链节点系统中具有出块权限的区块链节点,可以从总准备队列中的第一个交易开始,往后逐个交易打包进候选区块,但最终打包的交易个数不得大于配置模块里的区块交易数上限。每当有候选区块通过共识成为新的正式区块,插入区块链数据结构后,区块链节点系统中的每个区块链节点均可以执行刷新交易池操作。为便于理解,请参见图8,图8是本技术实施例提供的一种刷新交易池的流程示意图。如图8所示,刷新交易池的流程包括:
211.步骤s801,统计新区块内每个账户对应的最大执行顺序标识。
212.具体的,区块链节点可以遍历新区块内的每个交易,从中找出每个账户的最大txnonce,建立从账户地址到账户最大txnonce的哈希映射,遍历该哈希映射,对于每个账户地址及其账户最大txnonce,均分别执行以下步骤s802到步骤s805。
213.步骤s802,清理过时交易。
214.具体的,区块链节点根据账户地址查找账户对应的账户准备队列和账户等待队列,分别删除其中txnonce不大于账户最大txnonce的交易,根据删除的交易的交易哈希,删除总准备队列和总队列中的交易,继续执行步骤s803。
215.步骤s803,升级已准备交易。
216.具体的,区块链节点可以根据账户地址查找对应的账户等待队列,判断账户等待队列的第一个交易的txnonce是否等于账户最大txnonce加1,如果相等则升级该交易及后续在账户等待队列中txnonce连续的一系列交易,升级是指把交易从账户等待队列中删除,添加到账户准备队列和总准备队列,然后继续执行步骤s804。
217.步骤s804,删除余额不足的准备交易。
218.具体的,区块链节点可以根据账户地址查找对应的账户准备队列,判断账户准备队列的第一个交易的txfee是否大于当前世界状态下其所属账户的账户余额,如果大于则把该交易从账户准备队列、总准备队列及总队列中删除,继续执行步骤s805。
219.步骤s805,降级未准备交易。
220.具体的,区块链节点对于上述因余额不足而删除的交易的账户,把其账户准备队列中的所有交易降级,降级是指把交易从总准备队列和账户准备队列中删除,添加到账户等待队列,流程完成。
221.采用本技术实施例提供的方法,在新增区块时对交易池的刷新操作耗时不受交易池大小影响,只与区块大小相关,提升了交易池刷新操作的效率。
222.请参见图9,图9是本技术实施例提供的一种数据处理装置的结构示意图。该数据处理装置可以是运行于计算机设备的一个计算机程序(包括程序代码),例如该数据处理装置为一个应用软件;该装置可以用于执行本技术实施例提供的数据处理方法中的相应步骤。如图9所示,该数据处理装置1可以包括:获取模块101、交易过渡模块102、交易升级模块103以及交易添加模块104。
223.获取模块101,用于获取目标账户发送的目标交易,获取与目标账户对应的目标账户准备队列和目标账户等待队列;目标交易包含有目标执行顺序标识;目标账户准备队列用于存储处于已准备状态的准备交易、以及与准备交易具有映射关系的执行顺序标识;目标账户等待队列用于存储处于未准备状态的等待交易、以及与等待交易具有映射关系的执行顺序标识;
224.交易过渡模块102,用于若目标交易处于已准备状态,则将目标交易和目标执行顺序标识添加至目标账户准备队列,得到过渡账户准备队列;
225.交易升级模块103,用于在目标账户等待队列中,将与目标执行顺序标识能构成顺序标识连续序列的执行顺序标识,作为升级执行顺序标识,将升级执行顺序标识和升级执行顺序标识对应的等待交易按序迁移至过渡账户准备队列,得到升级账户准备队列;
226.交易添加模块104,用于将升级账户准备队列中的目标交易和升级执行顺序标识对应的等待交易添加至总准备队列中;总准备队列中的交易会按照交易插入时间顺序被打包进候选区块。
227.其中,获取模块101、交易过渡模块102、交易升级模块103以及交易添加模块104的具体实现方式可以参见上述图3所对应实施例中对步骤s101-步骤s104的描述,这里不再进行赘述。
228.请再参见图9,上述数据处理装置1,还包括:第一状态确定模块105。
229.第一状态确定模块105,用于若目标账户准备队列为空队列,则对目标执行顺序标识和目标账户的当前已执行交易标识进行比对;
230.第一状态确定模块105,还用于若目标执行顺序标识和目标账户的当前已执行交易标识相同,则确定目标交易处于已准备状态;
231.第一状态确定模块105,还用于若目标执行顺序标识和目标账户的当前已执行交易标识不相同,则确定目标交易处于未准备状态,将目标交易和目标执行顺序标识添加至目标账户等待队列。
232.其中,第一状态确定模块105的具体实现方式可以参见上述图3所对应实施例中对步骤s102的描述,这里不再进行赘述。
233.请再参见图9,上述数据处理装置1,还包括:第二状态确定模块106。
234.第二状态确定模块106,用于若目标账户准备队列为非空队列,则确定目标执行顺
序标识与目标账户准备队列中最大的执行顺序标识之间的标识关系;
235.第二状态确定模块106,还用于若标识关系满足顺序连续关系,则确定目标交易处于已准备状态;
236.第二状态确定模块106,还用于若标识关系不满足顺序连续关系,则确定目标交易处于未准备状态,将目标交易和目标执行顺序标识添加至目标账户等待队列。
237.其中,第二状态确定模块106的具体实现方式可以参见上述图3所对应实施例中对步骤s102的描述,这里不再进行赘述。
238.请再参见图9,上述数据处理装置1,还包括:遍历模块107、冲突确定模块108、第一覆盖模块109以及第二覆盖模块110。
239.遍历模块107,用于根据目标执行顺序标识遍历目标账户准备队列和目标账户等待队列,得到针对目标交易的遍历结果;
240.冲突确定模块108,还用于若遍历结果指示待处理队列中存在具有目标执行顺序标识的交易,则将待处理队列中的具有目标执行顺序标识的交易,确定为冲突交易;待处理队列为目标账户准备队列或目标账户等待队列;
241.第一覆盖模块109,用于若目标交易与冲突交易之间满足冲突覆盖条件,则基于目标交易对冲突交易进行覆盖处理;
242.第二覆盖模块110,用于若目标交易与冲突交易之间不满足冲突覆盖条件,则调用交易过渡模块来执行若目标交易处于已准备状态,则将目标交易和目标执行顺序标识添加至目标账户准备队列,得到过渡账户准备队列的步骤。
243.其中,遍历模块107、冲突确定模块108、第一覆盖模块109以及第二覆盖模块110的具体实现方式可以参见上述图5所对应实施例中对步骤s203-步骤s205的描述,这里不再进行赘述。
244.请再参见图9,上述数据处理装置1,还包括:覆盖确定模块111。
245.覆盖确定模块111,用于获取目标交易的交易执行开销,获取冲突交易的交易执行开销;
246.覆盖确定模块111,还用于若目标交易的交易执行开销大于冲突交易的交易执行开销,则确定目标交易与冲突交易之间满足冲突覆盖条件;
247.覆盖确定模块111,还用于若目标交易的交易执行开销小于或等于冲突交易的交易执行开销,则确定目标交易与冲突交易之间不满足冲突覆盖条件,向目标用户发送交易覆盖失败报错信息。
248.其中,覆盖确定模块111的具体实现方式可以参见上述图5所对应实施例中对步骤s204的描述,这里不再进行赘述。
249.请再参见图9,第一覆盖模块109,包括:第一替换单元1091以及第二替换单元1092。
250.第一替换单元1091,用于若待处理队列为目标账户准备队列,则在目标账户准备队列中,将冲突交易替换为目标交易,在总准备队列中,将冲突交易替换为目标交易;
251.第二替换单元1092,用于若待处理队列为目标账户等待队列,则在目标账户等待队列中,将冲突交易替换为目标交易。
252.其中,第一替换单元1091以及第二替换单元1092的具体实现方式可以参见上述图
5所对应实施例中对步骤s204的描述,这里不再进行赘述。
253.请再参见图9,上述数据处理装置1,还包括:第一交易处理模块112。
254.第一交易处理模块112,用于获取账户交易数量上限阈值;
255.第一交易处理模块112,还用于若目标账户准备队列中的准备交易的数量和目标账户等待队列中的等待交易的数量的总和等于账户交易数量上限阈值,则向目标账户发送交易上限报错信息;
256.第一交易处理模块112,还用于若准备交易的数量和等待交易的数量的总和小于账户交易数量上限,则调用交易过渡模块来执行若目标交易处于已准备状态,则将目标交易和目标执行顺序标识添加至目标账户准备队列,得到过渡账户准备队列的步骤。
257.其中,第一交易处理模块112的具体实现方式可以参见上述图5所对应实施例中对步骤s201的描述,这里不再进行赘述。
258.请再参见图9,上述数据处理装置1,还包括:第二交易处理模块113。
259.第二交易处理模块113,用于获取目标账户的当前已执行交易数量;
260.第二交易处理模块113,还用于若目标期望执行顺序标识小于当前已执行交易数量,则向目标账户发送交易过时报错信息;
261.第二交易处理模块113,还用于若目标执行顺序标识大于或等于当前已执行交易数量,则调用交易过渡模块来执行若目标交易处于已准备状态,则将目标交易和目标执行顺序标识添加至目标账户准备队列,得到过渡账户准备队列的步骤。
262.其中,第二交易处理模块113的具体实现方式可以参见上述图5所对应实施例中对步骤s201的描述,这里不再进行赘述。
263.请再参见图9,上述数据处理装置1,还包括:第三交易处理模块114。
264.第三交易处理模块114,用于获取目标交易的交易执行开销,查询目标账户的账户资源;
265.第三交易处理模块114,还用于若账户资源小于交易执行开销,则向目标账户发送资源不足报错信息;
266.第三交易处理模块114,还用于若账户余额大于或等于交易执行开销,则调用交易过渡模块来执行若目标交易处于已准备状态,则将目标交易和目标执行顺序标识添加至目标账户准备队列,得到过渡账户准备队列的步骤。
267.其中,第三交易处理模块114的具体实现方式可以参见上述图5所对应实施例中对步骤s201的描述,这里不再进行赘述。
268.请再参见图9,上述数据处理装置1,还包括:交易打包模块115以及队列更新模块116。
269.交易打包模块115,用于将总准备队列中的交易按照交易插入时间顺序打包进候选区块中;区块中的交易数量小于或等于区块交易数量阈值;
270.队列更新模块116,用于对候选区块进行共识处理,得到新区块,遍历新区块,得到目标账户的最大执行顺序标识;
271.队列更新模块116,还用于在目标账户准备队列中,获取与第一待删除执行顺序标识具有映射关系的准备交易,作为待删除准备交易;第一待删除执行顺序标识为目标账户准备队列中,小于或等于最大执行顺序标识的执行顺序标识;
272.队列更新模块116,还用于在目标账户准备队列中,删除待删除准备交易和第一待删除执行顺序标识,得到更新账户准备队列;
273.队列更新模块116,还用于在总准备队列中删除待删除准备交易,得到更新总准备队列;
274.队列更新模块116,还用于在目标账户等待队列中,获取与第二待删除执行顺序标识具有映射关系的等待交易,作为待删除等待交易;第二待删除执行顺序标识为目标账户等待队列中,小于或等于最大执行顺序标识的执行顺序标识;
275.队列更新模块116,还用于在目标账户等待队列中删除待删除等待交易和第二待删除执行顺序标识,得到更新账户等待队列。
276.其中,交易打包模块115以及队列更新模块116的具体实现方式可以参见上述图6所对应实施例中对步骤s301-步骤s306的描述,这里不再进行赘述。
277.请再参见图9,上述数据处理装置1,还包括:队列优化模块117。
278.队列优化模块117,用于获取更新账户等待队列中的最小执行顺序标识;
279.队列优化模块117,还用于根据最大执行顺序标识生成优化执行顺序标识;
280.队列优化模块117,还用于若最小执行顺序标识等于优化执行顺序标识,则在目标账户等待队列中,将与最小执行顺序标识能构成顺序标识连续序列的执行顺序标识,作为优化升级执行顺序标识,将最小执行顺序标识、最小执行顺序标识对应的等待交易、优化升级执行顺序标识和优化升级执行顺序标识对应的等待交易按序迁移至更新账户准备队列,得到优化升级账户准备队列;
281.队列优化模块117,还用于将最小执行顺序标识、最小执行顺序标识对应的等待交易、优化升级执行顺序标识和优化升级执行顺序标识对应的等待交易按序添加至更新总准备队列中,得到优化升级总准备队列。
282.其中,队列优化模块117的具体实现方式可以参见上述图6所对应实施例中的可选实施例描述,这里不再进行赘述。
283.请再参见图9,上述数据处理装置1,还包括:队列删除模块118。
284.队列删除模块118,用于获取更新账户准备队列中的最小执行顺序标识对应的准备交易,作为待判定准备交易;
285.队列删除模块118,还用于获取待判定准备交易的交易执行开销;查询目标账户的账户资源;
286.队列删除模块118,还用于若待判定准备交易的交易执行开销大于账户资源,则从更新账户准备队列中删除待判定准备交易以及最小执行顺序标识,从更新总准备队列中删除待判定准备交易;
287.队列删除模块118,还用于在删除后的更新账户准备队列中,将大于最小执行顺序标识的执行顺序标识,作为降级执行顺序标识,将降级执行顺序标识和降级执行顺序标识对应的准备交易迁移至更新账户等待队列,得到降级账户等待队列;
288.队列删除模块118,还用于将降级执行顺序标识和降级执行顺序标识对应的准备交易从删除后的更新账户准备队列中删除;
289.队列删除模块118,还用于将降级执行顺序标识和降级执行顺序标识对应的准备交易从删除后的更新总准备队列中删除。
290.其中,队列删除模块118的具体实现方式可以参见上述图6所对应实施例中的可选实施例的描述,这里不再进行赘述。
291.请参见图10,图10是本技术实施例提供的一种计算机设备的结构示意图。如图10所示,上述图9所对应实施例中的数据处理装置1可以应用于计算机设备1000,该计算机设备1000可以包括:处理器1001,网络接口1004和存储器1005,此外,上述计算机设备1000还可以包括:用户接口1003,和至少一个通信总线1002。其中,通信总线1002用于实现这些组件之间的连接通信。其中,用户接口1003可以包括显示屏(display)、键盘(keyboard),可选用户接口1003还可以包括标准的有线接口、无线接口。网络接口1004可选的可以包括标准的有线接口、无线接口(如wi-fi接口)。存储器1005可以是高速ram存储器,也可以是非不稳定的存储器(non-volatile memory),例如至少一个磁盘存储器。存储器1005可选的还可以是至少一个位于远离前述处理器1001的存储装置。如图10所示,作为一种计算机可读存储介质的存储器1005中可以包括操作系统、网络通信模块、用户接口模块以及设备控制应用程序。
292.在如图10所示的计算机设备1000中,网络接口1004可提供网络通讯网元;而用户接口1003主要用于为用户提供输入的接口;而处理器1001可以用于调用存储器1005中存储的设备控制应用程序,以实现:
293.获取目标账户发送的目标交易,获取与目标账户对应的目标账户准备队列和目标账户等待队列;目标交易包含有目标执行顺序标识;目标账户准备队列用于存储处于已准备状态的准备交易、以及与准备交易具有映射关系的执行顺序标识;目标账户等待队列用于存储处于未准备状态的等待交易、以及与等待交易具有映射关系的执行顺序标识;
294.若目标交易处于已准备状态,则将目标交易和目标执行顺序标识添加至目标账户准备队列,得到过渡账户准备队列;
295.在目标账户等待队列中,将与目标执行顺序标识能构成顺序标识连续序列的执行顺序标识,作为升级执行顺序标识,将升级执行顺序标识和升级执行顺序标识对应的等待交易按序添加至过渡账户准备队列,得到升级账户准备队列;
296.将升级账户准备队列中的目标交易和升级执行顺序标识对应的等待交易添加至总准备队列中;总准备队列中的交易会按照交易插入时间顺序被打包进候选区块。
297.应当理解,本技术实施例中所描述的计算机设备1000可执行前文任一个实施例对该数据处理方法的描述,在此不再赘述。另外,对采用相同方法的有益效果描述,也不再进行赘述。
298.此外,这里需要指出的是:本技术实施例还提供了一种计算机可读存储介质,且上述计算机可读存储介质中存储有前文提及的数据处理装置1所执行的计算机程序,且上述计算机程序包括程序指令,当上述处理器执行上述程序指令时,能够执行前文任一个实施例对上述数据处理方法的描述,因此,这里将不再进行赘述。另外,对采用相同方法的有益效果描述,也不再进行赘述。对于本技术所涉及的计算机可读存储介质实施例中未披露的技术细节,请参照本技术方法实施例的描述。
299.上述计算机可读存储介质可以是前述任一实施例提供的数据处理装置或者上述计算机设备的内部存储单元,例如计算机设备的硬盘或内存。该计算机可读存储介质也可以是该计算机设备的外部存储设备,例如该计算机设备上配备的插接式硬盘,智能存储卡
(smart media card,smc),安全数字(secure digital,sd)卡,闪存卡(flash card)等。进一步地,该计算机可读存储介质还可以既包括该计算机设备的内部存储单元也包括外部存储设备。该计算机可读存储介质用于存储该计算机程序以及该计算机设备所需的其他程序和数据。该计算机可读存储介质还可以用于暂时地存储已经输出或者将要输出的数据。
300.此外,这里需要指出的是:本技术实施例还提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行前文图3、图4任一个所对应实施例提供的方法。
301.本技术实施例的说明书和权利要求书及附图中的术语“第一”、“第二”等是用于区别不同对象,而非用于描述特定顺序。此外,术语“包括”以及它们任何变形,意图在于覆盖不排他的包含。例如包含了一系列步骤或单元的过程、方法、装置、产品或设备没有限定于已列出的步骤或模块,而是可选地还包括没有列出的步骤或模块,或可选地还包括对于这些过程、方法、装置、产品或设备固有的其他步骤单元。
302.本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照网元一般性地描述了各示例的组成及步骤。这些网元究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的网元,但是这种实现不应认为超出本技术的范围。
303.以上所揭露的仅为本技术较佳实施例而已,当然不能以此来限定本技术之权利范围,因此依本技术权利要求所作的等同变化,仍属本技术所涵盖的范围。

技术特征:
1.一种基于区块链的数据处理方法,其特征在于,包括:获取目标账户发送的目标交易,获取与所述目标账户对应的目标账户准备队列和目标账户等待队列;所述目标交易包含有目标执行顺序标识;所述目标账户准备队列用于存储处于已准备状态的准备交易、以及与所述准备交易具有映射关系的执行顺序标识;所述目标账户等待队列用于存储处于未准备状态的等待交易、以及与所述等待交易具有映射关系的执行顺序标识;若所述目标交易处于所述已准备状态,则将所述目标交易和所述目标执行顺序标识添加至所述目标账户准备队列,得到过渡账户准备队列;在所述目标账户等待队列中,将与所述目标执行顺序标识能构成顺序标识连续序列的执行顺序标识,作为升级执行顺序标识,将所述升级执行顺序标识和所述升级执行顺序标识对应的等待交易按序迁移至所述过渡账户准备队列,得到升级账户准备队列;将所述升级账户准备队列中的所述目标交易和所述升级执行顺序标识对应的等待交易添加至总准备队列中;所述总准备队列中的交易会按照交易插入时间顺序被打包进候选区块。2.根据权利要求1所述的方法,其特征在于,还包括:若所述目标账户准备队列为空队列,则对所述目标执行顺序标识和所述目标账户的当前已执行交易数量进行比对;若所述目标执行顺序标识和所述目标账户的当前已执行交易数量相同,则确定所述目标交易处于所述已准备状态;若所述目标执行顺序标识和所述目标账户的当前已执行交易数量不相同,则确定所述目标交易处于所述未准备状态,将所述目标交易和所述目标执行顺序标识添加至所述目标账户等待队列。3.根据权利要求1所述的方法,其特征在于,还包括:若所述目标账户准备队列为非空队列,则确定所述目标执行顺序标识与所述目标账户准备队列中最大的执行顺序标识之间的标识关系;若所述标识关系满足顺序连续关系,则确定所述目标交易处于所述已准备状态;若所述标识关系不满足顺序连续关系,则确定所述目标交易处于所述未准备状态,将所述目标交易和所述目标执行顺序标识添加至所述目标账户等待队列。4.根据权利要求1所述的方法,其特征在于,还包括:根据所述目标执行顺序标识遍历所述目标账户准备队列和所述目标账户等待队列,得到针对所述目标交易的遍历结果;当所述遍历结果指示待处理队列中存在具有所述目标执行顺序标识的交易时,将所述待处理队列中的具有所述目标执行顺序标识的交易,确定为冲突交易;所述待处理队列为所述目标账户准备队列或所述目标账户等待队列;若所述目标交易与所述冲突交易之间满足冲突覆盖条件,则基于所述目标交易对所述冲突交易进行覆盖处理;当所述遍历结果指示待处理队列中不存在具有所述目标执行顺序标识的交易时,执行所述若所述目标交易处于所述已准备状态,则将所述目标交易和所述目标执行顺序标识添加至所述目标账户准备队列,得到过渡账户准备队列的步骤。
5.根据权利要求4所述的方法,其特征在于,还包括:获取所述目标交易的交易执行开销,获取所述冲突交易的交易执行开销;若所述目标交易的交易执行开销大于所述冲突交易的交易执行开销,则确定所述目标交易与所述冲突交易之间满足冲突覆盖条件;若所述目标交易的交易执行开销小于或等于所述冲突交易的交易执行开销,则确定所述目标交易与所述冲突交易之间不满足冲突覆盖条件,向所述目标用户发送交易覆盖失败报错信息。6.根据权利要求4所述的方法,其特征在于,则基于所述目标交易对所述冲突交易进行覆盖处理,包括:若所述待处理队列为所述目标账户准备队列,则在所述目标账户准备队列中,将所述冲突交易替换为所述目标交易,在所述总准备队列中,将所述冲突交易替换为所述目标交易;若所述待处理队列为所述目标账户等待队列,则在所述目标账户等待队列中,将所述冲突交易替换为所述目标交易。7.根据权利要求1所述的方法,其特征在于,还包括:获取账户交易数量上限阈值;若所述目标账户准备队列中的准备交易的数量和所述目标账户等待队列中的等待交易的数量的总和等于所述账户交易数量上限阈值,则向所述目标账户发送交易上限报错信息;若所述准备交易的数量和所述等待交易的数量的总和小于所述账户交易数量上限,则执行所述若所述目标交易处于所述已准备状态,则将所述目标交易和所述目标执行顺序标识添加至所述目标账户准备队列,得到过渡账户准备队列的步骤。8.根据权利要求1所述的方法,其特征在于,还包括:获取所述目标账户的当前已执行交易数量;若所述目标期望执行顺序标识小于所述当前已执行交易数量,则向所述目标账户发送交易过时报错信息;若所述目标执行顺序标识大于或等于所述当前已执行交易数量,则执行所述若所述目标交易处于所述已准备状态,则将所述目标交易和所述目标执行顺序标识添加至所述目标账户准备队列,得到过渡账户准备队列的步骤。9.根据权利要求1所述的方法,其特征在于,还包括:获取所述目标交易的交易执行开销,查询所述目标账户的账户资源;若所述账户资源小于所述交易执行开销,则向所述目标账户发送资源不足报错信息;若所述账户余额大于或等于所述交易执行开销,则执行所述若所述目标交易处于所述已准备状态,则将所述目标交易和所述目标执行顺序标识添加至所述目标账户准备队列,得到过渡账户准备队列的步骤。10.根据权利要求1所述的方法,其特征在于,还包括:将所述总准备队列中的交易按照所述交易插入时间顺序打包进候选区块中;所述区块中的交易数量小于或等于区块交易数量阈值;对所述候选区块进行共识处理,得到新区块,遍历所述新区块,得到所述目标账户的最
大执行顺序标识;在所述目标账户准备队列中,获取与第一待删除执行顺序标识具有映射关系的准备交易,作为待删除准备交易;所述第一待删除执行顺序标识为所述目标账户准备队列中,小于或等于所述最大执行顺序标识的执行顺序标识;在所述目标账户准备队列中,删除所述待删除准备交易和所述第一待删除执行顺序标识,得到更新账户准备队列;在所述总准备队列中删除所述待删除准备交易,得到更新总准备队列;在所述目标账户等待队列中,获取与第二待删除执行顺序标识具有映射关系的等待交易,作为待删除等待交易;所述第二待删除执行顺序标识为所述目标账户等待队列中,小于或等于所述最大执行顺序标识的执行顺序标识;在所述目标账户等待队列中删除所述待删除等待交易和所述第二待删除执行顺序标识,得到更新账户等待队列。11.根据权利要求10所述的方法,其特征在于,还包括:获取所述更新账户等待队列中的最小执行顺序标识;根据所述最大执行顺序标识生成优化执行顺序标识;若所述最小执行顺序标识等于所述优化执行顺序标识,则在所述目标账户等待队列中,将与所述最小执行顺序标识能构成顺序标识连续序列的执行顺序标识,作为优化升级执行顺序标识,将所述最小执行顺序标识、所述最小执行顺序标识对应的等待交易、所述优化升级执行顺序标识和所述优化升级执行顺序标识对应的等待交易按序迁移至更新账户准备队列,得到优化升级账户准备队列;将所述最小执行顺序标识、所述最小执行顺序标识对应的等待交易、所述优化升级执行顺序标识和所述优化升级执行顺序标识对应的等待交易按序添加至所述更新总准备队列中,得到优化升级总准备队列。12.根据权利要求10所述的方法,其特征在于,还包括:获取所述更新账户准备队列中的最小执行顺序标识对应的准备交易,作为待判定准备交易;获取所述待判定准备交易的交易执行开销;查询所述目标账户的账户资源;若所述待判定准备交易的交易执行开销大于所述账户资源,则从所述更新账户准备队列中删除所述待判定准备交易以及所述最小执行顺序标识,从所述更新总准备队列中删除所述待判定准备交易;在删除后的更新账户准备队列中,将大于所述最小执行顺序标识的执行顺序标识,作为降级执行顺序标识,将所述降级执行顺序标识和所述降级执行顺序标识对应的准备交易迁移至所述更新账户等待队列,得到降级账户等待队列;将所述降级执行顺序标识和所述降级执行顺序标识对应的准备交易从所述删除后的更新账户准备队列中删除;将所述降级执行顺序标识和所述降级执行顺序标识对应的准备交易从所述删除后的更新总准备队列中删除。13.一种计算机设备,其特征在于,包括:处理器、存储器以及网络接口;所述处理器与所述存储器、所述网络接口相连,其中,所述网络接口用于提供数据通信
功能,所述存储器用于存储程序代码,所述处理器用于调用所述程序代码,以执行权利要求1-12任一项所述的方法。14.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有计算机程序,所述计算机程序适于由处理器加载并执行权利要求1-12任一项所述的方法。15.一种计算机程序产品,包括计算机程序/指令,其特征在于,所述计算机程序/指令被处理器执行时,可以执行权利要求1-12任一项所述的方法。

技术总结
本发明公开了一种基于区块链的数据处理方法、设备及可读存储介质,该方法包括:获取包含目标执行顺序标识的目标交易;若目标交易处于已准备状态,则将目标交易和目标执行顺序标识添加至目标账户准备队列,得到过渡账户准备队列;在目标账户等待队列中,将与目标执行顺序标识能构成顺序标识连续序列的执行顺序标识,作为升级执行顺序标识,将升级执行顺序标识和升级执行顺序标识对应的等待交易按序添加至过渡账户准备队列,得到升级账户准备队列;将升级账户准备队列中的目标交易和升级执行顺序标识对应的等待交易添加至总准备队列中;总准备队列中的交易会按照交易插入时间顺序被打包进候选区块。采用本发明,可以提高区块上链的成功率。块上链的成功率。块上链的成功率。


技术研发人员:冯浩铭 赵勇 陈诗鹏 刘生乾
受保护的技术使用者:腾讯科技(深圳)有限公司
技术研发日:2022.01.25
技术公布日:2023/8/4
版权声明

本文仅代表作者观点,不代表航空之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)

飞行汽车 https://www.autovtol.com/

分享:

扫一扫在手机阅读、分享本文

相关推荐