一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

基于区块链的交易冲突检测方法、装置、设备和存储介质与流程

2022-02-22 20:24:12 来源:中国专利 TAG:

1.本发明涉及区块链技术领域,具体涉及一种基于区块链的交易冲突检测方法、装置、设备和存储介质。


背景技术:

2.在分片执行的框架下,上层管理模块将交易做预分析后分发到下层不通的执行器,执行器层需要在执行过程中,生成读写集,并返回给上层做冲突检测;在交易量较大,交易账本修改内容较多的情况下,会造成读写集内容庞大、内存消耗较大、冲突检测的对比效率低耗时长等等问题,并且对于如迭代器等范围读取操作的操作,单独key-value的速写集组织方式和冲突检测逻辑并不适用于范围读取操作,一方面范围读取操作涉及的key-value数量较多,冲突检测的逻辑耗时较大;另一方面,单独的key-value冲突检测和范围内的key-value冲突检测并不等同,可能存在正确性问题。


技术实现要素:

3.本发明实施例提供一种基于区块链的交易冲突检测方法、装置、设备和存储介质,以解决现有技术下的区块链的交易冲突检测效率低耗时长的问题。
4.一方面,本发明实施例提供一种基于区块链的交易冲突检测方法,所述方法包括:获取交易读写集,以及获取所述交易读写集对应的前序读写集;根据所述前序读写集对所述交易读写集的读集位图进行逻辑运算,确定所述前序读写集与所述交易读写集之间是否存在冲突;若所述前序读写集与所述交易读写集之间不存在冲突,则将所述前序读写集与所述交易读写集进行合并,得到目标读写集。
5.另一方面,本发明实施例提供一种基于区块链的交易冲突检测装置,所述装置包括:读写集获取模块,用于获取交易读写集,以及获取所述交易读写集对应的前序读写集;冲突检测模块,用于根据所述前序读写集对所述交易读写集的读集位图进行逻辑运算,确定所述前序读写集与所述交易读写集之间是否存在冲突读集位图;读写集合并模块,用于若所述前序读写集与所述交易读写集之间不存在冲突,则将所述前序读写集与所述交易读写集进行合并,得到目标读写集。
6.另一方面,本发明实施例提供一种基于区块链的交易冲突检测设备,包括存储器和处理器;所述存储器存储有应用程序,所述处理器用于运行所述存储器内的应用程序,以执行所述的基于区块链的交易冲突检测方法中的操作。
7.另一方面,本发明实施例提供一种存储介质,所述存储介质存储有多条指令,所述指令适于处理器进行加载,以执行所述的基于区块链的交易冲突检测方法中的步骤。
8.本发明实施例获取交易读写集,以及获取所述交易读写集对应的前序读写集;根
据所述前序读写集对所述交易读写集的读集位图进行逻辑运算,确定所述前序读写集与所述交易读写集之间是否存在冲突;若所述前序读写集与所述交易读写集之间不存在冲突,则将所述前序读写集与所述交易读写集进行合并,得到目标读写集;通过读写集的位图的逻辑运算结果进行交易冲突检测,降低读写集的体量,降低复杂度,提高冲突检测的效率。
附图说明
9.为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
10.图1是本发明实施例提供的基于区块链的交易冲突检测方法的一个实施例流程示意图;图2是本发明实施例提供的基于区块链的交易冲突检测方法中进行冲突检测的一个实施例流程示意图;图3是本发明实施例提供的基于区块链的交易冲突检测方法中合并读写集的一个实施例流程示意图;图4是本发明实施例提供的基于区块链的交易冲突检测装置的一个实施例结构示意图;图5是本发明实施例提供的基于区块链的交易冲突检测设备的一个实施例结构示意图。
具体实施方式
11.下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
12.如图1所示,基于区块链的交易冲突检测方法包括步骤101~103:步骤101,获取交易读写集,以及获取交易读写集对应的前序读写集。
13.交易指的是区块链在应用中产生的操作,例如转账操作、创建智能合约、智能合约调用、创建账户等。在本发明一些实施例中,区块链中的账户类型包括合约账户和普通账户。其中,普通账户指的是用户使用的账户,普通账户包括用户的私钥和钱包等信息;合约账户用于存放智能合约,通常需要普通账户创建。
14.交易的执行过程包括但不限于账户结构体的内容修改、账户合约状态数据修改、创建账户和删除账户的操作过程。其中,账户结构体的内容修改指的是修改或读取普通账户钱包等信息,例如转账操作;账户合约状态数据修改指的是用户写入或读取合约账户的下属合约状态数据,例如创建智能合约和智能合约调用等。
15.读写集用于记录交易的执行过程。读集包含了唯一的键值列表以及在模拟执行过程中交易读取的已提交键值。写集包含了一个唯一键值的列表,以及在执行过程中交易写入的键值,交易过程中有删除键,用于记录删除标记。在本发明一些实施例中,考虑到在交
易量较大,交易账本修改内容较多的情况下,交易的读写集内容庞大,降低根据读写集进行交易冲突检测的效率,因此通过位图的形式记录交易的执行过程。具体地,根据账户类型和执行过程类型创建键值的列表,根据列表的顺序和数量创建一个全为0的位图,使位图中每一个元素对应键值列表中的每一个键值,将读写集表示为账户到位图的映射;并对位图中的每一个元素都设置一个分片标识,得到读写集。在读写集中,读集包括读集位图和合约状态数据,其中合约状态数据包括合约状态数据键值和合约状态数据范围,合约状态数据键值和合约状态数据范围分别用于记录账户合约状态数据中具体读取的状态键值、以及读取范围;写集包括写集位图和修改内容,其中修改内容包括账户结构体的修改内容以及账户合约状态数据的修改内容。在本发明一些实施例中,在记录交易的执行过程时,如果读取和/或修改了键值的列表中的某一个键值,将位图中该键值对应的元素的值置1。
16.在本发明一些实施例中,分片标识用于指示元素对应键值被读取和/或修改的区块链分片。其中,区块链分片是指将区块链执行模块进行横向拓展,从原先每个节点包含一个执行模块拓展为每个节点具有若干个执行模块,每个执行模块可独立执行、验证交易,不同的分片使用同一个账本保存状态数据,由统一的分片管理者来管理分片。
17.前序读写集可以是交易对应账户在执行该交易之前产生的读写集,即交易读写集生成之前该账户的读写集,也可以是交易读写集所在区块的其余读写集。
18.在本发明一些实施例中,步骤101包括:获取交易的已有读写集,根据交易的执行过程中读取的键值,对已有读写集的已有读集位图、已有合约状态数据进行修改得到交易读集,和/或根据交易的执行过程中修改的键值,对已有读写集的已有写集位图进行修改,并将修改的键值记录到账户结构体的修改内容和账户合约状态数据的修改内容中,生成交易写集;根据交易写集和交易读集得到交易读写集;并获取交易读写集所在的区块中的前序读写集。
19.在本发明一些实施例中,可以查询交易是否存在对应的已有读写集;如果存在对应的已有读写集,则获取已有读写集;如果不存在对应的已有读写集,则根据交易对应的账户类型创建读写集,并根据交易的执行过程对该读写集进行更新得到交易读写集。
20.步骤102,根据前序读写集对交易读写集的读集位图进行逻辑运算,确定前序读写集与交易读写集之间是否存在冲突。
21.冲突指的账户的后序交易读写集与前序交易读写集在不同分片中对同一个键值进行读取和/或修改,即前序交易修改的数据和后序交易读取的数据存在相同的键值,并且该键值在后序交易读写集的分片标识与该键值在前序交易读写集的分片标识不相同。其中后序交易指的是账户的当前交易,即交易读写集记录的交易。
22.在本发明一些实施例中,步骤102包括:根据前序读写集的前序写集位图对交易读写集的读集位图进行逻辑运算,根据逻辑运算结果检测交易读写集和前序读写集是否对同一个键值进行读取和/或修改,确定交易读写集与前序读写集之间是否存在冲突。
23.在本发明一些实施例中,可以对前序写集位图和读集位图进行与运算,得到运算结果,如果运算结果全为0,说明当前交易和前序交易没有对相同的键值进行读取/修改,或者当前交易和前序交易在同一个分片中执行,则判定交易读写集与前序读写集没有对同一个键值进行读取和/或修改;如果运算结果存在为1的元素,说明当前交易和前序交易对相同的键值进行读取/修改,并该键值在不同分片被读取/修改,则判定交易读写集与前序读
写集对同一个键值进行读取和/或修改。
24.步骤103,若前序读写集与交易读写集之间不存在冲突,则将前序读写集与交易读写集进行合并,得到目标读写集。
25.在本发明一些实施例中,当前序交易与当前交易在同一个分片中执行时,前序交易的读写集和后序交易的读写集不存在冲突,因此可以对账户的前序交易的读写集和后序交易的读写集进行合并。当前序交易和后序交易在不同分片中执行时,可以通过检测前序交易的写集和后序交易的读集是否存在交集,判断前序交易的读写集和后序交易的读写集是否存在冲突;如果前序交易的读写集和后序交易的读写集不存在冲突,则将账户的前序交易的读写集和后序交易的读写集进行合并。
26.本发明实施例通过读写集的位图的逻辑运算结果进行交易冲突检测,判断前序读写集与交易读写集是否存在交集,降低读写集的体量,降低复杂度,提高冲突检测的效率。
27.在本发明一些实施例中,在交易读写集生成中,获取交易的已有读写集,根据交易的执行过程中读取/修改的键值对已有读写集中对应键值进行修改,得到交易读写集,具体地,生成读写集的方法包括步骤a1~a5:步骤a1,获取交易的已有读写集,以及获取已有读写集的已有读集位图和已有写集位图。
28.步骤a2,根据交易的执行过程获取待操作的键值,对已有读写集中待操作的键值进行读取和/或修改操作,得到中间读写集。
29.待操作的键值包括待读取的键值和待修改的键值,其中待修改的键值包括待写入的键值和待删除的键值,中间读写集包括读集中的合约状态数据和写集中的修改内容。
30.在本发明一些实施例中,步骤a2包括:根据交易的执行过程获取待操作的键值;根据执行过程对已有读写集中待操作的键值进行读取和/或修改操作,修改读集中的合约状态数据和/或写集中的修改内容,得到中间读写集。
31.步骤a3,获取已有读集位图中待操作的键值对应的读集待修改元素,和已有写集位图中待操作的键值对应的写集待修改元素。
32.在本发明一些实施例中,可以根据键值与元素之间的映射关系,获取已有读集位图中待操作的键值对应的读集待修改元素,以及已有写集位图中待操作的键值对应的写集待修改元素。
33.步骤a4,根据交易的执行过程的操作类型,通过预设值对读集待修改元素和/或写集待修改元素进行赋值,得到写集位图和/或读集位图。
34.操作类型包括读取操作、写入操作、删除操作和新建操作。预设值可以是1,用于指示位图中元素对应的键值被读取和/或被修改。
35.在本发明一些实施例中,步骤a4包括:根据交易的执行过程的操作类型,通过预设值对读集待修改元素和/或写集待修改元素进行赋值,将读集待修改元素和/或写集待修改元素对应的分片标识修改为当前分片标识,得到写集位图和/或读集位图。其中当前分片标识指的是当前区块链分片的分片标识。
36.步骤a5,将中间读写集与写集位图和读集位图中至少一种进行关联,得到交易读写集,获取交易读写集所在区块中的前序读写集。
37.在本发明一些实施例中,步骤a5包括:将中间读写集的合约状态数据与读集位图
进行关联,得到交易读集;将中间读写集的修改内容与写集位图进行关联,得到交易写集;联合交易读集和交易写集得到交易读写集,获取交易读写集对应的前序读写集。
38.在本发明一些实施例中,获取交易读写集对应的前序读写集可以是根据交易读写集的账户信息,获取账户信息对应的前序读写集,例如根据账户信息中账户地址获取账户地址对应的前序读写集;也可以根据交易读写集的区块,获取区块中的其他交易的读写集作为前序读写集。
39.本发明实施例,在交易读写集生成中,获取交易的已有读写集,根据交易的执行过程中读取/修改的键值对已有读写集中对应键值进行修改,得到交易读写集,通过位图记录交易执行过程中的读写操作,降低读写集的数据量,进而提高后续根据读写集进行冲突检测的效率。
40.在本发明一些实施例中,在交易读写集生成过程中,检测执行过程是否对合约状态数据进行读取/修改,并在检测到对合约状态数据进行读取/修改时,检测是否存在范围读取操作,在存在范围读取操作时,记录范围读取的起始键值和终止键值。具体地,包括:根据交易的执行过程获取待操作的键值;若待操作的键值是合约状态数据,则获取已有读写集的写集键值列表;将待操作的键值写入写集键值列表,得到新的写集键值列表,和/或获取键值列表的读取范围,以及获取读取范围的起始键值和终止键值;将新的写集键值列表和/或读取范围的起始键值和终止键值写入已有读写集,得到中间读写集。其中,读取范围指的是交易执行过程中读取合约状态数据的范围,起始键值和终止键值指的是合约状态数据对应的键值列表的状态键值。其中,键值列表是根据合约状态数据生成的;状态键值指的是合约账户的合约状态数据的键值,用于指示合约账户的合约状态数据是否被读取/修改。
41.在本发明一些实施例中,可以根据待操作的键值的值对合约状态数据进行修改,将待操作的键值写入写集键值列表,并按照状态键值的字典序对写集键值列表中各状态键值进行排序,得到新的写集键值列表;判断是否存在范围查询;若存在范围查询,则获取键值列表的读取范围;若不存在范围查询,则根据合约状态数据的读取数据,获取对应的状态键值,将状态键值记录到已有读集的合约状态数据中。
42.在本发明一些实施例中,将新的写集键值列表写入已有读写集的修改内容中,并将读取范围的起始键值和终止键值记录到已有读集的合约状态数据中,得到中间读写集。
43.本发明实施例,在交易读写集生成过程中,检测执行过程是否对合约状态数据进行读取/修改,并在检测到对合约状态数据进行读取/修改时,检测是否存在范围读取操作,在存在范围读取操作时,记录范围读取的起始键值和终止键值,通过在读集中记录读取范围,解决范围读取的问题,为后续根据读写集进行冲突检测,提供范围读取操作检测,进一步提高冲突检测的效率。
44.在本发明一些实施例中,为了进一步降低读写集的数据量,在交易读集生成过程中,检测交易写集中是否存在待操作的键值,如果交易写集中存在待操作的键值,则将写集位图作为读集位图,根据中间写集的修改内容生成中间读集,得到交易读集。
45.在本发明一些实施例中,为了进一步降低读写集的数据量,在交易读集生成过程中,获取交易执行中的账户信息,判断是否存在账户信息对应的账户;如果不存在账户地址对应的账户,则将账户信息对应的读集位图和写集位图中的元素都设为预设值。
46.在本发明一些实施例中,将前序读写集的前序写集位图与读集位图进行逻辑运
算,根据逻辑运算结果确定前序读写集与交易读写集之间是否存在交集,在前序读写集与交易读写集之间存在交集时,根据交集中键值的类型以及键值对应的分片标识,确定前序读写集与交易读写集之间是否存在冲突,具体地,如图2所示,图2是本发明实施例提供的基于区块链的交易冲突检测方法中进行冲突检测的一个实施例流程示意图,所示的进行冲突检测方法包括步骤201~203:步骤201,根据前序读写集的前序写集位图与交易读写集的读集位图的逻辑运算结果,确定交易读写集是否存在范围读取操作。
47.逻辑运算结果指的是读集位图中各元素与前序写集位图中各元素的逻辑运算结果。在本发明一些实施例中,逻辑运算结果可以是与运算的结果,例如,以账户对应键值是{a、b、c、d、e、f、g}为例进行说明,当前序写集为{a、c、d、g}时,对应的前序写集位图为{1011001},将读集位图{0100101}中各元素与前序写集位图中各元素进行与运算,得到逻辑运算结果{000001},即前序读写集和交易读写集之间存在交集。范围读取操作指的是交易的执行过程中是否对账户的合约状态数据进行了范围读取。
48.在本发明一些实施例中,可以判断读集位图是否存在运算结果为预设值的目标元素,在读集位图存在运算结果为预设值的目标元素时,根据目标元素对应的目标键值的类型,确定交易读写集是否存在范围读取操作,具体地,包括:获取前序读写集的前序写集位图,获取交易读写集的读集位图;对前序写集位图和读集位图进行逻辑运算,得到读集位图中各元素的运算结果;判断读集位图是否存在运算结果为预设值的目标元素;若读集位图存在运算结果为预设值的目标元素,则获取目标元素对应目标键值的类型,根据类型确定交易读写集是否存在范围读取操作。其中,逻辑运算可以是与运算;目标元素指的是读集位图与前序写集位图的交集中的元素。
49.在本发明一些实施例中,根据运算结果判断读集位图是否存在运算结果为1的目标元素。
50.在本发明一些实施例中,若读集位图存在运算结果为预设值的目标元素,说明交易读集与前序写集存在交集,则获取目标元素对应目标键值的类型,根据类型确定读写集是否存在范围读取操作。
51.在本发明一些实施例中,可以根据预设映射关系,获取目标元素对应目标键值的类型,根据类型确定读写集是否存在范围读取操作,具体地包括步骤b1~b3:步骤b1,若读集位图存在运算结果为预设值的目标元素,则获取目标元素,以及获取交易读写集中目标元素对应的目标键值。
52.在本发明一些实施例中,若读集位图存在运算结果为预设值的目标元素,则获取读集位图中目标元素,以及目标元素在读集位图中位置信息,根据预设的位置与键值的映射关系,获取位置信息对应的目标键值。其中,预设的位置与键值的映射关系用于指示读集位图中各元素位置与键值之间的对应关系,例如,以账户对应键值是{a、b、c、d、e、f、g}为例进行说明,当运算结果为{1001001}时,对应的目标元素为a、d和g。
53.步骤b2,根据预设映射关系,获取交易读写集中目标键值的类型。
54.映射关系用于指示键值与类型之间的对应关系,以账户对应键值是{a、b、c、d、e、f、g}为例进行说明,其中键值g对应的类型为合约状态数据,键值a、b、c、d、e、f对应的类型为账户基本数据,例如账户金额、账户地址等,需要说明的是,本发明实施例对映射关系不
作限定,可以根据实际应用场景中涉及到的键值类型对映射关系进行修改。
55.步骤b3,若类型为目标类型,则通过判断交易读写集中是否存在目标字段确定交易读写集是否存在范围读取操作。
56.在本发明一些实施例中,目标类型可以是合约状态数据。目标字段指的是范围字段。
57.在本发明一些实施例中,步骤b3包括:若目标键值的类型为合约状态数据,则查询交易读集中的合约状态数据中是否存在目标字段;如果交易读集中的合约状态数据中存在目标字段,说明交易读集对应的交易在执行过程中对合约状态数据进行范围查询,则判定交易读写集存在范围读取操作;如果交易读集中的合约状态数据中不存在目标字段,说明交易读集对应的交易在执行过程中没有对合约状态数据进行范围查询,则判定交易读写集不存在范围读取操作。
58.在本发明一些实施例中,为了提高合约状态数据冲突检测的准确性,还可以查询交易读集中的合约状态数据范围是否为空,确定交易读写集是否存在范围读取操作。具体地,若类型为目标类型,则查询交易读集中的合约状态数据,判断合约状态数据中的合约状态数据范围中是否为空;如果合约状态数据范围中为空,说明交易读集对应的交易在执行过程中没有对合约状态数据进行范围查询,则判定交易读写集不存在范围读取操作;如果合约状态数据范围中不为空,说明交易读集对应的交易在执行过程中对合约状态数据进行范围查询,则判定交易读写集存在范围读取操作。
59.在本发明一些实施例中,当类型不是目标类型时,即目标键值的类型是账户基本信息时,说明前序读写集和交易读写集都对账户基本信息进行了读取和修改,则判定交易读写集与前序读写集之间存在冲突。
60.本发明实施例根据预设映射关系,获取目标元素对应目标键值的类型,根据类型确定交易读写集是否存在范围读取操作,提供范围读取操作查询功能,并通过运算结果确定是否存在范围读取操作,提供便捷的范围读取操作查询方法,降低基于区块链的交易冲突检测方法的计算复杂度;并为便于后续选择存在范围读取操作时的冲突检测方法,提高冲突检测的适用性和灵活性。
61.在本发明一些实施例中,当交易读写集不存在范围读取操作时,可以根据目标元素的分片标识确定交易读写集与前序读写集之间是否存在冲突,具体地包括:若交易读写集不存在范围读取操作,则获取前序读写集的前序分片标识,以及交易读写集的分片标识;将前序分片标识与分片标识进行匹配,根据匹配结果确定交易读写集与前序读写集之间是否存在冲突。
62.在本发明一些实施例中,若交易读写集不存在范围读取操作,说明交易读写集对应的交易仅读取和/或修改了账户的合约状态数据,则获取交易读集中合约状态数据中状态键值,判断前序写集中的是否存在交易读集中的状态键值;如果前序写集中的不存在交易读集中的状态键值,说明交易读写集与前序读写集之间不存在冲突,则执行步骤103;如果前序写集中的存在交易读集中的状态键值,则获取前序读写集中该状态键值对应的前序分片标识,以及交易读写集中该状态键值对应的分片标识。
63.在本发明一些实施例中,可以通过计算前序分片标识与分片标识之间的相似程度对前序分片标识与分片标识进行匹配,根据匹配结果确定交易读写集与前序读写集之间是
否存在冲突。具体地,计算前序分片标识与分片标识之间的相似程度,将相似程度与预设程度阈值进行比较得到匹配结果;如果前序分片标识与分片标识匹配,则判定交易读写集与前序读写集之间不存在冲突;如果前序分片标识与分片标识不匹配,则判定交易读写集与前序读写集之间存在冲突。在本发明一些实施例中,将相似程度与预设程度阈值进行比较,如果相似程度大于或等于预设程度阈值,则判定前序分片标识与分片标识匹配,如果相似程度小于预设程度阈值,则判定前序分片标识与分片标识不匹配。
64.本发明实施例,当交易读写集不存在范围读取操作时,即交易读写集对应的交易仅读取和/或修改了账户的合约状态数据时,判断前序写集中是否存在交易读集中状态键值,并当前序写集中存在交易读集中状态键值时,根据该状态键值的分片标识判断交易读写集与前序读写集之间是否存在冲突;提高合约状态数据冲突检测的准确性。
65.在本发明一些实施例中,若读集位图不存在运算结果为预设值的目标元素,则将交易读写集与前序读写集进行合并,得到目标读写集。
66.步骤202,若交易读写集存在范围读取操作,则获取交易读写集与前序读写集的范围交集。
67.在本发明一些实施例中,步骤202包括:若交易读写集存在范围读取操作,则获取交易读写集中读取范围,以及获取前序读写集的前序写集中的写集键值列表;获取读取范围与写集键值列表之间的范围交集。具体地:若交易读写集存在范围读取操作,则获取范围读取操作的起始键值和终止键值;获取前序读写集的写集键值列表;获取写集键值列表中大于或等于起始键值、且小于或等于终止键值的目标状态键值,得到交易读写集与前序读写集的范围交集。
68.在本发明一些实施例中,若交易读写集存在范围读取操作,则读取交易读集中合约状态数据,获取合约状态数据范围中的目标字段,得到范围读取操作的起始键值和终止键值。
69.在本发明一些实施例中,写集键值列表是按照各状态键值的字典序排列的有序列表,因此可以通过获取写集键值列表中各状态键值的字典序在起始键值和终止键值之间的目标状态键值,得到交易读写集与前序读写集的范围交集。具体地,获取写集键值列表中字典序大于或等于起始键值的字典序、且小于或等于终止键值的字典序的目标状态键值,集合各目标状态键值得到交易读写集与前序读写集的范围交集。
70.步骤203,根据范围交集确定交易读写集与前序读写集之间是否存在冲突。
71.在本发明一些实施例中,可以通过判断范围交集是否为空集,确定交易读写集与前序读写集之间是否存在冲突,具体地,判断范围交集是否为空集;若范围交集不为空集,则获取范围交集中目标状态键值对应的前序分片标识;根据前序分片标识确定交易读写集与前序读写集之间是否存在冲突。
72.在本发明一些实施例中,如果范围交集为空集,说明读取范围与写集键值列表之间不存在交集,即前序写集和交易读集没有对相同的合约状态数据进行修改和读取,则判定交易读写集与前序读写集之间不存在冲突。
73.在本发明一些实施例中,根据前序分片标识确定交易读写集与前序读写集之间是否存在冲突可以是:获取起始键值或终止键值的分片标识,将前序分片标识与分片标识进行比较;如果前序分片标识与分片标识一致,则判定交易读写集与前序读写集之间不存在
冲突;如果前序分片标识与分片标识不一致,则判定交易读写集与前序读写集之间存在冲突。
74.本发明实施例将前序读写集的前序写集位图与读集位图进行逻辑运算,根据逻辑运算结果确定前序读写集与交易读写集之间是否存在交集,在前序读写集与交易读写集之间存在交集时,根据交集中键值的类型以及键值对应的分片标识,确定前序读写集与交易读写集之间是否存在冲突,解决范围读取的问题,降低冲突检测的复杂度,提高读写集冲突检测效率。
75.在本发明一些实施例中,当交易读写集与前序读写集之间不存在冲突时,按照预设的合并规则将交易读写集与前序读写集进行合并,得到目标读写集,具体地,如图3所示,图3是本发明实施例提供的基于区块链的交易冲突检测方法中合并读写集的一个实施例流程示意图,所示的合并读写集的方法包括步骤301~306:步骤301,若交易读写集与前序读写集之间不存在冲突,则对读集位图和前序读写集的前序读集位图进行逻辑运算,将运算结果作为新的读集位图。
76.在本发明一些实施例中,逻辑运算可以是或运算。
77.步骤302,获取新的读集位图中值为预设值对应的目标元素,以及获取前序读集位图中各目标元素对应的前序分片标识,获取读集位图中各目标元素对应的分片标识。
78.步骤303,获取前序读写集的前序读集和交易读写集的交易读集的并集,得到新的读集。
79.步骤304,根据前序分片标识和分片标识的匹配结果对新的并集中各目标元素对应的目标键值进行标记,将标记后的读集与新的读集位图进行关联得到目标读集。
80.在本发明一些实施例中,步骤304包括:将前序分片标识和分片标识进行匹配,如果前序分片标识和分片标识匹配,说明目标元素对应的目标键值在同一分区被读取,则将目标元素的分片标识以及对应的目标键值的分片标识标记为前序分片标识和分片标识中任意一个;如果前序分片标识和分片标识不匹配,说明目标元素对应的目标键值在不同的分区被读取,则将目标元素的分片标识对应的目标键值的分片标识标记为多区访问;将标记后的读集与新的读集位图进行关联得到目标读集。
81.在本发明一些实施例中,步骤304还包括:获取目标元素对应目标键值的类型,如果目标键值的类型为账户基本数据,则根据前序分片标识和分片标识的匹配结果确定新的位图中目标元素的分片标识;如果目标键值的类型为合约状态数据,则根据前序分片标识和分片标识的匹配结果对新的并集中各目标元素对应的目标键值进行标记。
82.步骤305,合并前序读写集的前序写集和交易读写集的交易写集,得到目标写集。
83.在本发明一些实施例中,合并写集包括:对前序读写集的前序写集位图和交易读写集的写集位图进行逻辑运算,将运算结果作为新的写集位图;获取新的写集位图中值为预设值对应的目标元素,以及获取读集位图中各目标元素对应的目标键值的类型;将交易读写集的交易写集更新前序读写集的前序写集,得到新的写集;根据目标键值的类型设置新的写集中目标键值的目标分片标识,得到目标写集。
84.在本发明一些实施例中,若交易读写集对应的交易的执行过程是删除,则将空集更新前序读写集的前序写集,得到新的写集。
85.在本发明一些实施例中,若目标键值的类型是合约状态数据,则获取交易写集中
目标键值的分片标识,获取前序写集中目标键值的前序分片标识;将分片标识与前序分片标识进行比较;如果分片标识与前序分片标识一致,则将分片标识与前序分片标识中任意一个设为目标键值的目标分片标识;如果分片标识与前序分片标识不一致,则将“多分区修改”字段设为目标键值的目标分片标识。
86.在本发明一些实施例中,若目标键值的类型是账户基本数据,则将写集位图中目标元素的分片标识作为目标键值的目标分片标识。
87.步骤306,联合目标写集和目标读集得到目标读写集。
88.在本发明一些实施例中,为了更好说明本发明实施例提供的基于区块链的交易冲突检测方法,以账户类型是合约账户、账户对应键值是{a、b、c、d、e、f、g}为例进行说明,其中g表示合约状态数据,提供一种基于区块链的交易冲突检测方法的应用场景,在基于区块链的交易冲突检测方法的应用场景中,前序交易tx1在分区shard-1上执行;tx1读集位图为{1011001},对应tx1读集addr1为{a、c、d、g},合约状态数据包括keyt;写集位图为{1100001},txl写集addr1为{a、b、g},合约状态数据包括了新建的keyx,keyy,有序key列表为{keyx,keyy}。
89.后序交易tx2在分区shard-2上执行,tx2读集位图为{001011},对应的tx2读集为addr1{c、f、g},合约状态数据包括了keyt和一个读取范围{start:keyu,end:keyw};写集位图为{0100001},对应的tx2写集addr1为{b、g},合约状态数据包括:新增keyw,有序的写集键值列表为{keyw}。应用场景中基于区块链的交易冲突检测方法包括步骤c1~c5:步骤c1,对tx1写集位图和tx2读集位图进行与运算,根据运算结果得到tx1写集与tx2读集之间的目标键值{g}。
90.步骤c2,遍历tx2读集中的合约状态数据:对于keyt,与tx1中的写集没有重叠,没有冲突;对于范围读取{start:keyu,end:keyw},与tx1中的写集没有重叠,没有冲突。
91.步骤c3,tx1读写集与tx2读写集之间没有冲突,则对tx1读写集与tx2读写集进行合并。
92.步骤c4,合并对tx1读集与tx2读集得到目标读集:result-readset:addr1{a(shard-1)、c(多分区访问)、d(shard-1)、f(shard-2)、g(多分区访问) };{g}所表示的合约状态数据包括:{keyt(shard-1),{start:keyu,end:keyw}(shard-2)}步骤c5,合并tx1写集与tx2写集得到目标写集:result-writeset:addr1{a(shard-1)、b(shard-2)、g(多分区访问)};{g}所表示的合约状态数据包括:{keyx(shard-1),keyy(shard-1),keyw(shard-2)},写集键值列表为{keyw,keyx,keyy}。
93.本发明实施例通过读写集的位图的逻辑运算结果进行交易冲突检测,降低读写集的体量,降低复杂度,提高冲突检测的效率;并且在冲突检测中提供范围读取操作检测,解决范围读取的问题,进一步提高冲突检测的效率。
94.为了更好实施本发明实施例提供的基于区块链的交易冲突检测方法,在基于区块链的交易冲突检测方法基础上,提供基于区块链的交易冲突检测装置,如图4所示,图4是本发明实施例提供的基于区块链的交易冲突检测装置的一个实施例结构示意图,所示的基于区块链的交易冲突检测装置包括:
读写集获取模块401,用于获取交易读写集,以及获取交易读写集对应的前序读写集;冲突检测模块402,用于根据前序读写集对交易读写集的读集位图进行逻辑运算,确定前序读写集与交易读写集之间是否存在冲突读集位图;读写集合并模块403,用于若前序读写集与交易读写集之间不存在冲突,则将前序读写集与交易读写集进行合并,得到目标读写集。
95.在本发明一些实施例中,冲突检测模块402包括:范围查询单元,用于根据前序读写集的前序写集位图与交易读写集的读集位图的逻辑运算结果,确定交易读写集是否存在范围读取操作;交集获取单元,若交易读写集存在范围读取操作,则获取交易读写集与前序读写集的范围交集;冲突检测单元,用于根据范围交集确定交易读写集与前序读写集之间是否存在冲突。
96.在本发明一些实施例中,范围查询单元包括:位图获取子单元,用于获取前序读写集的前序写集位图,获取交易读写集的读集位图;位图计算子单元,用于对前序写集位图和读集位图进行逻辑运算,得到读集位图中各元素的运算结果;判断子单元,用于判断读集位图是否存在运算结果为预设值的目标元素;范围查询子单元,用于若读集位图存在运算结果为预设值的目标元素,则获取目标元素对应目标键值的类型,根据类型确定交易读写集是否存在范围读取操作。
97.在本发明一些实施例中,范围查询子单元还用于:若读集位图存在运算结果为预设值的目标元素,则获取目标元素,以及获取交易读写集中目标元素对应的目标键值;根据预设映射关系,获取交易读写集中目标键值的类型;通过判断类型是否为目标类型,确定交易读写集是否存在范围读取操作。
98.在本发明一些实施例中,范围查询子单元还用于若交易读写集不存在范围读取操作,则获取前序读写集的前序分片标识,以及交易读写集的分片标识;将前序分片标识与分片标识进行匹配,根据匹配结果确定交易读写集与前序读写集之间是否存在冲突。
99.在本发明一些实施例中,交集获取单元包括:键值读取子单元,用于若交易读写集存在范围读取操作,则获取范围读取操作的起始键值和终止键值;列表获取子单元,用于获取前序读写集的写集键值列表;交集获取子单元,用于获取写集键值列表中大于或等于起始键值、且小于或等于终止键值的目标写集键值,得到交易读写集与前序读写集的范围交集。
100.在本发明一些实施例中,冲突检测单元包括:空集判断子单元,用于判断范围交集是否为空集;标识获取子单元,用于若范围交集不为空集,则获取范围交集中目标写集键值对应的前序分片标识;冲突检测子单元,用于根据前序分片标识确定交易读写集与前序读写集之间是否
存在冲突。
101.在本发明一些实施例中,读写集合并模块403包括:读集位图合并单元,用于若交易读写集与前序读写集之间不存在冲突,则对读集位图和前序读写集的前序读集位图进行逻辑运算,将读集位图的运算结果作为新的读集位图;分片标识单元,用于获取新的读集位图中值为预设值对应的目标元素,以及获取前序读集位图中各目标元素对应的前序分片标识,获取读集位图中各目标元素对应的分片标识;读集合并单元,用于获取前序读写集的前序读集和交易读写集的交易读集的并集,得到新的读集;读集标记单元,用于根据前序分片标识和分片标识的匹配结果对新的并集中各目标位对应的目标键值进行标记,将标记后的读集与新的读集位图进行关联得到目标读集;写集合并单元,用于合并前序读写集的前序写集和交易读写集的交易写集,得到目标写集;读写集合并单元,用于联合目标写集和目标读集得到交易的目标读写集。
102.在本发明一些实施例中,写集合并单元包括:写集位图子单元,用于对前序读写集的前序写集位图和交易读写集的写集位图进行逻辑运算,将运算结果作为新的写集位图;写集键值类型子单元,用于获取新的写集位图中值为预设值对应的目标元素,以及获取读集位图中各目标元素对应的目标键值的类型;写集合并子单元,用于获取前序读写集的前序写集和交易读写集的交易写集的并集,得到新的写集;写集分片标识子单元,用于根据目标键值的类型设置新的写集中目标键值的目标分片标识,得到目标写集。
103.在本发明一些实施例中,读写集创建模块401包括:获取单元,用于获取交易的已有读写集,以及获取已有读写集的已有读集位图和已有写集位图;读写集修改单元,用于根据交易的执行过程获取待操作的键值,对已有读写集中待操作的键值进行读取和/或修改操作,得到中间读写集;元素确定单元,用于获取已有读集位图中待操作的键值对应的读集待修改元素,和已有写集位图中待操作的键值对应的写集待修改元素;位图生成单元,用于根据交易的执行过程的操作类型,通过预设值对读集待修改元素和/或写集待修改元素,得到中间写集位图和/或中间读集位图;关联单元,用于将中间读写集与中间写集位图和中间读集位图中至少一种进行关联,得到交易读写集。
104.在本发明一些实施例中,读写集修改单元包括:待操作的键值获取子单元,用于根据交易的执行过程获取待操作的键值;合约状态数据子单元,用于若待操作的键值是合约状态数据,则获取已有读写集中写集键值列表;
范围查询子单元,用于将待操作的键值写入写集键值列表,得到新的写集键值列表,和/或获取键值列表的读取范围,以及获取读取范围的起始键值和终止键值;读写集修改子单元,用于将新的写集键值列表和/或读取范围的起始键值和终止键值写入已有读写集,得到中间读写集。
105.在本发明一些实施例中,读写集修改单元还用于:若交易的执行过程为删除操作,则根据交易对应账户的账户类型,通过预设的类型与键值的映射关系,获取账户类型对应的目标键值;将已有读集位图中目标键值对应的元素设为预设值。
106.本发明实施例通过读写集的位图的逻辑运算结果进行交易冲突检测,降低读写集的体量,降低复杂度,提高冲突检测的效率。
107.本发明实施例还提供一种基于区块链的交易冲突检测设备,如图5所示,其示出了本发明实施例所涉及的基于区块链的交易冲突检测设备的结构示意图,具体来讲:该基于区块链的交易冲突检测设备可以包括一个或者一个以上处理核心的处理器501、一个或一个以上计算机可读存储介质的存储器502、电源503和输入单元504等部件。本领域技术人员可以理解,图5中示出的基于区块链的交易冲突检测设备结构并不构成对基于区块链的交易冲突检测设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。具体在本实施例中,基于区块链的交易冲突检测设备中的处理器501会按照如下的指令,将一个或一个以上的应用程序的进程对应的可执行文件加载到存储器502中,并由处理器501来运行存储在存储器502中的应用程序,从而实现各种功能,如下:获取交易读写集,以及获取交易读写集对应的前序读写集;根据前序读写集对交易读写集的读集位图进行逻辑运算,确定前序读写集与交易读写集之间是否存在冲突;若前序读写集与交易读写集之间不存在冲突,则将前序读写集与交易读写集进行合并,得到目标读写集。
108.本领域普通技术人员可以理解,上述实施例的各种方法中的全部或部分步骤可以通过指令来完成,或通过指令控制相关的硬件来完成,该指令可以存储于一计算机可读存储介质中,并由处理器进行加载和执行。
109.为此,本发明实施例提供一种存储介质,其中存储有多条指令,该指令能够被处理器进行加载,以执行本发明实施例所提供的任一种基于区块链的交易冲突检测方法中的步骤。例如,该指令可以执行如下步骤:获取交易读写集,以及获取交易读写集对应的前序读写集;根据前序读写集对交易读写集的读集位图进行逻辑运算,确定前序读写集与交易读写集之间是否存在冲突;若前序读写集与交易读写集之间不存在冲突,则将前序读写集与交易读写集进行合并,得到目标读写集。
110.以上各个操作的具体实施可参见前面的实施例,在此不再赘述。
111.其中,该存储介质可以包括:只读存储器(rom,read only memory)、随机存取记忆体(ram,random access memory)、磁盘或光盘等。
112.由于该存储介质中所存储的指令,可以执行本发明实施例所提供的任一种基于区
块链的交易冲突检测方法中的步骤,因此,可以实现本发明实施例所提供的任一种基于区块链的交易冲突检测方法所能实现的有益效果,详见前面的实施例,在此不再赘述。
113.以上对本发明实施例所提供的一种基于区块链的交易冲突检测方法、装置、设备各存储介质进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献