我在十个微小的 Solidity 合约上测试了本地模型,并植入了如下漏洞:

  • withdraw 函数中的重入漏洞
  • 缺失访问修饰符
  • ERC4626 舍入误差
  • 错误的签名检查
  • 微小的逻辑漏洞

我通过 WSL2 上的 Ollama 运行了 7B(或更小)规模的 Qwen2.5-Coder 与 DeepSeek-Coder 进行对比测试。如果你使用的是 33B 模型,请忽略此项。

对于每个合约,我发出了三个提示词:

  • 通用的安全审查
  • 针对重入和访问控制的专项检查
  • 带有严重程度标签的结构化报告

指令遵循能力

Qwen 7B 在这一项上胜出。它几乎每次都能遵守严格的格式规则。DeepSeek 经常会添加额外的文本或忽略限制。当你将模型输出接入自动化流水线时,Qwen 的一致性至关重要——解析失败是毫无意义的。

专项检查

Qwen 能紧扣主题。问它关于重入的问题,它就会回答重入。DeepSeek 则会跑题到 Gas 优化或代码风格建议上,增加了噪音。

解释质量

Qwen 能清晰地阐述攻击序列,展示漏洞是如何被利用的。DeepSeek 提供的是通用的教科书式回答。两者都是正确的,但 Qwen 的细节有助于编写报告。

怀疑精神与幻觉

DeepSeek 会标记出更多问题,表现得像个“怀疑生成器”。它甚至会在干净的代码中凭空捏造问题。

相比之下,当代码没有漏洞时,Qwen 会保持沉默。而 DeepSeek 则会声称存在并不存在的漏洞。

误报会浪费几分钟时间;而漏掉漏洞则可能损失一切。我倾向于利用 DeepSeek 来发现值得调查的内容,但在自动化流程中,我更依赖 Qwen。

我的最终结论

模型规模比品牌更重要。1.5B 的模型无法通过推理解决多步漏洞,也无法遵守格式要求。

在 7B 规模下,两者都能处理基础缺陷,但对于复杂的业务逻辑,两者都无法取代人工审计师。把它们看作是分诊助手(triage assistants),而不是审计师。

我的配置:

  • Qwen 7B: 用于结构化审查和流水线的默认选择。
  • DeepSeek: 作为第二意见,用于捕捉 Qwen 遗漏的问题。
  • Qwen 1.5B: 仅用于快速、低风险的初步筛选。

尽可能购买你的硬件能运行的最大模型。然后再考虑品牌问题。

你更喜欢一个多疑的模型,还是一个精准的模型?

Source: https://dev.to/pavelespitia/qwen25-coder-vs-deepseek-coder-for-solidity-review-what-i-actually-see-locally-4jh8

Optional learning community: https://t.me/GyaanSetuAi