← 最新论文
💻 computer science

Zero-Shot Vulnerability Detection in Low-Resource Smart Contracts Through Solidity-Only Training

该论文提出了 Sol2Vy 框架,通过仅在 Solidity 数据上训练模型并利用跨语言知识迁移,成功实现了在缺乏标注数据的低资源 Vyper 智能合约上进行高效的漏洞检测,其性能显著优于现有方法。

原作者: Minghao Hu, Qiang Zeng, Lannan Luo

发布于 2026-03-24
📖 1 分钟阅读☕ 轻松阅读

原作者: Minghao Hu, Qiang Zeng, Lannan Luo

原始论文根据 CC0 1.0(http://creativecommons.org/publicdomain/zero/1.0/)发布到公有领域。 这是对下方论文的AI生成解释。它不是由作者撰写或认可的。如需技术准确性,请参阅原始论文。 阅读完整免责声明

这篇论文讲述了一个关于**“如何在不学习新语言的情况下,就能看懂另一种语言代码中的漏洞”**的聪明故事。

为了让你轻松理解,我们可以把智能合约(Smart Contracts)想象成**“自动执行的数字合同”,而漏洞就是这些合同里的“陷阱”**。

1. 背景:两个语言,一个难题

在区块链世界里,主要有两种写智能合约的语言:

  • Solidity(索利蒂): 就像**“英语”**。它是目前最流行、资料最全的语言。大家有很多现成的“找茬工具”(检测漏洞的模型),因为有很多标注好的“坏合同”样本可以用来训练这些工具。
  • Vyper(维普): 就像**“法语”**。它更安全、更简洁,但用的人少,资料也少。这就导致了一个大问题:我们想检测 Vyper 合同里的漏洞,但手里没有足够的“坏样本”来训练检测工具。这就好比你想教一个学生识别法语里的语法错误,但他从来没学过法语,也没见过法语错题集。

传统的做法是: 必须收集大量 Vyper 的坏样本,重新训练一个模型。但这太难了,因为 Vyper 的坏样本本身就很少。

2. 核心创意:Sol2Vy(从英语直接教法语)

这篇论文的作者提出了一个叫 Sol2Vy 的新框架。它的核心思想非常巧妙:“既然我们没法直接学法语,那就利用英语的知识,通过一种‘通用翻译’,直接去看法语合同有没有漏洞。”

这就好比:

  • 你有一个精通英语语法和逻辑的侦探(训练好的 Solidity 模型)。
  • 你遇到了一份法语合同,你想让侦探找出里面的逻辑漏洞。
  • 侦探不懂法语,但他懂**“逻辑”**(比如:先借钱再还钱、先转账再检查余额等)。
  • Sol2Vy 的作用就是帮侦探把法语合同**“翻译”成一种通用的逻辑语言**,让侦探能直接看出:“哦!这里有个逻辑陷阱,不管它是用英语还是法语写的,这个陷阱的本质是一样的!”

3. 它是如何做到的?(三步走战略)

作者设计了一个**“三步走”**的魔法流程:

第一步:学习“通用逻辑”(无监督学习)

  • 比喻: 就像让侦探去读大量的**“英语小说”“法语小说”,但不告诉他哪句是错的,只让他去理解这两本书在“讲故事的结构”“人物动作的逻辑”**上有什么共同点。
  • 技术实现: 他们把 Solidity 和 Vyper 的代码都转换成一种中间语言叫 SlithIR。这就像把英语和法语都翻译成一种**“世界语”**(一种只保留核心逻辑、去掉语言特有语法的代码)。
  • 关键技巧: 他们使用了一种叫 MMD(最大均值差异) 的技术,强行让模型认为:虽然英语和法语的单词不同,但表达“转账”这个动作的逻辑结构应该是一样的。这样,模型就学会了**“跨语言的通用逻辑”**,而不被具体的语言符号迷惑。

第二步:在英语上“练手”(有监督学习)

  • 比喻: 现在侦探已经掌握了“通用逻辑”。接下来,给他看大量的**“英语坏合同”**(标注好的漏洞样本),让他专门练习如何识别这些逻辑陷阱。
  • 关键点: 这时候,模型只接触英语的坏样本,完全没看过 Vyper 的坏样本。它学会了:“哦,原来‘先调用外部函数再更新余额’这种逻辑顺序,在英语里是漏洞。”

第三步:直接去看法语(零样本检测)

  • 比喻: 现在,把这份**“只学过英语逻辑”的侦探,直接扔进“法语合同”**的堆里。
  • 神奇之处: 因为第一步已经让侦探学会了“通用逻辑”,而第二步让他记住了“漏洞的逻辑特征”。所以,当他看到法语合同里出现同样的逻辑陷阱(比如先调用外部函数再更新余额)时,他不需要懂法语单词,就能直接识别出:“这里有个漏洞!”
  • 结果: 这就是**“零样本(Zero-Shot)”**检测——不需要任何法语的坏样本训练,就能直接检测法语合同。

4. 为什么这个方法很厉害?(实验结果)

作者做了很多实验,发现:

  1. 效果惊人: 这个只学过英语的模型,在检测法语(Vyper)漏洞时,准确率非常高,几乎和专门学过法语的模型一样好。
  2. 吊打旧方法: 以前的工具(像 Slither 或 Mythril)要么靠死记硬背规则(容易漏掉新花样),要么靠暴力穷举(速度慢得像蜗牛)。Sol2Vy 既快又准。
  3. 少样本也能用: 如果以后真的有一点点法语坏样本,稍微给模型“点拨”一下(Few-shot),效果还能更好。

5. 总结:一个生动的比喻

想象一下,Solidity 是**“中式烹饪”Vyper“法式烹饪”**。

  • 以前,你想找法式菜里的“毒蘑菇”(漏洞),必须专门请一个懂法餐的厨师来教,但市场上没有法餐的毒蘑菇样本,教不了。
  • Sol2Vy 的做法是:
    1. 先让厨师看大量的中餐和法餐的**“食材处理流程图”(SlithIR),让他明白“切菜”、“炒菜”、“调味”这些核心动作**在两种菜系里是一样的。
    2. 然后,给厨师看大量的**“中式毒菜”**(Solidity 漏洞),让他记住:“如果先放毒蘑菇再炒,就是错的。”
    3. 最后,端上一道**“法式菜”**。厨师虽然不懂法语菜单,但他一看处理流程:“哦,这里也是先放蘑菇再炒!”于是立刻大喊:“这道菜有毒!”

结论: 这篇论文通过“中间翻译”和“逻辑迁移”,让我们能够利用丰富的英语(Solidity)数据,直接保护稀缺的法语(Vyper)世界,解决了“没数据就没法训练”的难题。

您所在领域的论文太多了?

获取与您研究关键词匹配的最新论文每日摘要——附技术摘要,使用您的语言。

试用 Digest →