当前位置: 首页 > 专利查询>南开大学专利>正文

一种基于细粒度读写分析的智能合约交易快速执行方法技术

技术编号:38587268 阅读:11 留言:0更新日期:2023-08-26 23:28
本发明专利技术提供了一种基于细粒度读写分析的智能合约交易快速执行方法,于区块链技术领域,包括以下步骤:合约编译:在编译器中对智能合约进行编译,分析出智能合约中的每个函数中对状态变量进行的读写,合并读写项;以增量形式进行的热点状态读写识别为DWrite,处于低概率分支中的Read、Write、ReadWrite分别识别为LPRead、LPWrite和ReadLPWrite;交易分组;交易执行;判断是否执行冲突交易重执行:找出存在读写冲突的冲突交易,让针对某个状态变量进行修改操作的最早一笔交易生效,其余交易则在重新分组后重新执行。本发明专利技术将静态分析与动态执行相结合,提升交易执行并行度。提升交易执行并行度。提升交易执行并行度。

【技术实现步骤摘要】
一种基于细粒度读写分析的智能合约交易快速执行方法


[0001]本专利技术属于区块链
,特别涉及一种基于细粒度读写分析的智能合约交易快速执行方法。

技术介绍

[0002]智能合约是一种自动执行并记录事件的、部署在分布式数据库上的计算机程序,它最早由Nick Szabo提出,但直到区块链的出现才使得它的价值更加突出。在以太坊区块链引入智能合约之后,其被广泛研究与采用。以太坊上的智能合约是一种基于区块链的数字资产控制程序。并且,以太坊中专门设计了一种图灵完备的Solidity语言来编写智能合约。以太坊的本质是由交易驱动的状态机,它在一个状态执行一些交易后,会确定地转移到一个新的状态。如果我们想要修改永久存储在区块链上的数据,我们就需要调用智能合约中的函数来发起交易,从而通过函数来修改智能合约中的状态变量,进而将该修改更新到状态数据库中,从而达到修改永久存储在区块链上的数据的目的。
[0003]然而,以太坊的交易吞吐量目前仍非常低,当前大约为每秒17笔交易。这主要是由于一个区块中的所有交易都是在以太坊虚拟机上串行执行的。实际上,不止以太坊虚拟机,当前很多智能合约虚拟机对交易的执行都是串行的,显然这难以满足有高吞吐量的场景,并且阻碍区块链技术推广到其他更多的应用领域。该问题引起了学术界和工业界的关注,并且一系列的解决方案在近些年被提出。这些方法归纳起来主要包含三类,分别为分片、基于动态执行的交易并行执行、基于静态分析的交易并行执行。
[0004]分片是克服该问题的一个方法,通过分片,不但可以实现提升交易吞吐量的目的,还能够降低区块链网络中节点的通信、计算、存储量开销。但如果我们仅仅考虑分片,那么只能在不同智能合约或不同用户层面实现交易并行执行,粒度过粗。这会导致交易执行并行度的降低。
[0005]解决该问题的另一个方法是动态执行交易。该方法的思路是,不管交易之间是否有数据冲突,先将所有交易并行执行。如果在交易执行时检测到数据冲突,那么通过调度或回滚的方式来解决。但在交易冲突率较高的情况下,动态执行方案可能会导致大部分交易需要回滚后重新执行或交易失败,导致性能可能比此前更糟。
[0006]最后一个有效的方法是对合约进行静态分析,在智能合约虚拟机对交易执行前,根据静态分析结果对同一区块中的所有交易进行分组,不同的分组分派到不同的计算节点或线程中执行,通过这种方式来实现交易并行执行。但是当前静态分析的粒度仍然较粗,未能在智能合约编译器中充分获取合约函数中的读写信息。这常常导致在分组后一些组中的交易数量过多,而另一些分组中的交易数量过少。因此造成各个分组的执行时间相差较大。

技术实现思路

[0007]本专利技术针对现有技术中存在的技术问题,提供一种基于细粒度读写分析的智能合约交易快速执行方法,将静态分析与动态执行相结合,在智能合约编译器中对合约函数进
行更彻底的分析,目的是获取更加细粒度的读写信息,然后在区块链上利用更加细粒度的读写信息对交易进行分组。在这个过程中,使用读写合并规则合并合约函数中的读写项,并使用交易冲突处理方法对部分冲突交易实现动态执行。
[0008]本专利技术采用的技术方案是:一种基于细粒度读写分析的智能合约交易快速执行方法,包括以下步骤:
[0009]步骤1:合约编译:在编译器中对智能合约进行编译,分析出智能合约中的每个函数中对状态变量进行的读写,合并读写项,得到编译结果,编译结果包含合约字节码和ABI;
[0010]状态读写类型分别为:Read、Write、ReadWrite、DWrite、LPRead、LPWrite和ReadLPWrite,
[0011]其中,以增量形式进行的热点状态读写识别为DWrite,处于低概率分支中的Read、Write、ReadWrite分别识别为LPRead、LPWrite和ReadLPWrite;
[0012]步骤2:交易分组:借助交易本身携带的数据以及从被交易调用的智能合约的ABI中获取到的读写信息,一个区块中的所有交易被组织成有向无环图,根据有向无环图对所有交易进行分组;
[0013]步骤3:交易执行:每个分组由计算单元的一个线程执行,多个分组由多个线程并行执行;所有分组中的交易都执行完成后,检查是否存在读写冲突,若存在,执行步骤4;
[0014]步骤4:冲突交易重执行:找出存在读写冲突的冲突交易,让针对某个状态变量f进行修改操作的最早一笔交易生效,其余交易则在重新分组后分派到各个计算单元中重新执行。
[0015]进一步的,DWrite的识别:(1)增量形式赋值语句的左值和右值中都包含对某个状态变量的读写,并且该状态变量是非map类型;(2)状态变量是map类型,根据@hotspot注解识别。
[0016]进一步的,Dwrite的约束规则:
[0017](1)编译时约束:如果在某一合约函数中包含DWrite(f)和Read(f),且该Read(f)所在语句会影响函数的执行流程,那么DWrite(f)退化为ReadWrite(f);
[0018](2)分组时约束:如果当前区块中存在以下情况,在不同交易的读写集中包含DWrite(f)和Read(f)/Write(f)/ReadWrite(f),那么DWrite(f)退化为ReadWrite(f)。
[0019]进一步的,低概率分支的识别通过注解和判别规则共同完成。
[0020]进一步的,步骤1中,编译器首先判断智能合约的语句中是否存在对状态变量的读写;若存在,根据特征及注解推断出该语句中涉及的状态读写类型;所有被识别出的读写项在经过读写合并之后,生成到ABI中。
[0021]进一步的,步骤1中,读写项的合并规则为:
[0022][0023]其中,运算表示将两个读写操作合并成为一个读写操作,并且其满足交换律;f为状态变量;βm表示当前读写发生在分支m中;δ1和δ2表示当前函数中针对某个状态变量产生了两次增量,角标1和角标2用于区分这两次增量。
[0024]进一步的,步骤4中,冲突交易重执行的具体过程:1)获取到被执行的低概率读写对应的状态变量集合,并获取到这些状态读写对应的交易集合;2)分别将每个集合中时间戳最早的交易对状态的更新生效;3)对于各组剩余冲突交易,将写操作对应的交易放在有向无环图的根附近,读操作以及未执行的低概率写入操作对应的交易放到后面并行执行;4)将根据有向无环图重新生成的交易分组分派到不同计算单元执行;5)若重新执行后仍有
交易冲突,则将相应的冲突交易设置为执行失败。
[0025]进一步的,步骤4中,不同分组中的两笔交易在实际执行过程中出现:写入

读取某一状态变量f,或写入

写入某一状态变量f,则存在读写冲突,这两笔交易发生交易冲突,称为冲突交易。
[0026]与现有技术相比,本专利技术所具有的有益效果是:本专利技术从智能合约编译器中获取细粒度的读写信息,在区块链平台层利用这些读写信息对交易进行分组,从而提升交易本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于细粒度读写分析的智能合约交易快速执行方法,其特征在于,包括以下步骤:步骤1:合约编译:在编译器中对智能合约进行编译,分析出智能合约中的每个函数中对状态变量进行的读写,合并读写项,得到编译结果,编译结果包含合约字节码和ABI;状态读写类型分别为:Read、Write、ReadWrite、DWrite、LPRead、LPWrite和ReadLPWrite,其中,以增量形式进行的热点状态读写识别为DWrite,处于低概率分支中的Read、Write、ReadWrite分别识别为LPRead、LPWrite和ReadLPWrite;步骤2:交易分组:借助交易本身携带的数据以及从被交易调用的智能合约的ABI中获取到的读写信息,一个区块中的所有交易被组织成有向无环图,根据有向无环图对所有交易进行分组;步骤3:交易执行:每个分组由计算单元的一个线程执行,多个分组由多个线程并行执行;所有分组中的交易都执行完成后,检查是否存在读写冲突,若存在,执行步骤4;步骤4:冲突交易重执行:找出存在读写冲突的冲突交易,让针对某个状态变量f进行修改操作的最早一笔交易生效,其余交易则在重新分组后分派到各个计算单元中重新执行。2.如权利要求1所述的一种基于细粒度读写分析的智能合约交易快速执行方法,其特征在于,DWrite的识别:(1)增量形式赋值语句的左值和右值中都包含对某个状态变量的读写,并且该状态变量是非map类型;(2)状态变量是map类型,根据@hotspot注解识别。3.如权利要求1所述的一种基于细粒度读写分析的智能合约交易快速执行方法,其特征在于,Dwrite的约束规则:(1)编译时约束:如果在某一合约函数中包含DWrite(f)和Read(f),且该Read(f)所在语句会影响函数的执行流程,那么DWrite(f)退化为ReadWrite(f);(2)分组时约束:如果当前区块中存在以下情况,在不同交易的读写集中包含DWrite(f)和Read(f...

【专利技术属性】
技术研发人员:代素蓉赵猛卢冶
申请(专利权)人:南开大学
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1