一种智能合约验证方法、计算机存储介质技术

技术编号:27880946 阅读:22 留言:0更新日期:2021-03-31 01:18
本发明专利技术公开了一种智能合约验证方法、计算机存储介质,该智能合约验证方法包括:步骤1、根据智能合约得到控制流图,所述控制流图包括标记有初始标记的节点和若干所述节点之间的边,且所述节点为含有断言的节点时,所述节点还标记有断言,其中,所述节点包括非循环节点和循环节点;步骤2、基于预设顺序,根据所述节点的类型得到每个所述节点的不变量;步骤3、根据所述节点的不变量的断言隐含结果得到验证结果。本发明专利技术的验证方法可以验证智能合约的正确性。另外,本发明专利技术的验证方法对智能合约,适用面更广。

【技术实现步骤摘要】
一种智能合约验证方法、计算机存储介质
本专利技术属于智能合约
,具体涉及一种智能合约验证方法、计算机存储介质。
技术介绍
区块链是近年来发展迅速的研究领域,它首先由SatoshiNakamoto在比特币区块链中提出概念,其基于多种技术,如区块加密链、点对点通信、分布式系统等。比特币网络的出现使陌生人之间的金融交易在没有第三方权威的参与下成为可能。后来,进一步出现了以太坊平台,它是一个开源的有智能合约功能的公共区块链平台。此后,智能合约在金融机构和供应链等许多领域备受关注。智能合约是一种计算机化的交易协议,它执行智能合约的条款以满足用户的要求,例如投票和交易。智能合约可以被看作是一个计算机程序,可以在区块链上自定义交易执行逻辑,智能合约主要是用一种图灵完备的编程语言编写的,例如在以太坊中的solidity(一种契约型编程语言)。区块链的不可更改特性使得智能合约一旦部署到区块链上就无法更改。此外,solidity语言的一些语法特性跟其他计算及语言(如javascript)不太一样,例如,变量的存储性质和fallback(回退)函数的概念,即使一些开发者有使用传统编程语言的经验,也经常出错。因此,由于代码编写不健壮,导致存在大量的攻击,造成了巨大的经济损失。例如,TheDAO攻击导致当时大约相当于6000万美元的损失。攻击者在splitDAO函数中发现了一个漏洞,他们可以通过在单笔交易的fallback函数隐式循环地一次又一次地重复的取走以太币。因此在部署智能合约之前,验证其正确性是至关重要的。随着对智能合约攻击的不断增加,人们开发了一些工具来分析智能合约的正确性。例如,Luu等人为Solidity智能合约开发了一个名为Oyente(智能合约分析工具)的符号执行引擎,该引擎系统地分析智能合约中的各个函数,以识别漏洞。Nikolic等人开发了一个名为MAIAN的符号分析器,它可以在智能合约执行期间进行符号执行分析,分析智能合约字节码,以检查智能合约中的“自杀”、“挥霍”和“贪婪”等漏洞。然而,上述工作的重点是测试智能合约,而不是验证它们的正确性。例如,这些符号执行引擎通常在循环迭代或函数调用的数量上设置一个界限,目的是用生成的测试用例覆盖那些有边界的程序路径。目前,可用于验证智能合约的现有方法包括Securify、Zeus、SOLC-verify和VerX。前三种方法将Solidity程序转换为现有的中间语言(即Datalog、LLVM和Boogie),并重用现有的验证工具。这种方法有两个局限性。首先,由于验证设施不是为智能合约设计的,因此它们只能在智能合约的某些特定属性上发挥有限的作用。其次,这些方法是基于抽象解释的,而由于抽象方法和抽象域较粗略,往往会导致误报。特别的,Securify无法验证诸如溢出之类的数值属性;Zeus误报很严重,SOLC-verify路径覆盖率不高。VerX应用延迟谓词抽象(基于符号执行和抽象)来验证交易执行时智能合约的正确性。但是VerX不支持有fallback函数导致的隐含循环回调的情况,并且对于函数中的循环迭代需要设置边界。因此,提供一种能够适用于智能合约,且能够对智能合约准确进行验证的方法成为了亟待解决的问题。
技术实现思路
为了解决现有技术中存在的上述问题,本专利技术提供了一种智能合约验证方法、计算机存储介质。本专利技术要解决的技术问题通过以下技术方案实现:一种智能合约验证方法,包括:步骤1、根据智能合约得到控制流图,所述控制流图包括标记有初始标记的节点和若干所述节点之间的边,且所述节点为含有断言的节点时,所述节点还标记有断言,其中,所述节点包括非循环节点和循环节点;步骤2、基于预设顺序,根据所述节点的类型得到每个所述节点的不变量;步骤3、根据所述节点的不变量的断言隐含结果得到验证结果。在本专利技术的一个实施例中,所述步骤1包括:步骤1.1、获取所述智能合约;步骤1.2、将所述智能合约的源代码编译成字节码;步骤1.3、根据所述字节码得到所述控制流图。在本专利技术的一个实施例中,所述步骤2包括:在所述节点为非循环节点时,根据最强后置条件得到所述非循环节点的不变量;在所述节点为循环节点时,根据迭代方法得到所述循环节点的不变量。在本专利技术的一个实施例中,根据最强后置条件得到所述非循环节点的不变量,包括:根据当前所述非循环节点的父节点的不变量和所述父节点至当前所述非循环节点的边的命令得到当前所述非循环节点的不变量。在本专利技术的一个实施例中,根据迭代方法得到所述循环节点的不变量,包括:步骤2.21、随机生成若干组第一变量赋值数据,所述若干组第一变量赋值数据组成第一变量赋值集合;步骤2.22、基于所述控制流图,标记所述第一变量赋值数据以得到第二变量赋值数据;步骤2.23、基于所述第二变量赋值数据的标记,根据LinearArbitrary算法得到候选不变量;步骤2.24、根据所述循环节点的父节点验证所述候选不变量,若验证成功,则所述候选不变量为所述循环节点的不变量,若验证失败,则将生成变量赋值的反例添加至所述第一变量赋值集合得到第二变量赋值集合,重复步骤2.22至步骤2.24,直至得到所述循环节点的不变量生成结果。在本专利技术的一个实施例中,所述步骤2.22包括:步骤2.221、将所述若干组第一变量赋值数据依次输入至所述控制流图,从所述循环节点执行到终止,在执行期间,当再次访问所述循环节点时,将达到所述循环节点的第一变量赋值也添加到所述第一变量赋值集合中;步骤2.222、按照预设条件对所述第一变量赋值数据进行标记得到所述第二变量赋值数据,所述预设条件包括在执行期间不违反断言、在执行期间违反了断言和在执行期间证伪了断言。在本专利技术的一个实施例中,所述步骤2.24包括:步骤2.241、基于最强后置条件,根据所述循环节点的父节点得到所述循环节点的验证不变量;步骤2.242、判断所述循环节点的验证不变量是否能够推出所述候选不变量,若能推出,则验证成功,所述候选不变量为所述循环节点的不变量,若不能推出,则验证失败,将生成变量赋值的反例添加至所述第一变量赋值集合得到第二变量赋值集合,重复步骤2.22至步骤2.24,直至得到所述循环节点的不变量生成结果。在本专利技术的一个实施例中,当所述循环节点的不变量生成结果为未得到所述循环节点的不变量时,根据所述启发式算法得到所述循环节点的不变量。在本专利技术的一个实施例中,所述步骤3包括:检查所述控制流图的含有断言的节点的不变量是否隐含断言,若隐含,则所述智能合约验证成功,若不隐含,则所述智能合约验证失败。本专利技术的一个实施例还提供一种计算机存储介质,所述计算机存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现上述任一项实施例所述的方法步骤。本专利技术的有益效果:本专利技术的验证方法与传统的模糊测试和符号执行测试智能合约的方法不同,本专利技术的验证方法可以本文档来自技高网
...

【技术保护点】
1.一种智能合约验证方法,其特征在于,包括:/n步骤1、根据智能合约得到控制流图,所述控制流图包括标记有初始标记的节点和若干所述节点之间的边,且所述节点为含有断言的节点时,所述节点还标记有断言,其中,所述节点包括非循环节点和循环节点;/n步骤2、基于预设顺序,根据所述节点的类型得到每个所述节点的不变量;/n步骤3、根据所述节点的不变量的断言隐含结果得到验证结果。/n

【技术特征摘要】
1.一种智能合约验证方法,其特征在于,包括:
步骤1、根据智能合约得到控制流图,所述控制流图包括标记有初始标记的节点和若干所述节点之间的边,且所述节点为含有断言的节点时,所述节点还标记有断言,其中,所述节点包括非循环节点和循环节点;
步骤2、基于预设顺序,根据所述节点的类型得到每个所述节点的不变量;
步骤3、根据所述节点的不变量的断言隐含结果得到验证结果。


2.根据权利要求1所述的智能合约验证方法,其特征在于,所述步骤1包括:
步骤1.1、获取所述智能合约;
步骤1.2、将所述智能合约的源代码编译成字节码;
步骤1.3、根据所述字节码得到所述控制流图。


3.根据权利要求1所述的智能合约验证方法,其特征在于,所述步骤2包括:
在所述节点为非循环节点时,根据最强后置条件得到所述非循环节点的不变量;
在所述节点为循环节点时,根据迭代方法得到所述循环节点的不变量。


4.根据权利要求3所述的智能合约验证方法,其特征在于,根据最强后置条件得到所述非循环节点的不变量,包括:
根据当前所述非循环节点的父节点的不变量和所述父节点至当前所述非循环节点的边的命令得到当前所述非循环节点的不变量。


5.根据权利要求3所述的智能合约验证方法,其特征在于,根据迭代方法得到所述循环节点的不变量,包括:
步骤2.21、随机生成若干组第一变量赋值数据,所述若干组第一变量赋值数据组成第一变量赋值集合;
步骤2.22、基于所述控制流图,标记所述第一变量赋值数据以得到第二变量赋值数据;
步骤2.23、基于所述第二变量赋值数据的标记,根据LinearArbitrary算法得到候选不变量;
步骤2.24、根据所述循环节点的父节点验证所述候选不变量,若验证成功,则所述候选不变量为所述循环节点的不变量,若验证失败,则将生成变量赋值...

【专利技术属性】
技术研发人员:不公告发明人
申请(专利权)人:西安深信科创信息技术有限公司
类型:发明
国别省市:陕西;61

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

1