SuperAPI AI 工具集

defi-amm-security

安全与审计

查看项目

更新于 10-15 08:34

技能介绍

用途

DeFi AMM Security 是一份针对 Solidity AMM 合约、LP 金库与兑换函数的关键漏洞模式与加固实现清单,可作为「检查清单 + 模式库」使用。

适用时机包括:编写或审计 Solidity AMM 或流动性池合约;实现涉及代币余额的 swap、deposit、withdraw、mint、burn 流程;审查任何在份额或储备计算中使用 token.balanceOf(address(this)) 的合约;为 DeFi 协议添加费用设置、暂停、预言机更新等管理员函数。

使用时,应对每个用户入口点逐项对照下列类别,并优先采用加固示例而非自行手写变体。

主要能力与示例

重入与 CEI 顺序

不安全写法:先 transfer 再扣减 balances。

安全写法:引入 OpenZeppelin 的 ReentrancyGuard 与 SafeERC20,使用 nonReentrant 修饰符,先检查、先扣减,最后 safeTransfer。资料明确提示:存在加固库时不要自行编写保护逻辑。

捐赠或通胀攻击

直接使用 token.balanceOf(address(this)) 参与份额计算,会使攻击者可通过在预期路径之外向合约转账来操纵分母。

安全做法:维护内部记账,并测量实际收到的代币。示例中先记录转账前余额,safeTransferFrom 后再用差值计算 received,并更新 _totalAssets 与 totalShares。

预言机操纵

现货价格可被闪电贷操纵,应优先使用 TWAP。示例使用 IUniswapV3Pool 的 observe 与 TickMath.getSqrtRatioAtTick 获取 TWAP tick。

滑点保护

每条兑换路径都需要调用者提供滑点参数与截止时间。示例函数包含 amountOutMin 与 deadline,并校验 block.timestamp、amountOut 下限。

安全储备数学

当存在溢出风险时,避免朴素地使用 a * b / c,改用 Uniswap v3-core 的 FullMath.mulDiv。

管理员控制

使用 OpenZeppelin 的 Ownable2Step;所有权转移需显式接受;所有特权路径都要加访问控制,例如 setFee、pause 使用 onlyOwner。

安全检查清单

重入暴露入口使用 nonReentrant;遵守 CEI 顺序;份额数学不依赖原始 balanceOf(address(this));ERC-20 转账使用 SafeERC20;存款测量实际收到的代币;预言机读取使用 TWAP 或抗操纵来源;兑换要求 amountOutMin 与 deadline;对溢出敏感的储备数学使用 mulDiv 等安全原语;管理员函数有访问控制;存在并测试紧急暂停;上线前运行静态分析与模糊测试。

审计工具命令

pip install slither-analyzer
slither . --exclude-dependencies

echidna-test . --contract YourAMM --config echidna.yaml

forge test --fuzz-runs 10000

使用方式与执行安全

该技能中的 shell 命令属于本地审计示例,只应在可信检出或一次性沙箱中运行;不得将不可信的合约名、路径、RPC URL、私钥或用户提供的参数拼接到 shell 命令中。在安装工具或运行可能消耗大量本地或付费资源的长时间模糊测试、静态分析任务前,应先询问。绝不要在命令示例、日志或报告中包含秘密、私钥、助记词、API 令牌或主网签名凭证。

适用场景与限制

适用于 Solidity AMM、LP 金库与兑换流程的开发与安全审计,尤其适合需要系统化对照漏洞类别并采用成熟加固模式的团队。限制方面:本资料未提供具体收费、价格、平台支持范围或实际使用效果数据;示例代码需在具体项目中结合版本与依赖验证,不可直接视为完整审计结论。