【技术实现步骤摘要】
智能合约的检测方法及装置
[0001]本申请涉及区块链
,具体而言,涉及一种智能合约的检测方法及装置。
技术介绍
[0002]智能合约是一段运行在公有链上,使用计算机语言编写的代码。其中,现有技术在检测智能合约是否存在信息安全风险时,通常采用的是人工审计合约代码的方式,通过人为地查找智能合约中是否存在危险函数代码,并分析危险函数代码的逻辑,从而判断智能合约是否存在信息安全漏洞。其中,危险函数代码为疑似存在信息安全风险的代码。
[0003]但是,现有技术中的智能合约检测方式需要消耗大量的人工成本和时间成本,从而导致智能合约的检测效率较低。
[0004]针对上述的问题,目前尚未提出有效的解决方案。
技术实现思路
[0005]本申请实施例提供了一种智能合约的检测方法及装置,以至少解决现有技术中对智能合约的信息安全风险检测效率低的技术问题。
[0006]根据本申请实施例的一个方面,提供了一种智能合约的检测方法,包括:获取智能合约对应的源代码;通过语法分析器解析源代码,并根据解析结果生成源代码对应的抽象语法树,其中,语法分析器用于对未经编译的任意版本的源代码进行语法分析;遍历抽象语法树中的多个树结点,其中,树结点用于表征智能合约中所包含的函数代码的定义信息;根据预设条件检测多个树结点中是否包含有异常树结点,其中,预设条件用于表征异常函数代码的代码特征,异常函数代码为存在信息安全漏洞的函数代码,异常树结点对应的函数代码的代码特征与预设条件相匹配;在多个树结点中存在异常树结点的情况下, ...
【技术保护点】
【技术特征摘要】
1.一种智能合约的检测方法,其特征在于,包括:获取智能合约对应的源代码;通过语法分析器解析所述源代码,并根据解析结果生成所述源代码对应的抽象语法树,其中,所述语法分析器用于对未经编译的任意版本的源代码进行语法分析;遍历所述抽象语法树中的多个树结点,其中,所述树结点用于表征所述智能合约中所包含的函数代码的定义信息;根据预设条件检测多个所述树结点中是否包含有异常树结点,其中,所述预设条件用于表征异常函数代码的代码特征,所述异常函数代码为存在信息安全漏洞的函数代码,所述异常树结点对应的函数代码的代码特征与所述预设条件相匹配;在多个所述树结点中存在所述异常树结点的情况下,确定所述智能合约为存在信息安全风险的异常智能合约。2.根据权利要求1所述的方法,其特征在于,在遍历所述抽象语法树中的多个树结点之后,所述方法还包括:确定每个所述树结点为一个函数定义对象,得到多个函数定义对象;获取每个函数定义对象中的函数体子对象,其中,所述函数体子对象中包含有至少一个语句对象,并且所述语句对象中包含有至少一个函数表达式;检测每个函数定义对象中所包含的所有函数表达式中是否包含有目标函数表达式,其中,所述目标函数表达式用于将所述智能合约中的余额资金转账给所述智能合约的调用者;将包含有所述目标函数表达式的函数定义对象确定为待核查定义对象,并将所述待核查定义对象所对应的树结点确定为待核查树结点。3.根据权利要求2所述的方法,其特征在于,根据预设条件检测多个所述树结点中是否包含有异常树结点,包括:在多个所述树结点中不存在所述待核查树结点的情况下,确定所述智能合约为不存在所述信息安全风险的正常智能合约;在多个所述树结点中存在所述待核查树结点的情况下,根据所述预设条件检测所述待核查树结点是否为所述异常树结点。4.根据权利要求3所述的方法,其特征在于,根据所述预设条件检测所述待核查树结点是否为所述异常树结点,包括:在所述待核查树结点同时满足以下所有预设子条件的情况下,确定所述待核查树结点为所述异常树结点,其中,所述预设子条件至少包括:第一预设子条件、第二预设子条件、第三预设子条件、第四预设子条件;所述第一预设子条件表征所述待核查树结点对应的待核查定义对象中未包含有目标修饰符,其中,所述目标修饰符用于对所述智能合约的调用者重复访问进入所述待核查定义对象的次数进行限制;所述第二预设子条件表征所述待核查定义对象中的目标函数表达式所调用的地址变量能够被外部账户控制,其中,所述外部账户为不具有所述智能合约的控制权限的账户;所述第三预设子条件表征在所述待核查定义对象中的目标函数表达式被调用之后,所述待核查定义对象的状态存在更新;
所述第四预设子条件表征所述待核查定义对象针对所述目标函数表达式未设置有小于预设阈值的目标资源消耗值,其中,所述目标资源消耗值用于表征所述目标函数表达式在运行时所需要的计算资源的最大值。5.根据权利要求4所述的方法,其特征在于,根据所述预设条件检测所述待核查树结点是否为所述异常树结点,包括:在多个所述树结点中存在所述待核查树结点的情况下,检测所述待核查树结点对应的待核查定义对象中是否包...
【专利技术属性】
技术研发人员:许冠行,李文越,何伊圣,
申请(专利权)人:山石网科通信技术股份有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。