Identifying and Characterizing Semantic Clones of Solidity Functions
本文提出了一种可扩展的方法,通过分析代码和注释来识别 Solidity 智能合约中的语义克隆,在探索结构设计替代方案并利用大语言模型填补无注释代码的文档空白时,实现了高精确率和召回率。
原始论文采用 CC BY 4.0 许可(http://creativecommons.org/licenses/by/4.0/)。 这是对下方论文的AI生成解释。它不是由作者撰写或认可的。如需技术准确性,请参阅原始论文。 阅读完整免责声明
想象一下智能合约(在以太坊等区块链上运行的数字协议)的世界就像一座巨大的公共图书馆。一旦一本书(合约)被写好并上架,它就永远无法被擦除或修改。由于书籍是公开的,作者们经常为了节省时间而从其他书中复制粘贴段落。这被称为“克隆”。
大多数时候,复制很容易被发现。如果你逐字复制一段文字,那显而易见。但如果有人用完全不同的词汇重写一段文字,改变句子结构,并替换掉几个同义词,但含义却完全相同呢?在编程世界中,这被称为语义克隆(或第 4 类克隆)。
本文旨在构建一位更优秀的“图书管理员”,以便在 Solidity(用于编写这些合约的语言)中发现这些隐藏的、经过改写的副本,因为复制糟糕的逻辑与复制良好的逻辑一样,都容易传播安全漏洞。
以下是他们工作的简要分解,使用了简单的类比:
1. 问题:“改写食谱”的陷阱
想象两位厨师在写“巧克力蛋糕”的食谱。
- 厨师 A 写道:“将面粉、糖和鸡蛋混合。在 350°F 下烘烤。”
- 厨师 B 写道:“将干性材料与湿性材料结合。放入 175°C 的烤箱中。”
对于寻找完全匹配项的计算机来说,这些看起来完全不同。但对于人类来说,它们是同一份食谱。在区块链世界中,如果厨师 A 的食谱存在隐藏缺陷(例如忘记检查烤箱是否预热),而厨师 B 在复制想法时没有注意到这个缺陷,那么整个厨房都将处于危险之中。
作者发现,现有的工具就像只寻找确切单词匹配的机器人。它们会错过这些“改写的食谱”。
2. 解决方案:阅读“厨师笔记”
研究人员意识到,虽然代码(配料和步骤)看起来可能不同,但注释(厨师写在食谱上方的笔记)往往以非常相似的方式解释意图。
- 类比:将代码视为动作,将注释视为解释这些动作正在做什么的旁白。
- 方法:他们构建了一个系统来比较两件事:
- 代码:检查代码是否不同(低相似度)。
- 注释:检查书面描述是否非常相似(高相似度)。
如果代码看起来不同,但旁白听起来一样,他们就会将其标记为“语义克隆”。
3. 结果:一位高度准确的侦探
他们在近300,000 个现代智能合约的大规模数据集上测试了这种方法。
- 成功率:当他们手动检查 1,155 对样本时,他们的方法总体上有**59%**是正确的。
- “同名”红利:如果函数具有相同的名称(例如都叫
transfer),准确率跃升至84%。 - 安全网:他们还检查了是否遗漏了任何内容。他们发现只遗漏了大约**3%**的真实克隆(召回率为 97%)。
他们发现,这些“改写的食谱”不仅仅是意外;它们通常是设计选择。开发人员重写它们是为了使代码更安全、节省“燃气”(运行合约的费用)或更好地组织代码。
4. 挑战:“沉默”的图书馆
他们发现的一个主要问题是,75% 的这些函数根本没有注释。这就像拥有一座图书馆,其中四分之三的书没有标题或摘要。如果没有注释,他们的“旁白”方法就无法工作。
5. 补救措施:"AI 抄写员”(大语言模型)
为了解决“沉默图书馆”的问题,他们使用**大语言模型(AI)**充当抄写员。
- 类比:如果一本书没有摘要,他们就请 AI 阅读代码并为其撰写摘要。
- 实验:他们将代码输入 AI,要求它撰写描述,然后使用他们的系统比较 AI 生成的描述。
- 结果:即使没有人工编写的笔记,AI 生成的摘要也使他们能够正确找到**75%**的隐藏克隆。
他们还测试了不同的“提示”(给 AI 的指令)。他们发现,要求 AI 提供简单、直接的摘要比要求提供复杂、结构化的报告效果更好。复杂的报告增加了太多“废话”,混淆了系统,而简单的摘要则保持了对核心含义的关注。
6. 为什么这很重要
作者总结道,这不仅仅是关于寻找重复项;而是关于寻找替代方案。
- 如果你是一名正在构建安全合约的开发人员,你不仅仅想要一种做事的方法。你想要看到其他人解决同一问题的所有不同方法。
- 通过找到这些语义克隆,开发人员可以在构建自己的合约之前,比较不同的“改写食谱”,看看哪一种更安全、更便宜或更高效。
简而言之:本文提出了一种新方法,通过比较意图(注释)而不仅仅是语法(代码)来发现代码中的“隐藏双胞胎”。当注释缺失时,他们利用 AI 编写注释,成功揭示了隐藏的设计替代方案,这些方案有助于使区块链合约更安全、更高效。
您所在领域的论文太多了?
获取与您研究关键词匹配的最新论文每日摘要——附技术摘要,使用您的语言。