用途:在编写或审计 Solidity AMM、流动性池合约时使用,重点覆盖持有代币余额的 swap、deposit、withdraw、mint、burn 流程,以及任何在份额或储备计算中使用 token.balanceOf(address(this)) 的合约,还包括 fee setter、pauser、预言机更新等管理员函数。
主要能力与必要用法:
- 重入防护:用户入口使用 nonReentrant,并遵循 CEI 顺序;存在加固库时不要手写 guard。
- 捐赠/通胀攻击:不直接用 token.balanceOf(address(this)) 做份额计算,改为内部记账 _totalAssets,并测量实际到账代币数量。
- 预言机操纵:现货价可被闪电贷操纵,优先使用 TWAP(如 IUniswapV3Pool.observe 与 TickMath.getSqrtRatioAtTick)。
- 滑点保护:每个兑换路径要求调用方传入 amountOutMin 和 deadline,并校验 block.timestamp <= deadline 与 amountOut >= amountOutMin。
- 安全储备数学:溢出风险下避免朴素 a*b/c,使用 FullMath.mulDiv。
- 管理员控制:使用 Ownable2Step 等,转移所有权需显式接受,所有特权路径都要加访问控制,并提供经过测试的紧急暂停。
安全检查清单涵盖:重入入口使用 nonReentrant、遵循 CEI、份额数学不依赖原始 balanceOf、ERC-20 使用 SafeERC20、存款测量实际到账、预言机使用 TWAP 或抗操纵来源、swap 要求 amountOutMin 与 deadline、溢出敏感的储备数学使用 mulDiv、管理员函数受访问控制、存在并测试紧急暂停、上线前运行静态分析与 fuzzing。
审计工具命令:pip install slither-analyzer;slither . --exclude-dependencies;echidna-test . --contract YourAMM --config echidna.yaml;forge test --fuzz-runs 10000。
限制:资料未提供支持的链、Solidity 版本、具体收费或价格信息,也未提供完整审计服务说明;上述内容仅用于编写与审计参考,不构成安全保证。