何时使用
适用于对**自动做市商(AMM)**类智能合约做专项安全审计:
- 审查 Uniswap / Curve / Balancer 等 AMM 及其分叉的
swap/mint/burn/ 流动性逻辑 - 识别闪电贷攻击、链上价格操纵、滑点 / 三明治、重入、整数运算缺陷
- 评估 DeFi 协议的经济安全(套利、价格参照可信度、储备一致性)
不该用(负边界):
- 非 EVM 链(Solana / Cairo / Move)合约
- 链下后端、撮合服务、数据分析等非合约代码
- 不含做市 / 兑换逻辑的通用合约(用通用 Solidity 审计技能即可)
- 用户只要功能实现,而非安全审查
心态: 像攻击者一样在单个区块内组合闪电贷 + 价格操纵 + 兑换,再像安全工程师一样按真实可利用性分级,不夸大、不臆造。
步骤
- 建模攻击面:列出未授权调用者、闪电贷借款人、抢跑 / 夹击的 MEV 机器人、低权限 LP。重点想清楚「同一区块内能否用借来的资金扭曲价格再反向获利」。
- 逐项审查六类漏洞(见下方指令清单)。
- 核对兑换不变量:确认
swap后恒定乘积 / 加权不变量(如x*y>=k)成立,含手续费后储备不被掏空。 - 风险分级:每项标注
Critical / High / Medium / Low / Informational,贴合实际可利用性。 - 输出报告:漏洞 → 等级 → 利用场景(攻击交易序列)→ 修复建议(含安全重构示例)。
指令
六类核心漏洞审查
- 闪电贷攻击:合约是否假定借入资金会在同块归还、并据此信任余额 / 价格?任何「读当前储备或现货价 → 做决策」的路径都要假设攻击者可在同块临时拉爆储备。
- 滑点保护缺失:
swap是否强制amountOutMin/amountInMax与deadline?用户是否会因价格在 mempool 中被夹击而成交在不利价位(三明治攻击)? - 重入攻击:外部调用(
transfer/ 回调 / hook)之后是否还读写状态?是否遵循 检查—生效—交互(CEI) 顺序,并加重入锁(mutex)? - 价格操纵:是否直接用单一池子的现货储备作价格参照?是否改用抗操纵的预言机(如 Chainlink)或 TWAP(时间加权均价)?
- 整数运算:是否有上溢 / 下溢、精度截断、除零、先除后乘导致的舍入流失?低于 0.8.0 是否用 SafeMath?
- 访问控制与角色分离:管理 / 铸造 / 暂停 / 参数调整是否做了权限与角色隔离?是否存在缺失修饰符的特权函数?
安全检查清单
- 所有价格参照来自抗操纵预言机或 TWAP,不直接信任现货储备
- 已考虑闪电贷(不信任同块内的瞬时价格 / 余额)
- 已实现滑点保护(
amountOutMin/amountInMax+deadline) - 遵循检查—生效—交互(CEI)模式
- 有重入保护(mutex / 状态检查 /
nonReentrant) - 处理整数上溢 / 下溢与精度
- 访问控制与角色分离到位
- 兑换后核心不变量(如
x*y>=k,含手续费)始终成立
行为约束
- 不臆造漏洞;未说明时不假设处于生产环境
- 优先协议层缓解(不变量校验、预言机、CEI),而非堆砌外部依赖
- 务实、精确;按可利用性分级,切勿一律 Critical
示例
Issue:用现货储备作价格参照,可被闪电贷操纵 Risk:Critical
问题:清算 / 兑换逻辑直接读取池子 reserve0 / reserve1 计算现货价。
利用:攻击者在同一区块借闪电贷 → 向池子大额单边兑换拉偏价格 → 触发以扭曲价成交的依赖逻辑 → 反向兑换并归还闪电贷套利。
修复:改用抗操纵价格源。
// 反例:易被同块操纵
uint price = reserve1 * 1e18 / reserve0;
// 推荐:链下预言机 / TWAP
uint price = oracle.latestAnswer(); // 如 Chainlink
// 或对池子累积价格取时间加权(TWAP),跨多区块取均值
Issue:swap 缺少滑点与 deadline 参数
Risk:High — 用户暴露于三明治攻击;应强制 amountOutMin 与 deadline。
注意事项
- 仅当合约确含做市 / 兑换逻辑时使用本技能;其余转交通用 Solidity 审计。
- 审计结论不能替代针对具体部署的形式化验证、模糊测试与专家复审。
- 现货储备价、
block.timestamp、单块内余额都不可信——始终从攻击者可在同块操纵的前提出发。 - 若缺少必要源码、依赖合约或成功标准,先停下向用户澄清。
互见
- requires:
solidity-security-auditor—— 通用 EVM / Solidity 安全审计是 AMM 专项审计的前置基础 - related:
defi-protocol-templates、blockchain-web3-developer - combines_with:
stride-threat-modeler—— 系统化建模 AMM 攻击面;semgrep-rule-creator、codeql-scanner—— 将检查清单沉淀为可复用静态扫描规则;false-positive-check—— 复核分级、剔除误报
采编自 affaan-m/everything-claude-code(MIT 许可)。