基于冲突检测的区块链交易执行方法与流程

文档序号:31774996发布日期:2022-10-12 08:10阅读:70来源:国知局
基于冲突检测的区块链交易执行方法与流程

1.本发明属于区块链技术领域,更为具体地讲,涉及一种于冲突检测的区块链交易执行方法。


背景技术:

2.区块链是分布式数据存储、p2p网络、共识机制、加密算法、智能合约等计算机技术的新型应用模式,它具有去中心化、集体维护、可编程、无法篡改、安全可信、可追溯等特性。区块链基于这些特性构建了一种新型的信任机制,不仅能够解决传统中心化系统带来的信任问题,促进互不信任的个体之间的交易,还能有效帮助企业简化业务流程,降低企业成本。
3.区块链适应各业务场景是通过智能合约来完成,智能合约赋予了区块链可编程的能力。由于区块链机制的特殊性,区块链网络中的各个节点需要各自在本地执行交易,同时需要保证交易执行结果的一致。为了满足各节点数据的一致性,大部分区块链系统采用串行执行交易的方式来防止各节点产生不一致的执行结果,但串行执行效率较低,且无法充分利用现代计算机多核cpu的计算处理能力,造成系统资源的浪费,这也是传统区块链系统的性能瓶颈点之一。因此,需要考虑并行执行合约的方式来充分利用系统资源、提升系统性能。
4.并行执行带来的问题是无法保证关联交易执行结果的确定性。例如超级账本下的联盟链fabric,采用执行-排序-提交的架构,支持让交易并行执行,但在提交阶段会对各交易执行产生的读写集进行版本检查,来决定哪些交易可以提交,哪些交易被标记为无效。这样的方式虽然让交易并行执行,但在交易关联度高的场景下,大量交易会因为版本检查而被标记为无效,无效交易的处理会产生很多额外的开销。


技术实现要素:

5.本发明的目的在于克服现有技术的不足,提供一种基于冲突检测的区块链交易执行方法,区块链节点在执行交易前获取每笔交易的冲突项,构造出交易冲突图,区块链节点据此调度执行交易,选取部分交易进行并发执行,在避免交易执行发生冲突的同时充分利用系统资源,从而提升区块链系统的性能。
6.为了实现上述发明目的,本发明基于冲突检测的区块链交易执行方法包括以下步骤:
7.s1:对于当前区块链节点中部署的所有智能合约中的合约方法,根据各个合约方法的实际情况对其冲突类型进行标记,具体方法如下:
8.当智能合约的合约方法的冲突项可以从函数入参提取时,将该合约方法标记为静态冲突类型;
9.当智能合约的合约方法的冲突项不能从函数入参提取且方法时间复杂度小于预设阈值时,将该合约方法标记为动态冲突类型;
10.当智能合约的合约方法的冲突项不能从函数入参提取且方法时间复杂度大于预设阈值时,将该合约方法标记为全冲突类型。
11.s2:区块链节点对于当前所有待执行的交易进行冲突检测,具体方法如下:
12.当交易对应的智能合约方法为静态冲突类型,则根据交易的合约函数调用参数提取交易的冲突项,且将该交易标记为常规交易;
13.当交易对应的智能合约方法为动态冲突类型,则通过预执行交易实现动态冲突检测,且将该交易标记为常规交易,动态冲突检测的具体方法为:为交易创建私有上下文空间并进行预执行,交易预执行过程中读取到的数据或者要写入的数据都以key-value的形式记录在交易私有上下文空间中构成读写集,最终所记录的读写集中所有的key值即为交易的冲突项;
14.当交易对应的智能合约方法为全冲突类型,则将该交易标记为全冲突交易;
15.s3:对于当前区块中待执行的所有交易,首先获取其串行执行顺序并按此顺序对交易进行排序,得到交易序列{tx1,tx2,

,txn},txn表示串行执行中第n个执行的交易,n=1,2,

,n,n表示待执行交易数量;然后采用如下方法生成交易冲突图:
16.1)将每个交易作为交易冲突图中的一个节点,令串行执行序号n=1;
17.2)对于交易txn,判断是否n=1,如果是,进入步骤3),否则首先判断交易txn是否为全冲突交易,如果是,添加前n-1个交易txm指向交易txn的有向边,m=1,2,

,n-1,如果不是,则依次判断交易txn的冲突项和前n-1个交易txm的冲突项是否存在交集,如果存在,则说明交易txn和交易txm存在冲突,添加交易txm指向交易txn的有向边,如果不存在,则进一步判断前n-1个交易txm是否为全冲突交易,如果是添加交易txm指向交易txn的有向边,否则不作任何操作;
18.3)判断是否n<n,如果是,令n=n+1,返回步骤2),否则交易冲突图生成完毕;
19.s4:区块链节点根据交易冲突图调度执行交易,具体方法如下:从交易冲突图中选取入度为0的交易进行并发执行,执行完毕后将这些交易从交易冲突图中删除,在新的交易冲突图中重新选取入度为0的交易进行并发执行,执行完毕后将这些交易从当前交易冲突图中删除,以此类推,直到所有交易执行完毕。
20.本发明基于冲突检测的区块链交易执行方法,对于当前区块链节点中部署的所有智能合约,根据各个智能合约的实际情况将智能合约方法的冲突类型标记为静态冲突类型、动态冲突类型或全冲突类型,然后区块链节点对于当前所有待执行的交易,根据对应智能合约方法的冲突类型进行冲突检测,然后生成所有待执行交易的交易冲突图,根据交易冲突图调度执行交易。
21.本发明通过在交易执行前检测冲突项来获取交易间的关联关系,构建交易冲突图,能够合理选取部分交易进行并发执行,让相关联的交易串行执行,无关联的交易并发执行,避免交易冲突,保证各节点交易执行结果的一致性,同时又充分利用系统资源,从而提升区块链系统的性能。
附图说明
22.图1是本发明基于冲突检测的区块链交易执行方法的具体实施方式流程图;
23.图2是本实施例中交易信息图;
24.图3是本实施例中生成的交易冲突图;
25.图4是本实施例中调度执行交易过程中交易冲突图的变化过程图。
具体实施方式
26.下面结合附图对本发明的具体实施方式进行描述,以便本领域的技术人员更好地理解本发明。需要特别提醒注意的是,在以下的描述中,当已知功能和设计的详细描述也许会淡化本发明的主要内容时,这些描述在这里将被忽略。
27.实施例
28.图1是本发明基于冲突检测的区块链交易执行方法的具体实施方式流程图。如图1所示,本发明基于冲突检测的区块链交易执行方法的具体步骤包括:
29.s101:智能合约冲突类型标记:
30.区块链交易之间的冲突来自于对相同数据的修改,结合大部分区块链系统所使用的key-value(键值)数据模型,该模型下key值是数据的唯一标识,因此交易之间的冲突即是对相同的key值的修改。当交易所对应的合约方法较为简单,例如不涉及合约间调用,就可以直接采用静态冲突检测,利用函数、方法内部要对哪些数据进行读写操作一般来说均与函数、方法的入参有关联这一事实,合约开发者可以指定函数入参的哪几个参数与函数方法内部的读写有关。例如转账函数transfer(from string,to string,amount int),从函数的语义出发进行分析,transfer函数首先会读取from账户和to账户所对应的用户余额,然后在from账户和to账户之间完成对应amount金额的转账,最后更新from账户和to账户的余额,此时transfer函数入参处的第一个参数和第二个参数决定了函数内部要进行读写的key,也就是transfer函数的冲突项。通过这样的配置,可以在交易执行前静态地获取交易的冲突项。
31.静态冲突检测能够较为简便地获取简单合约方法的冲突项,但对于一些复杂的合约方法,则难以获取该方法所有的冲突项,合约间调用即是该场景之一。在区块链网络内,同时会有多个智能合约实例在运行,在一些场景下,需要在当前合约实例的方法中调用其他合约实例的方法,即合约实例a中的方法a会调用合约实例b中的方法b,这样的场景让合约之间产生了联系,在这种场景下,一次交易调用请求则是对应了一条合约调用链。合约调用链类似于在一个函数中调用另外一个函数,例如在函数a中会调用函数b,调用是以函数a为入口,在这种情况下,函数a以及函数b中要对数据操作的key可能不能直接从函数a的入参处体现出来,此时函数a要读写的数据的key可能是通过将入参传递给函数b调用后所产生的返回值,而函数b中要读写的key也有可能是在函数a中通过入参进行查询后所产生的结果。因此,涉及合约间调用且复杂度小于预设阈值的交易就需要采用动态冲突检测。
32.但是,当合约方法中存在合约间调用且复杂度大于预设阈值时,例如一些逻辑相对复杂且该方法属于计算型任务的交易,一方面,逻辑复杂就难以从入参处获取交易的冲突项,因此无法使用静态冲突检测;另一方面,计算型任务执行的过程极其耗时,采用动态检测的开销较大,因此也无法使用动态冲突检测。因此本发明直接将这种交易设置为全冲突交易,即该交易与前序交易以及后序交易都会产生冲突。在区块内交易执行时,设置为全冲突的交易必须等待所有前序交易执行完毕后才能开始执行,且其所有后序交易必须等待该全冲突交易执行完毕后才能开始执行,这样使得在并发调度下,全冲突交易执行在时间
线上的逻辑位置与串行执行一致,避免差错。
33.综上所述,本发明提出一种智能合约的冲突检测类型标记方法,即对于当前区块链节点中部署的所有智能合约的合约方法,根据各个合约方法的实际情况对其冲突类型进行标记,具体方法如下:
34.当智能合约的合约方法的冲突项可以从函数入参提取时,将该合约方法标记为静态冲突类型;
35.当智能合约的合约方法的冲突项不能从函数入参提取且方法时间复杂度小于预设阈值时,将该合约方法标记为动态冲突类型;
36.当智能合约的合约方法的冲突项不能从函数入参提取且方法时间复杂度大于预设阈值时,将该合约方法标记为全冲突类型。
37.s102:冲突检测:
38.区块链节点对于当前所有待执行的交易进行冲突检测,具体方法如下:
39.当交易对应的合约方法为静态冲突类型,则根据交易的合约函数调用参数提取交易的冲突项,且将该交易标记为常规交易。
40.当交易对应的合约方法为动态冲突类型,则通过预执行交易实现动态冲突检测,且将该交易标记为常规交易,动态冲突检测的具体方法为:为交易创建私有上下文空间并进行预执行,交易预执行过程中读取到的数据或者要写入的数据都以key-value的形式记录在交易私有上下文空间中构成读写集,最终所记录的读写集中所有的key值即为交易的冲突项。
41.由于预执行交易过程中对数据的读写都在私有空间中进行,不会对区块链节点的持久化账本数据产生影响,因此,一个区块内所有被配置为动态冲突检测的交易可以并发执行,其所产生的开销相对较小。
42.当交易对应的合约方法为全冲突类型,则将该交易标记为全冲突交易。
43.s103:生成交易冲突图:
44.对于当前区块中待执行的所有交易,首先获取其串行执行顺序并按此顺序对交易进行排序,得到交易序列{tx1,tx2,

,txn},txn表示串行执行中第n个执行的交易,n=1,2,

,n,n表示待执行交易数量。然后采用如下方法生成交易冲突图:
45.1)将每个交易视为交易冲突图中的一个节点,后序依次检查每个交易与前序交易的冲突项的交集,从而生成有向边,得到交易冲突图。令串行执行序号n=1。
46.2)对于交易txn,判断是否n=1,如果是,进入步骤3),否则首先判断交易txn是否为全冲突交易,如果是,添加前n-1个交易txm指向交易txn的有向边,m=1,2,

,n-1,如果不是,则依次判断交易txn的冲突项和前n-1个交易txm的冲突项是否存在交集,如果存在,则说明交易txn和交易txm存在冲突,添加交易txm指向交易txn的有向边,如果不存在,则进一步判断前n-1个交易txm是否为全冲突交易,如果是添加交易txm指向交易txn的有向边,否则不作任何操作。
47.3)判断是否n<n,如果是,令n=n+1,返回步骤2),否则交易冲突图生成完毕。
48.s104:调度执行交易:
49.区块链节点根据交易冲突图调度执行交易,具体方法如下:从交易冲突图中选取入度为0的交易进行并发执行,执行完毕后将这些交易从交易冲突图中删除,在新的交易冲
突图中重新选取入度为0的交易进行并发执行,执行完毕后将这些交易从当前交易冲突图中删除,以此类推,直到所有交易执行完毕。
50.为了更好地说明本发明的技术方案,下面以代币合约为例在本发明进行说明。本实施例的代币合约中设置了三个合约方法,分别是transfer1、transfer2、recharge,其中transfer1和transfer2都是以transfer(from string,to string,amount int)方法为原型,为便于描述,本实施例中transfer1方法标记为静态冲突类型,即指定了入参的第1个参数和第2个参数为交易的冲突项,transfer2方法标记为动态冲突类型,即需要通过预执行来获取交易的冲突项,recharge方法标记为全冲突类型,即会与所有的交易产生全冲突。
51.图2是本实施例中交易信息图。如图2所示,本实施例中区块内有七笔交易,分别是transfer1(a,b,10)、transfer2(b,c,20)、transfer1(d,e)、recharge(x,100)、transfer2(f,g,50)、transfer2(f,h,100)、transfer1(d,i,100)。在区块内交易执行前,tx1、tx3、tx7这三笔交易可以通过静态冲突检测的方式从调用参数处分别提取出冲突项,分别如下:tx1:a、b,tx3:d、e,tx7:d、i,tx2、tx5、tx6这三笔交易则通过预执行并记录读写集的方式分别提取出冲突项,分别如下tx2:b、c,tx5:f、g,tx6:f、h,,tx4直接被标记为全冲突。完成冲突检测后,即可构造交易冲突图,过程如下:
52.将每笔交易作为交易冲突图的一个节点。
53.对于交易tx2,其不是全冲突类型,读取其冲突项b、c,此时交易tx2与交易tx1的冲突项产生了交集b,因此添加交易tx1指向交易tx2的有向边。
54.对于交易tx3,其不是全冲突类型,读取其冲突项d、e,交易tx3与前序交易tx1和tx2的冲突项均无交集,且交易tx1和tx2均不是全冲突类型,无需添加有向边。
55.对于交易tx4,由于是全冲突,与前序所有交易产生冲突,即与交易tx1、tx2、tx3产生冲突,因此添加由交易tx1、tx2、tx3指向tx4的有向边。
56.对于交易tx5,其不是全冲突类型,读取其冲突项f、g,交易tx5与前序交易的冲突项无交集,但交易tx4被标记为全冲突,全冲突交易与其后续所有交易产生冲突,因此添加由交易tx4指向交易tx5的有向边。
57.对于交易tx6,其不是全冲突类型,读取其冲突项f、h,此时交易tx6和tx5的冲突项产生了交集f,因此添加一条由交易tx5指向交易tx6的有向边。同时由于交易tx4被标记为全冲突,因此添加一条由交易tx4指向交易tx6的有向边。
58.对于交易tx7,其不是全冲突类型,读取其冲突项d、i,此时交易tx7和交易tx3的冲突项产生了交集d,因此添加一条由交易tx3指向交易tx7的有向边。同时由于交易tx4被标记为全冲突,因此添加一条由交易tx4指向交易tx7的有向边。
59.图3是本实施例中生成的交易冲突图。如图3所示,交易冲突图中直观地展示了交易之间的冲突关系,因此可以根据交易冲突图调度执行交易。图4是本实施例中调度执行交易过程中交易冲突图的变化过程图。如图4所示,本实施例中调度执行交易的过程如下:
60.初始交易冲突图(a)中入度为0的交易为tx1和tx3,因此先并发执行交易tx1和tx3,执行完毕后将交易tx1和tx3从交易冲突图中删除,得到交易冲突图(b)。
61.交易冲突图(b)中入度为0的交易为tx2,因此执行交易tx2,执行完毕后将交易tx2从交易冲突图中删除,得到交易冲突图(c)。
62.交易冲突图(c)中入度为0的交易为tx4,因此执行交易tx4,执行完毕后将交易tx4
从交易冲突图中删除,得到交易冲突图(d)。
63.交易冲突图(d)中入度为0的交易为tx5和tx7,因此执行交易tx5和tx7,执行完毕后将交易tx5和tx7从交易冲突图中删除,得到交易冲突图(e)。
64.交易冲突图(e)中入度为0的交易为tx6,因此执行交易tx6,执行完毕后将交易tx6从交易冲突图中删除,交易冲突图为空,所有交易执行完毕。
65.尽管上面对本发明说明性的具体实施方式进行了描述,以便于本技术领域的技术人员理解本发明,但应该清楚,本发明不限于具体实施方式的范围,对本技术领域的普通技术人员来讲,只要各种变化在所附的权利要求限定和确定的本发明的精神和范围内,这些变化是显而易见的,一切利用本发明构思的发明创造均在保护之列。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1