智能合约的检测方法及装置制造方法及图纸

技术编号:37419413 阅读:13 留言:0更新日期:2023-04-30 09:42
本申请公开了一种智能合约的检测方法及装置。其中,该方法包括:获取智能合约对应的源代码;通过语法分析器解析源代码,并根据解析结果生成源代码对应的抽象语法树,其中,语法分析器用于对未经编译的任意版本的源代码进行语法分析;遍历抽象语法树中的多个树结点;根据预设条件检测多个树结点中是否包含有异常树结点,其中,预设条件用于表征异常函数代码的代码特征,异常函数代码为存在信息安全漏洞的函数代码,异常树结点对应的函数代码的代码特征与预设条件相匹配;在多个树结点中存在异常树结点的情况下,确定智能合约为存在信息安全风险的异常智能合约。本申请解决了现有技术中对智能合约的信息安全风险检测效率低的技术问题。技术问题。技术问题。

【技术实现步骤摘要】
智能合约的检测方法及装置


[0001]本申请涉及区块链
,具体而言,涉及一种智能合约的检测方法及装置。

技术介绍

[0002]智能合约是一段运行在公有链上,使用计算机语言编写的代码。其中,现有技术在检测智能合约是否存在信息安全风险时,通常采用的是人工审计合约代码的方式,通过人为地查找智能合约中是否存在危险函数代码,并分析危险函数代码的逻辑,从而判断智能合约是否存在信息安全漏洞。其中,危险函数代码为疑似存在信息安全风险的代码。
[0003]但是,现有技术中的智能合约检测方式需要消耗大量的人工成本和时间成本,从而导致智能合约的检测效率较低。
[0004]针对上述的问题,目前尚未提出有效的解决方案。

技术实现思路

[0005]本申请实施例提供了一种智能合约的检测方法及装置,以至少解决现有技术中对智能合约的信息安全风险检测效率低的技术问题。
[0006]根据本申请实施例的一个方面,提供了一种智能合约的检测方法,包括:获取智能合约对应的源代码;通过语法分析器解析源代码,并根据解析结果生成源代码对应的抽象语法树,其中,语法分析器用于对未经编译的任意版本的源代码进行语法分析;遍历抽象语法树中的多个树结点,其中,树结点用于表征智能合约中所包含的函数代码的定义信息;根据预设条件检测多个树结点中是否包含有异常树结点,其中,预设条件用于表征异常函数代码的代码特征,异常函数代码为存在信息安全漏洞的函数代码,异常树结点对应的函数代码的代码特征与预设条件相匹配;在多个树结点中存在异常树结点的情况下,确定智能合约为存在信息安全风险的异常智能合约。
[0007]进一步地,智能合约的检测方法还包括:在遍历抽象语法树中的多个树结点之后,确定每个树结点为一个函数定义对象,得到多个函数定义对象;获取每个函数定义对象中的函数体子对象,其中,函数体子对象中包含有至少一个语句对象,并且语句对象中包含有至少一个函数表达式;检测每个函数定义对象中所包含的所有函数表达式中是否包含有目标函数表达式,其中,目标函数表达式用于将智能合约中的余额资金转账给智能合约的调用者;将包含有目标函数表达式的函数定义对象确定为待核查定义对象,并将待核查定义对象所对应的树结点确定为待核查树结点。
[0008]进一步地,智能合约的检测方法还包括:在多个树结点中不存在待核查树结点的情况下,确定智能合约为不存在信息安全风险的正常智能合约;在多个树结点中存在待核查树结点的情况下,根据预设条件检测待核查树结点是否为异常树结点。
[0009]进一步地,智能合约的检测方法还包括:在待核查树结点同时满足以下所有预设子条件的情况下,确定待核查树结点为异常树结点,其中,预设子条件至少包括:第一预设子条件、第二预设子条件、第三预设子条件、第四预设子条件;第一预设子条件表征待核查
树结点对应的待核查定义对象中未包含有目标修饰符,其中,目标修饰符用于对智能合约的调用者重复访问进入待核查定义对象的次数进行限制;第二预设子条件表征待核查定义对象中的目标函数表达式所调用的地址变量能够被外部账户控制,其中,外部账户为不具有智能合约的控制权限的账户;第三预设子条件表征在待核查定义对象中的目标函数表达式被调用之后,待核查定义对象的状态存在更新;第四预设子条件表征待核查定义对象针对目标函数表达式未设置有小于预设阈值的目标资源消耗值,其中,目标资源消耗值用于表征目标函数表达式在运行时所需要的计算资源的最大值。
[0010]进一步地,智能合约的检测方法还包括:在多个树结点中存在待核查树结点的情况下,检测待核查树结点对应的待核查定义对象中是否包含有目标修饰符;在待核查定义对象中包含有目标修饰符的情况下,确定待核查树结点为正常树结点,智能合约为不存在信息安全风险的正常智能合约。
[0011]进一步地,智能合约的检测方法还包括:在多个树结点中存在待核查树结点的情况下,获取待核查定义对象中的目标函数表达式所调用的地址变量;检测地址变量是否能够被外部账户控制;在地址变量不能够外部账户控制的情况下,确定待核查树结点为正常树结点,智能合约为不存在信息安全风险的正常智能合约。
[0012]进一步地,智能合约的检测方法还包括:在多个树结点中存在待核查树结点的情况下,检测在待核查定义对象中的目标函数表达式被调用之后,待核查定义对象的状态是否存在更新;在待核查定义对象的状态不存在更新的情况下,确定待核查树结点为正常树结点,智能合约为不存在信息安全风险的正常智能合约。
[0013]进一步地,智能合约的检测方法还包括:在待核查定义对象中的目标函数表达式被调用之后,获取待核查定义对象生成的多个函数语句;检测多个函数语句中是否包含有目标函数语句,其中,目标函数语句为包含有赋值符号的赋值语句,并且目标函数语句的一侧为智能合约对应的状态变量;在多个函数语句中包含有目标函数语句的情况下,确定待核查定义对象的状态存在更新;在多个函数语句中未包含有目标函数语句的情况下,确定待核查定义对象的状态不存在更新。
[0014]进一步地,智能合约的检测方法还包括:在多个树结点中存在待核查树结点的情况下,检测待核查定义对象针对目标函数表达式是否设置有小于预设阈值的目标资源消耗值;在待核查定义对象针对目标函数表达式设置有目标资源消耗值的情况下,确定待核查树结点为正常树结点,智能合约为不存在信息安全风险的正常智能合约。
[0015]根据本申请实施例的另一方面,还提供了一种智能合约的检测装置,包括:获取模块,用于获取智能合约对应的源代码;解析模块,用于通过语法分析器解析源代码,并根据解析结果生成源代码对应的抽象语法树,其中,语法分析器用于对未经编译的任意版本的源代码进行语法分析;遍历模块,用于遍历抽象语法树中的多个树结点,其中,树结点用于表征智能合约中所包含的函数代码的定义信息;检测模块,用于根据预设条件检测多个树结点中是否包含有异常树结点,其中,预设条件用于表征异常函数代码的代码特征,异常函数代码为存在信息安全漏洞的函数代码,异常树结点对应的函数代码的代码特征与预设条件相匹配;确定模块,用于在多个树结点中存在异常树结点的情况下,确定智能合约为存在信息安全风险的异常智能合约。
[0016]在本申请中,采用将智能合约的源代码转换为抽象语法树,并结合预设条件检测
出抽象语法树中的异常树结点的方式,首先获取智能合约对应的源代码,然后通过语法分析器解析源代码,并根据解析结果生成源代码对应的抽象语法树,随后遍历抽象语法树中的多个树结点,并根据预设条件检测多个树结点中是否包含有异常树结点,最后在多个树结点中存在异常树结点的情况下,确定智能合约为存在信息安全风险的异常智能合约。其中,语法分析器用于对未经编译的任意版本的源代码进行语法分析,树结点用于表征智能合约中所包含的函数代码的定义信息,预设条件用于表征异常函数代码的代码特征,异常函数代码为存在信息安全漏洞的函数代码,异常树结点对应的函数代码的代码特征与预设条件相匹配。
[0017]由上述内容可知,本申请通过将智能合约源代码转化为抽象语本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种智能合约的检测方法,其特征在于,包括:获取智能合约对应的源代码;通过语法分析器解析所述源代码,并根据解析结果生成所述源代码对应的抽象语法树,其中,所述语法分析器用于对未经编译的任意版本的源代码进行语法分析;遍历所述抽象语法树中的多个树结点,其中,所述树结点用于表征所述智能合约中所包含的函数代码的定义信息;根据预设条件检测多个所述树结点中是否包含有异常树结点,其中,所述预设条件用于表征异常函数代码的代码特征,所述异常函数代码为存在信息安全漏洞的函数代码,所述异常树结点对应的函数代码的代码特征与所述预设条件相匹配;在多个所述树结点中存在所述异常树结点的情况下,确定所述智能合约为存在信息安全风险的异常智能合约。2.根据权利要求1所述的方法,其特征在于,在遍历所述抽象语法树中的多个树结点之后,所述方法还包括:确定每个所述树结点为一个函数定义对象,得到多个函数定义对象;获取每个函数定义对象中的函数体子对象,其中,所述函数体子对象中包含有至少一个语句对象,并且所述语句对象中包含有至少一个函数表达式;检测每个函数定义对象中所包含的所有函数表达式中是否包含有目标函数表达式,其中,所述目标函数表达式用于将所述智能合约中的余额资金转账给所述智能合约的调用者;将包含有所述目标函数表达式的函数定义对象确定为待核查定义对象,并将所述待核查定义对象所对应的树结点确定为待核查树结点。3.根据权利要求2所述的方法,其特征在于,根据预设条件检测多个所述树结点中是否包含有异常树结点,包括:在多个所述树结点中不存在所述待核查树结点的情况下,确定所述智能合约为不存在所述信息安全风险的正常智能合约;在多个所述树结点中存在所述待核查树结点的情况下,根据所述预设条件检测所述待核查树结点是否为所述异常树结点。4.根据权利要求3所述的方法,其特征在于,根据所述预设条件检测所述待核查树结点是否为所述异常树结点,包括:在所述待核查树结点同时满足以下所有预设子条件的情况下,确定所述待核查树结点为所述异常树结点,其中,所述预设子条件至少包括:第一预设子条件、第二预设子条件、第三预设子条件、第四预设子条件;所述第一预设子条件表征所述待核查树结点对应的待核查定义对象中未包含有目标修饰符,其中,所述目标修饰符用于对所述智能合约的调用者重复访问进入所述待核查定义对象的次数进行限制;所述第二预设子条件表征所述待核查定义对象中的目标函数表达式所调用的地址变量能够被外部账户控制,其中,所述外部账户为不具有所述智能合约的控制权限的账户;所述第三预设子条件表征在所述待核查定义对象中的目标函数表达式被调用之后,所述待核查定义对象的状态存在更新;
所述第四预设子条件表征所述待核查定义对象针对所述目标函数表达式未设置有小于预设阈值的目标资源消耗值,其中,所述目标资源消耗值用于表征所述目标函数表达式在运行时所需要的计算资源的最大值。5.根据权利要求4所述的方法,其特征在于,根据所述预设条件检测所述待核查树结点是否为所述异常树结点,包括:在多个所述树结点中存在所述待核查树结点的情况下,检测所述待核查树结点对应的待核查定义对象中是否包...

【专利技术属性】
技术研发人员:许冠行李文越何伊圣
申请(专利权)人:山石网科通信技术股份有限公司
类型:发明
国别省市:

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

1