[发明专利]一种基于句法树匹配的智能合约相似性检测方法有效
申请号: | 202110569353.3 | 申请日: | 2021-05-25 |
公开(公告)号: | CN113177107B | 公开(公告)日: | 2022-05-27 |
发明(设计)人: | 刘振广;徐小俊;钱鹏;刘灵凤;武思凡 | 申请(专利权)人: | 浙江工商大学 |
主分类号: | G06F16/33 | 分类号: | G06F16/33;G06F40/211;G06F40/253;G06F40/30 |
代理公司: | 杭州天勤知识产权代理有限公司 33224 | 代理人: | 王琛 |
地址: | 310018 浙江*** | 国省代码: | 浙江;33 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 基于 句法 匹配 智能 合约 相似性 检测 方法 | ||
1.一种基于句法树匹配的智能合约相似性检测方法,包括如下步骤:
(1)构建抽象语法树:针对以太坊智能合约为研究对象,利用语法树抽取工具从智能合约源码中提取抽象语法树;
(2)构建句法树序列:以智能合约代码段Z1和Z2为拟检测的合约克隆对,利用语法树抽取工具得到Z1和Z2对应的抽象语法树F1和F2,将F1和F2按照相应的语句进行拆分并通过先序遍历对应得到句法树序列S1和S2,具体实现方式为:首先,利用语法树抽取工具将智能合约代码段Z1和Z2提取为抽象语法树F1和F2;然后按照语句层次对F1和F2进行拆分,通过先序遍历得到句法树序列S1={fi∈F1|f1,...,fm}和S2={fj∈F2|f1,...,fk},其中每一棵句法树对应智能合约中的一条语句,即Z1和Z2分别含有m条和k条语句,i和j为自然数且1≤i≤m,1≤j≤k;
特别地,对于嵌套语句,需要定义一系列独立的节点Ns={block,body},其中block用于拆分嵌套语句的header和body,body用于方法声明;以节点s为根的句法树由s及其所有的后代节点D(s)组成,如果节点s和d之间存在一条路径通过n,即意味着节点d为包含于s的body中的某条语句,其中d∈D(s),n∈Ns;
(3)句法树特征提取:构建基于Attention机制的句法树编码器,提取句法树序列S1和S2中每个句法树对应的特征向量,进一步得到句法树序列S1的特征向量集合以及句法树序列S2的特征向量集合其中n表示向量的维度,m和k分别表示S1和S2中的句法树个数,具体实现方式如下:
首先,利用word2vec工具将需要编码的句法树中的所有节点转换为对应的向量表示,得到向量序列X={x1,...,xm},将X作为句法树编码器的输入,m为句法树中的节点数量;
然后,构建基于Attention的句法树编码器,学习序列X中各向量之间的语义关系,经过多层迭代学习,获得与输入向量序列X对应的语义化向量序列Y={y1,...,ym};
最后,将序列Y中的所有向量输入卷积池化层中,生成句法树对应的特征向量;
(4)相似性计算:利用皮尔逊相似性算法计算中各向量与中各向量之间的相似度,得到合约相似度矩阵Tm×k,其中Tm×k中第i行第j列元素值即表示S1中第i个句法树与S2中第j个句法树的相似度,具体实现方式为:将中的向量pi与中的向量pj代入以下相似度计算函数中,得到pi与pj的相似值tij即sim(pi,pj);
其中:pit表示向量pi中的第t个元素值,表示向量pi中的元素平均值,pjt表示向量pj中的第t个元素值,表示向量pj中的元素平均值,tij为矩阵Tm×k中的第i行第j列元素值,即表示代码段Z1对应句法树序列S1中的第i个句法树与代码段Z2对应句法树序列S2中的第j个句法树的相似度;
(5)合约相似性检测:设定阈值a1和a2,将矩阵Tm×k中高于a1的元素值保持不变,低于a1的元素值置零,计算矩阵中所有非零元素的平均值M,该平均值即为智能合约代码段Z1与Z2的相似度,进而比较M与a2的大小,判断合约代码段Z1与Z2是否相似,具体实现方式如下:
首先,设定阈值a1和a2,其中a1用于过滤合约相似度矩阵中相似值偏低的元素,a2用于判断两个代码段是否相似;
然后,将矩阵Tm×k中高于a1的元素值保持不变,低于a1的元素值置零,计算矩阵中所有非零元素的平均值M,该平均值即为智能合约代码段Z1与Z2的相似度;
最后,比较M与a2的大小,判断Z1与Z2的相似性:如果M≥a2,则表示Z1与Z2具有相似性,否则Z1与Z2不具有相似性;
(6)可解释性分析:若矩阵Tm×k中第i行第j列元素值为矩阵中的最大元素值,则代表S1中第i个句法树与S2中第j个句法树的相似度最高,进而即可定位合约代码段Z1与Z2存在相似性的具体代码行,具体实现方式为:首先,通过比较矩阵Tm×k中的元素值大小,可以锁定其中一些数值较高的元素,并得到这些元素在矩阵中的位置;具体地,矩阵Tm×k中第i行第j列的值即表示S1中的第i个句法树与S2中第j个句法树的相似度,若是该相似度值大于设定阈值,则表示智能合约代码段Z1中的第i个语句与Z2中的第j个语句高度相似,以此可以锁定至智能合约中具体的代码行,从而给出智能合约相似性检测的可解释性。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于浙江工商大学,未经浙江工商大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202110569353.3/1.html,转载请声明来源钻瓜专利网。
- 上一篇:一种VR康复训练系统
- 下一篇:一种耐热性低温固化环氧胶