[发明专利]一种基于句法树匹配的智能合约相似性检测方法有效
| 申请号: | 202110569353.3 | 申请日: | 2021-05-25 |
| 公开(公告)号: | CN113177107B | 公开(公告)日: | 2022-05-27 |
| 发明(设计)人: | 刘振广;徐小俊;钱鹏;刘灵凤;武思凡 | 申请(专利权)人: | 浙江工商大学 |
| 主分类号: | G06F16/33 | 分类号: | G06F16/33;G06F40/211;G06F40/253;G06F40/30 |
| 代理公司: | 杭州天勤知识产权代理有限公司 33224 | 代理人: | 王琛 |
| 地址: | 310018 浙江*** | 国省代码: | 浙江;33 |
| 权利要求书: | 查看更多 | 说明书: | 查看更多 |
| 摘要: | |||
| 搜索关键词: | 一种 基于 句法 匹配 智能 合约 相似性 检测 方法 | ||
本发明公开了一种基于句法树匹配的智能合约相似性检测方法,其借助抽象语法树提取工具捕获智能合约语法信息,利用编码器的注意力机制获取句法树中各节点的语义信息,最终提取智能合约句法树的高语义特征向量,以特征向量为相似度计算函数的输入得到不同句法树之间的相似值,通过求平均值的方法得到两段智能合约源码的相似性检测结果。本发明有效地解决了以太坊智能合约相似性检测问题,相较于传统的代码克隆检测方法,本发明方法实现了更准确的检测效果,同时具备精确到代码行的相似性检测解释,具有良好的通用性和实用价值。
技术领域
本发明属于程序相似性检测技术领域,具体涉及一种基于句法树匹配的智能合约相似性检测方法。
背景技术
近年来,为了提高软件开发效率,越来越多的研发人员开始利用代码复用技术,例如复用现有的程序代码、复用通用的软件框架、复用常见的设计模式等。然而,盲目地复用现有的程序代码可能会造成很多问题,例如项目额外成本提高、软件易存在漏洞风险、容易侵犯软件著作权。
代码相似性检测是检查代码复用的有效技术之一,也称为代码克隆检测,能够判断两个程序是否存在相同或相似的代码片段。根据代码的相似程度不同,代码相似性检测一般分为四个层次:(1)完全相同的程序代码;(2)完全复用除空格、注释、变量或函数重命名等之外的代码;(3)类型(2)基础上略有修改的代码;(4)实现方式不同但语义或功能相同的代码。传统的检测方法通常只考虑语法层面的代码相似性检测,因此只能达到类型(1)和类型(2)的检测水平,现有的相似性检测方法结合词汇、语法、语义等多维度分析方法,实现了类型(3)和类型(4)层面的代码相似性检测。
智能合约相似性检测是针对区块链智能合约的代码克隆检测,智能合约是由图灵完备语言编写的程序代码,具有不可逆和不可变性,即合约部署后将不能进行修改和更新。若是某个智能合约存在漏洞,可能会导致其克隆的衍生合约也存在相应的漏洞,因此研究针对智能合约代码的相似性检测方法是有必要的,其能够有效地避免合约漏洞的传播,从而进一步提高智能合约的可靠性和安全性。
基于句法树匹配的方法能够有效地解决智能合约相似性检测问题,通过把智能合约代码转换为抽象语法树(AST),再将每个AST分割成多个句法树,得到相应的句法树序列,并利用相似性检测算法计算两个不同句法树的合约相似度矩阵;该方法不仅能实现高效精准地智能合约相似性检测,而且可以给出精确到代码行的相似性解释,具有良好的前瞻性和参考性。
发明内容
鉴于上述,本发明提供了一种基于句法树匹配的智能合约相似性检测方法,能够实现语义层面的智能合约源代码相似性检测。
一种基于句法树匹配的智能合约相似性检测方法,包括如下步骤:
(1)构建抽象语法树:针对以太坊智能合约为研究对象,利用语法树抽取工具从智能合约源码中提取抽象语法树;
(2)构建句法树序列:以智能合约代码段Z1和Z2为拟检测的合约克隆对,利用语法树抽取工具得到Z1和Z2对应的抽象语法树F1和F2,将F1和F2按照相应的语句进行拆分并通过先序遍历对应得到句法树序列S1和S2;
(3)句法树特征提取:构建基于Attention机制的句法树编码器,提取句法树序列S1和S2中每个句法树对应的特征向量,进一步得到句法树序列S1的特征向量集合以及句法树序列S2的特征向量集合其中n表示向量的维度,m和k分别表示S1和S2中的句法树个数;
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于浙江工商大学,未经浙江工商大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202110569353.3/2.html,转载请声明来源钻瓜专利网。
- 上一篇:一种VR康复训练系统
- 下一篇:一种耐热性低温固化环氧胶





