教程 搜索 / 构建项目 / 用 Claude Code Native + LingModel 双模型审计 Solidity 合约
📝 文字 ● 中级 更新于 2026-05-21

用 Claude Code Native + LingModel 双模型审计 Solidity 合约

一套双模型协作流程,让你的 Solidity 合约在送交真正审计之前达到应有的质量水平。用一个模型起草,用另一个审计,汇总发现,反复迭代。

为什么要双模型交叉审计

智能合约漏洞的代价格外惨重。Curve 因 Vyper 编译器未强化的只读重入漏洞损失 7300 万美元;Euler 因一种在该漏洞被利用之前甚至没有名字的捐款攻击模式损失 2 亿美元;Mango 因预言机操纵损失 1.14 亿美元——任何资深审计员看五分钟就能发现,但没人做过一次像样的审查。这个模式一再重演:漏洞在审查阶段本可发现,只是没人认真去找。

在 Spearbit、Trail of Bits、OpenZeppelin 或 Code4rena 竞赛中进行专业审计,费用在 2 万至 20 万美元之间,还要排队 2 到 6 周。你不应该带着明显的重入漏洞或缺失访问修饰符的代码去参加审计——竞赛中这会消耗你的保证金,私下委托则意味着你在花钱让资深审计员写你本该自己发现的问题报告。

本教程的工作流是在那次审计之前该做什么:把代码调整到让审计员专注于发现深层系统性风险的状态,而不是在修 onlyOwner 这类低级错误。

这不能替代真正的审计。 两个 AI 模型共享大部分训练数据,也共享大部分盲区。把它当作 CI 门控使用,而不是上主网前的最后一道防线。对于持有可观 TVL 的合约,你仍然需要花钱做人工审计。

为什么要用两个不同的模型

单个模型有盲区。训练数据不同的第二个模型有不同的盲区。两者交集——即两个模型都漏掉的 bug——比任何一个单独漏掉的要少得多。这就是整个方法的核心逻辑。

实践中每个模型各自的偏重:

你将学到什么

第一步:选择接入 Claude 的方式

1

三种有效路径——选你已有的那种

无论 Claude 以哪种方式完成身份验证,LingCode 的 Claude 标签页都会给你相同的智能体循环:

  • 自带 Anthropic API Key(BYOK) — 在 Settings → Providers → Anthropic 中粘贴你的密钥,按用量付费。
  • Claude Pro / Max OAuth — 用现有的 Claude.ai 订阅登录,适合已经按月向 Anthropic 付费的用户。
  • LingModel Pro 套餐 — 由 LingCode 统一管理,无需管理密钥,一个订阅搞定一切。

三种方式都驱动同一套基于 Node 的智能体桥接,支持完整工具调用、MCP 以及权限管控。从审计的角度来看,选哪种都无所谓——挑最省事的那条路即可。

第二步:将 LingModel 设为审计侧的提供商

2

登录即完成

如果你使用的是 LingModel Pro 套餐,它会自动出现在对话输入框的提供商切换器中,紧挨你的 Claude 选项。无需额外配置密钥。在 Settings(⌘,)→ Account 中可以确认套餐是否已激活。

LingModel 运行与 Claude Code Native 不同的模型系列,这正是审计阶段所需要的——以全新的先验知识阅读同一份合约。对一份 300 行合约做一次审计,LingModel 的费用远低于 0.1 美元。

第三步:起草合约

3

打开 Claude 对话,正常起草

两个不那么直观的习惯,能让审计步骤真正发挥作用:

  • 随合约一起编写 Foundry 测试文件。 如果测试明确表达了不变量,两个模型对不变量的推理都会更准确。用 forge init 初始化项目,合约放 src/,测试放 test/
  • 在合约顶部写一段威胁模型注释。 三行就够了:"本合约持有 X。威胁行为者是 Y。信任假设是 Z。"这样两个模型都有了可以攻击的目标。

一个 vault 合约的威胁模型注释示例:

// THREAT MODEL
// Holds: depositor USDC, up to ~$50M assumed TVL.
// Trust: governance multisig (5/9) can pause and rotate strategist;
//        no other admin path. Strategist is trusted to not collude.
// Adversaries: depositors trying to mint excess shares (4626 inflation);
//              MEV bots front-running deposit/withdraw; oracle griefers.

第四步:切换到 LingModel 进行审计

4

新对话、新提供商、零上下文共享

在对话输入框中点击提供商切换器,选择 LingModel。打开一个新对话——不要延续起草合约时的那个对话。与写代码的同一个模型共享上下文会让整个流程失去意义。审计阶段需要像审计员一样,冷眼阅读合约全文。

粘贴合约(以及 Foundry 测试,如果有的话),使用结构化提示词,而不是含糊地说"审计一下这个"。模糊的审计提示只会产生模糊的发现。

Audit this Solidity contract assuming it controls $10M on mainnet.
Check every item below. For each finding, give:
  - Severity (Critical / High / Medium / Low / Info)
  - File:line
  - One-paragraph explanation
  - Concrete fix or mitigation

CHECKLIST
1.  Reentrancy — including read-only reentrancy and cross-function
2.  Access control — modifier coverage, owner-can-rug surface area
3.  Integer arithmetic — even on 0.8.x, unchecked blocks and casting
4.  Oracle dependency — staleness checks, manipulation, fallback path
5.  Front-running — does any path need commit-reveal?
6.  Signature replay — chainId, nonce, deadline, domain separator
7.  Upgrade safety (if proxy) — initializer guards, storage gaps, __gap
8.  ERC-4626 share inflation — first-depositor griefing, virtual shares
9.  Gas griefing — unbounded loops over user-controlled input
10. Checks-Effects-Interactions discipline — order of state updates
11. External call return values — silent failure modes
12. Token assumptions — fee-on-transfer, rebasing, blocklist, ERC-777 hooks
13. Block.timestamp / block.number assumptions
14. tx.origin usage
15. Self-destruct / selfdestruct in dependencies

Output: a numbered findings list. Don't editorialize.

保存 LingModel 的发现。然后在 Claude 中开一个新对话,用相同的检查清单提示词和同一份合约再做一次。现在你有了两份独立的发现清单。

第五步:汇总与调和发现

5

两者都标记的 → 修复;只有一个标记的 → 认真思考;两者都没标记的 → 依然可能存在。

  • 两个模型都标记了同一发现。 修复它。在继续之前,先写一个 Foundry 测试——在未修复的版本上失败,在修复后通过。这个测试是你在未来重构时的保障。
  • 只有一个模型标记了某个发现。 这正是本流程体现价值的地方。单独标记的那个往往是对的——不同的先验知识能发现另一个遗漏的问题。仔细阅读该发现,写一个 Foundry 测试尝试复现,根据测试结果而非解释文字来做判断。
  • 检查清单中某个类别两者都没有标记。 这不代表你是安全的——只意味着两个模型共享同一个盲区。对于严重性为 Critical 的类别(重入、访问控制、预言机),无论如何都要自己针对未修复的假设写 Foundry 测试。

持续循环,直到两个模型在最新版本上只产生 Info 级别的发现。那就是你交付给真正审计员的状态——足够干净,让他们把时间花在系统性风险上,而不是在做分类整理。

第六步:将 writing-smart-contracts 技能作为第三轮扫描

6

Skill Gallery → 安装 writing-smart-contracts

社区技能 writing-smart-contracts 内置了审计师级别的 Solidity 启发式规则——重入模式、代理存储冲突、预言机/MEV 暴露面、ERC-20/721/1155/4626 代币、部署脚本常见坑——并推行 Foundry 测试优先的工作流。从 Skill Gallery 安装一次后,只要你在对话中提到 Solidity、Forge、Hardhat 或某个 EIP,它就会自动激活。

在完成 Claude / LingModel 调和之后,将它作为第三轮扫描运行。使用相同的检查清单提示词,但这次技能的启发式规则会引导模型关注那些裸模型容易略过的类别。这确实有增量价值——它不是第四个模型,而是为你当前使用的任何模型提供一个更锐利的系统提示。

本流程无法发现的问题

在上线之前,要对自己诚实地评估这些局限性。

之后:部署到 Sepolia,停止反复纠结

调和循环收敛之后,把合约部署到测试网,让它在那里运行一周。forge script ... --rpc-url $SEPOLIA_RPC --broadcast --verify,在 Tenderly 中检查存储布局,观察事件日志。真实的链上测试能发现静态审查无法发现的 gas griefing、MEV 暴露和集成失效问题。然后再预约审计。

一句话总结。 用 Claude 起草,用结构化检查清单在 LingModel 中审计,将发现与 Foundry 测试比对调和,用 writing-smart-contracts 技能做最终扫描,部署到 Sepolia 跑一周,再花钱做真正的审计。这套流程不能替代其中任何一个环节——它让每个环节都变得更省钱。

下一步去哪