一种自动形式化验证智能合约业务属性的方法及系统与流程

文档序号:34811504发布日期:2023-07-19 13:20阅读:29来源:国知局
一种自动形式化验证智能合约业务属性的方法及系统与流程

本发明涉及区块链,更具体地说,它涉及一种自动形式化验证智能合约业务属性的方法及系统。


背景技术:

1、由于区块链不可篡改特性,一旦因自身设计的缺陷,导致智能合约遭受攻击,或将产生不可逆转的重大损失。考虑到智能合约通常代码量较小,计算密集型运算较少,如非线性公式运算,现有技术通常利用形式化验证方法可全覆盖程序路径的优势,使用形式化验证方法对智能合约的逻辑功能或安全属性进行验证,提前发现智能合约缺陷代码,及时修改问题代码,以起到防范于未然的作用。随着区块链技术在金融、政务等领域的逐渐产业化落地,区块链智能合约的业务逻辑呈现出多样化、复杂化的发展趋势。为满足业务需求,智能合约需要实现更复杂的逻辑,进行大量的计算密集型运算。

2、现有的智能合约形式化验证技术通常基于简单增量式探索策略,如公告号为cn108985073b、cn109063477b、cn108536445b、cn112286828b等中国专利中应用的广度、深度搜索算法,利用符号执行虚拟机对程序路径进行约束表达式提取并求解,但基于符号执行虚拟机提取的约束表达式变量类型通常与具体的智能合约执行虚拟机保持一致,通常是底层字节码虚拟机,例如使用位向量表示不同的机器整数类型或使用更多更复杂的字节码底层表达式表示一个等价的源码层逻辑,这些来自底层符号执行虚拟机的特征会极大限制符号求解器的求解能力,导致形式化验证引擎无法实现程序路径高覆盖度的目标,最终难以或无法在合理的时间内得到高精度的代码缺陷检测结果。此外,现有的智能合约形式化验证系统对高层业务逻辑的描述及验证能力支持不足,具体为:在形式化描述方面无法使用时序逻辑等表达能力强的逻辑语言简洁明了的描述业务属性规范,在形式化验证方面局限于单个函数逻辑细节,无法在一个合理有效的抽象粒度下对整个合约逻辑进行自动建模并验证合约高层业务属性规范,因单函数的过近似导致产生误报的可能,增加了智能合约安全分析审计人员的负担。

3、因此,如何研究设计一种能够克服上述缺陷的自动形式化验证智能合约业务属性的方法及系统是我们目前急需解决的问题。


技术实现思路

1、为解决现有技术中的不足,本发明的目的是提供一种自动形式化验证智能合约业务属性的方法及系统,在接近于源码的中间语言层构建程序控制流图,并利用数据流分析技术有效提取与业务属性相关的函数约束,有效解决了现有基于字节码等底层语言的符号执行虚拟机所构建的函数约束对符号求解器求解能力的限制问题,提高符号约束验证引擎的验证能力。

2、本发明的上述技术目的是通过以下技术方案得以实现的:

3、第一方面,提供了一种自动形式化验证智能合约业务属性的方法,包括以下步骤:

4、解析出智能合约所对应的业务属性规范文档中的每条属性,并以智能合约语言注释形式将属性嵌入到智能合约源代码中,生成含属性规范的智能合约源码抽象语法树;

5、将智能合约源码抽象语法树转化成可进行程序分析的中间语言代码;

6、依据中间语言代码构建相应的控制流图,并生成合约状态变量与除构造函数外的公有函数的依赖关系表,以及过滤掉与所选取的目标属性的状态变量无关的公有函数,得到公有函数集;

7、将所选取的目标属性的时序逻辑属性转化为语义等价的状态可达逻辑属性;

8、根据公有函数集查找未生成约束的函数,并依据中间语言代码的控制流图生成相应函数的函数约束,以及在需要建模的公有函数均已生成函数约束后将状态可达逻辑属性作为每个函数约束的前置假设条件和后置验证条件,形成逻辑公式;

9、对逻辑公式中的函数约束进行状态可达逻辑属性的可满足性约束求解,并在公有函数集中所有公有函数的任意路径成功执行都满足状态可达逻辑属性时,输出智能合约满足目标属性的第一结果;

10、对不满足状态可达逻辑属性的公有函数进行抽象行为验证,并在抽象行为验证不满足状态可达逻辑属性时生成违反属性的反例;

11、将第一结果、通过抽象行为验证的第二结果以及反例整理成验证结果后输出。

12、进一步的,所述智能合约所对应的业务属性规范文档由时序逻辑语言编写,用于描述智能合约状态变量相关的高层业务逻辑。

13、进一步的,所述对不满足状态可达逻辑属性的公有函数进行抽象行为验证的过程具体为:

14、通过抽取生成抽象谓词以形成抽象谓词域;

15、通过不动点迭代算法生成关于抽象谓词域的有限状态机;

16、在不动点抽象状态机上检查目标业务属性是否满足,如果满足则将目标业务属性通过验证消息输出到验证结果文档生成器,然后再回到目标属性迭代点选取下一条目标业务属性进行迭代验证,直到所有目标属性验证完毕;如果不满足,则生成违反属性的反例,反例包括函数调用序列及具体的参数值。

17、进一步的,所述抽取生成抽象谓词的过程具体为:

18、a.接收业务属性划归器的状态可达逻辑属性,从状态可达逻辑属性中抽取逻辑谓词;

19、b.接收函数约束生成器生成的函数约束,从函数约束中抽取只含合约状态变量和常量的逻辑谓词;

20、c.当a和b形成的谓词域无法推理目标业务属性时,将无法推理的谓词信息反馈给用户,用户根据验证需求添加逻辑谓词。

21、进一步的,所述通过不动点迭代算法生成关于抽象谓词域的有限状态机的过程具体为:

22、根据智能合约状态变量初始值从抽象谓词域中选取所有可满足状态,作为初始抽象可达状态,加入初始定义的抽象可达状态集;

23、进入外循环,外循环终止条件为:抽象可达状态集不再有新的元素增加;

24、在外循环体内:首先选取一个新的可达状态,然后进入内循环,内循环终止条件为:遍历完所有函数的所有路径;

25、在内循环体内:对当前遍历得到的函数路径对前置条件做可满足性求解,如果无解则进入下一次内循环;如果有解,则继续提取函数路径的执行前后的状态逻辑关系,然后通过可满足性约束求解将具体的符号关系映射到抽象域抽象谓词域,得到路径函数路径的一个可达抽象状态,加入抽象可达状态集,进入下一次内循环迭代。

26、进一步的,所述反例包括函数调用序列和参数值。

27、第二方面,提供了一种自动形式化验证智能合约业务属性的系统,包括:

28、源码建模器,用于解析出智能合约所对应的业务属性规范文档中的每条属性,并以智能合约语言注释形式将属性嵌入到智能合约源代码中,生成含属性规范的智能合约源码抽象语法树;

29、中间语言生成器,用于将智能合约源码抽象语法树转化成可进行程序分析的中间语言代码;

30、数据流分析器,用于依据中间语言代码构建相应的控制流图,并生成合约状态变量与除构造函数外的公有函数的依赖关系表,以及过滤掉与所选取的目标属性的状态变量无关的公有函数,得到公有函数集;

31、业务属性划归器,用于将所选取的目标属性的时序逻辑属性转化为语义等价的状态可达逻辑属性;

32、函数约束生成器,用于根据公有函数集查找未生成约束的函数,并依据中间语言代码的控制流图生成相应函数的函数约束,以及在需要建模的公有函数均已生成函数约束后将状态可达逻辑属性作为每个函数约束的前置假设条件和后置验证条件,形成逻辑公式;

33、符号约束求解器,用于对逻辑公式中的函数约束进行状态可达逻辑属性的可满足性约束求解,并在公有函数集中所有公有函数的任意路径成功执行都满足状态可达逻辑属性时,输出智能合约满足目标属性的第一结果;

34、抽象行为分析模块,用于对不满足状态可达逻辑属性的公有函数进行抽象行为验证,并在抽象行为验证不满足状态可达逻辑属性时生成违反属性的反例;

35、验证结果文档生成器,用于将第一结果、通过抽象行为验证的第二结果以及反例整理成验证结果后输出。

36、进一步的,所述抽象行为分析模块包括:

37、抽象谓词生成器,用于通过抽取生成抽象谓词以形成抽象谓词域;

38、可达状态不动点生成器,用于通过不动点迭代算法生成关于抽象谓词域的有限状态机;

39、抽象行为分析器,用于在不动点抽象状态机上检查目标业务属性是否满足,如果满足则将目标业务属性通过验证消息输出到验证结果文档生成器,然后再回到目标属性迭代点选取下一条目标业务属性进行迭代验证,直到所有目标属性验证完毕;如果不满足,则生成违反属性的反例,反例包括函数调用序列及具体的参数值。

40、第二方面,提供了一种计算机终端,包含存储器、处理器及存储在存储器并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如第一方面中任意一项所述的一种自动形式化验证智能合约业务属性的方法。

41、第三方面,提供了一种计算机可读介质,其上存储有计算机程序,所述计算机程序被处理器执行可实现如第一方面中任意一项所述的一种自动形式化验证智能合约业务属性的方法。

42、与现有技术相比,本发明具有以下有益效果:

43、1、本发明提供的一种自动形式化验证智能合约业务属性的方法,在接近于源码的中间语言层构建程序控制流图,并利用数据流分析技术有效提取与业务属性相关的函数约束,有效解决了现有基于字节码等底层语言的符号执行虚拟机所构建的函数约束对符号求解器求解能力的限制问题,提高符号约束验证引擎的验证能力;

44、2、本发明针对现有解决方案因单函数的过近似(over-approximation)符号约束求解而导致的误报问题,通过谓词抽象技术对整个合约逻辑进行自动建模并做进一步验证,提高了验证准确度。

45、3、本发明通过对高效符号约束生成验证技术与谓词抽象技术的有效结合,该发明可以支持使用时序逻辑等表达能力强的逻辑语言简洁明了的描述业务属性规范,并进行高效准确的形式化验证。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1