System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技术实现步骤摘要】
本专利技术属于代码复用检测,具体涉及一种基于语法语义分离的智能合约复用分层检测方法。
技术介绍
1、代码复用指的是在软件开发过程中重复使用已经存在的代码,以避免重复编写相似的功能或逻辑;代码复用有助于提高代码的可维护性、可重用性和可扩展性,同时也可以减少开发成本和时间。智能合约是一种能够在区块链上运行的程序,通常由solidity(一种图灵完备语言)编写,与其他编程语言不同的是,智能合约每行代码的执行都需要消耗gas,即以太币。因此,开发智能合约时需要特别注意代码的简洁性,尽量减少冗余代码的存在;与此同时,在智能合约中,代码复用的需求比其他编程语言更为普遍。
2、当前,智能合约代码的复用已成为区块链开发中的一种趋势,智能合约的代码复用率高达79.2%,合理的智能合约代码复用能够促进开发者更加高效地构建智能合约,提高开发效率。然而,智能合约代码的复用也会带来一些潜在的弊端:一些存在漏洞的代码往往与正常代码被一同复制到新的智能合约中,导致漏洞传播,造成智能合约安全问题;大量的智能合约复用也会产生对于源代码的抄袭与侵权问题。
3、代码相似度检测是检查代码复用的有效技术手段之一,它能够实现对两段代码是否包含相同或相似的代码片段。在传统软件的代码相似度领域,代码复用通常被分为四个层次:t1即完全复用;t2即完全复用除空格、注释、变量或函数重命名等之外的代码;t3即t2基础上略有修改运行逻辑的代码;t4即实现方式不同但功能相同的代码。在智能合约领域,代码相似度检测技术被用来发现区块链平台中真实的代码克隆行为。
...【技术保护点】
1.一种基于语法语义分离的智能合约复用分层检测方法,包括如下步骤:
2.根据权利要求1所述的智能合约复用分层检测方法,其特征在于:所述步骤(1)的具体实现方式为:对于在智能合约代码复用检测领域尚没有标签良好的开源数据集的情况,通过搜集来自以太坊的真实合约代码,其源代码公开可用,通过对其是否相似和相似程度进行打标,构造得到合约级智能合约代码复用检测数据集;对收集到的合约代码按函数拆分,对函数进行匹配组合,并按上述方法再次进行打标,构造得到函数级智能合约代码复用检测数据集。
3.根据权利要求1所述的智能合约复用分层检测方法,其特征在于:所述步骤(2)的具体实现方式为:对于任一对待测的合约级智能合约代码C1和C2进行文本检测,分为T1级别文本检测和T2级别文本检测;所述T1级别文本检测即对C1和C2进行文本逐字检查,若检查后完全相同,则判定C1和C2为T1级别相似的复用代码;若上述检测判定为不相似的C1和C2,则再对其进行T2级别文本检测,即删除C1和C2中所有的非关键字符,并对C1和C2中的变量进行统一标识处理,将处理后的C1和C2再次进行文本逐字检查,若检查
4.根据权利要求3所述的智能合约复用分层检测方法,其特征在于:在T2级别文本检测过程中对C1和C2中的变量进行统一标识处理,具体实现方式为:即对于任一段待测的智能合约代码,根据以下表达式构造并初始化其数据字典Dictch,并对其中的变量名替换为虚拟变量名,得到统一标识处理后的代码;
5.根据权利要求1所述的智能合约复用分层检测方法,其特征在于:所述步骤(3)中对于未被标识为相似的智能合约代码C1和C2,首先对C1和C2的函数块进行拆分并序列化标识,分别得到函数块集合F1={fm∈C1|f1,f2,…,fm}和F2={vn∈C2|v1,v2,…,vn},m和n分别为C1和C2中函数块的个数,然后对每一个函数块构造抽象语法树AST,得到C1和C2的抽象语法树集合。
6.根据权利要求5所述的智能合约复用分层检测方法,其特征在于:所述步骤(3)中实现代码语法特征提取的具体方式为:对于任一AST,首先对其进行先序遍历后,删除AST不必要的修饰语句,仅保留token的类型信息,得到AST的先序遍历序列;然后使用word2vec编码技术对AST进行编码得到其中每个token的特征向量,对这些特征向量进行组合,得到每个函数块的特征矩阵其中p表示特征向量的维度,i表示AST中的token个数;进而通过对预先收集的包含对于智能合约运行起关键作用的标识符在内的关键节点进行增加权重处理,对特征矩阵中的向量进行加权平均池化,得到函数块fm的特征向量依此遍历F1和F2中的所有函数块,得到C1和C2各自的特征矩阵和最后对特征矩阵和分别进行平均池化,得到C1和C2各自的语法特征向量和
7.根据权利要求6所述的智能合约复用分层检测方法,其特征在于:所述步骤(4)中对于智能合约代码的任一函数块,删除其中影响编译的修饰器,然后编译后生成字节码,对各个函数块的字节码构造控制流图CFG和数据流图DFG,并结合程序的依赖关系,生成得到C1和C2的PDG集合。
8.根据权利要求7所述的智能合约复用分层检测方法,其特征在于:所述步骤(4)中实现代码语义特征提取的具体方式为:首先构造基于节点注意力机制的图神经网络模型,使用函数级智能合约代码复用检测数据集对该模型进行训练,模型输出函数级的特征向量对,使用全连接层得出相似性分数并计算损失函数;然后将函数块fm对应的PDG通过训练好的图神经网络模型,得到函数块fm的特征向量依此将F1和F2中每一函数块均通过模型进行检测,得到C1和C2各自的特征矩阵和最后对特征矩阵和分别进行平均池化,得到C1和C2各自的语义特征向量和
9.根据权利要求8所述的智能合约复用分层检测方法,其特征在于:所述步骤(5)的具体实现方式为:首先,将待测智能合约代码对的语法特征向量和以及语义特征向量和进行首尾拼接得到然后构造MLP模型,使用合约级智能合约代码复用检测数据集对该模型进行训练,通过标签和损失函数优化模型参数,设置为多分类任务;最后将tinput输入至训练好的MLP模型,得到最终的分类结果即判定待测智能合约代码对为T3、T4的相似结果或为T0的不相似结果。
...【技术特征摘要】
1.一种基于语法语义分离的智能合约复用分层检测方法,包括如下步骤:
2.根据权利要求1所述的智能合约复用分层检测方法,其特征在于:所述步骤(1)的具体实现方式为:对于在智能合约代码复用检测领域尚没有标签良好的开源数据集的情况,通过搜集来自以太坊的真实合约代码,其源代码公开可用,通过对其是否相似和相似程度进行打标,构造得到合约级智能合约代码复用检测数据集;对收集到的合约代码按函数拆分,对函数进行匹配组合,并按上述方法再次进行打标,构造得到函数级智能合约代码复用检测数据集。
3.根据权利要求1所述的智能合约复用分层检测方法,其特征在于:所述步骤(2)的具体实现方式为:对于任一对待测的合约级智能合约代码c1和c2进行文本检测,分为t1级别文本检测和t2级别文本检测;所述t1级别文本检测即对c1和c2进行文本逐字检查,若检查后完全相同,则判定c1和c2为t1级别相似的复用代码;若上述检测判定为不相似的c1和c2,则再对其进行t2级别文本检测,即删除c1和c2中所有的非关键字符,并对c1和c2中的变量进行统一标识处理,将处理后的c1和c2再次进行文本逐字检查,若检查后完全相同,则判定c1和c2为t2级别相似的复用代码。
4.根据权利要求3所述的智能合约复用分层检测方法,其特征在于:在t2级别文本检测过程中对c1和c2中的变量进行统一标识处理,具体实现方式为:即对于任一段待测的智能合约代码,根据以下表达式构造并初始化其数据字典dictch,并对其中的变量名替换为虚拟变量名,得到统一标识处理后的代码;
5.根据权利要求1所述的智能合约复用分层检测方法,其特征在于:所述步骤(3)中对于未被标识为相似的智能合约代码c1和c2,首先对c1和c2的函数块进行拆分并序列化标识,分别得到函数块集合f1={fm∈c1|f1,f2,…,fm}和f2={vn∈c2|v1,v2,…,vn},m和n分别为c1和c2中函数块的个数,然后对每一个函数块构造抽象语法树ast,得到c1和c2的抽象语法树集合。
6.根据权利要求5所述的智能合约复用分层检测方法,其特征在于:所述步骤(3)中实现代码语法特征...
【专利技术属性】
技术研发人员:胡承泽,刘振广,穆忠政,吴俊杰,王勋,
申请(专利权)人:浙江工商大学,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。