Slither 审计自己写的智能合约
作为区块链开发者,写完合约之后最重要的一步就是 检查代码有没有漏洞。一旦部署到链上出了问题,不仅修复麻烦,还可能直接造成资金损失。
Slither 是一款非常好用的自动化审计工具,可以帮你快速找出大部分常见风险。这篇文章专门讲 “只审计自己写的合约” 怎么做,流程简单、注意事项清楚,帮你高效定位风险。
****** Slither 使用速查表 ******
安装
pip3 install slither-analyzer
pip3 install solc-select # 可选切换 Solidity 版本
solc-select install 0.8.19
solc-select use 0.8.19运行审计
slither MyContract.sol # 单个合约
slither ./contracts # 文件夹下所有合约
slither MyContract.sol --exclude-dependencies # 排除第三方依赖导出报告
slither MyContract.sol --export json report.json
一、Slither 怎么安装?
Slither 基于 Python,所以需要先确认你电脑已经有 Python 3.8+ 和 pip。之后两步搞定:
1. 安装 Slither 核心工具:
pip3 install slither-analyzer
2.(可选)安装 Solidity 版本切换工具:
pip3 install solc-select
用来切换不同的 Solidity 编译器版本,避免版本不兼容导致分析失败。
二、审计自己写的合约,操作流程
1. 准备合约文件
把你写的合约(比如 MyContract.sol
)单独放在一个文件夹里,不要和第三方库混在一起,以免干扰结果。
同时确认合约开头的版本声明,比如:
pragma solidity ^0.8.19;
2. (可选)切换到匹配的 Solidity 版本
如果你的合约用了特定版本,最好用 solc-select
切换一下,避免兼容性问题:
solc-select install 0.8.19
solc-select use 0.8.19
3. 运行审计
进入存放合约的目录,运行:
slither MyContract.sol
如果有多个合约,就把它们放进一个文件夹(比如 contracts/
),再运行:
slither ./contracts
4. 查看结果
Slither 会在终端里输出漏洞清单,包括:
严重等级:Critical(致命)、High(高危)、Medium(中危)、Low(低危)
漏洞类型:比如 重入攻击、权限缺失、算术溢出等
定位行号:直接指向代码里的问题位置
三、审计时的注意事项
1. 排除第三方依赖
我们只关心自己写的逻辑。如果用了 OpenZeppelin 等库,可以这样排除:
slither MyContract.sol --exclude-dependencies
2. 业务逻辑要人工复查
Slither 很擅长找基础漏洞,但业务逻辑还是要你自己检查。
例如:Slither 提示函数没有访问控制,就要看看是不是忘了加 onlyOwner。
3. 不要把“优化建议”当漏洞
Slither 可能会提示:
- 未使用的变量
- 条件语句可简化
- Gas 优化空间
这些只是建议,如果是你设计上的考虑,可以忽略,重点盯住 Critica 和 High。
4. 保持工具版本最新
新 Solidity 语法(如 immutable
的改动)旧版 Slither 可能不支持,所以要定期更新:
pip3 install --upgrade slither-analyzer solc-select update
四、审计结果出来后怎么办?
优先修复 致命和高危漏洞(比如重入、权限绕过),修复后一定要再跑一遍 Slither。
中危、低危问题,看需求决定要不要改。
保存审计报告,方便以后对比:
slither MyContract.sol --export json report.json
总结
安装 Slither +(可选)solc-select
合约单独放目录,必要时切换编译器版本
slither MyContract.sol
一键跑审计重点关注:Critical / High 级别漏洞
结合业务逻辑,自己再核查
Slither 不能替代人工审计,但它能帮你在 最短时间发现最关键的问题,是开发者自检的必备工具。