当前位置: 首页 > news >正文

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

四、审计结果出来后怎么办?

  1. 优先修复 致命和高危漏洞(比如重入、权限绕过),修复后一定要再跑一遍 Slither。

  2. 中危、低危问题,看需求决定要不要改。

  3. 保存审计报告,方便以后对比:

    slither MyContract.sol --export json report.json

总结

  • 安装 Slither +(可选)solc-select

  • 合约单独放目录,必要时切换编译器版本

  • slither MyContract.sol 一键跑审计

  • 重点关注:Critical / High 级别漏洞

  • 结合业务逻辑,自己再核查

Slither 不能替代人工审计,但它能帮你在 最短时间发现最关键的问题,是开发者自检的必备工具。

http://www.dtcms.com/a/343893.html

相关文章:

  • 《R for Data Science (2e)》免费中文翻译 (第5章) --- Data tidying
  • 园区 “一表多属” 电仪表能碳数据归集与编码实施文档
  • 《LINUX系统编程》笔记p3
  • 赛灵思ZYNQ官方文档UG585自学翻译笔记与代码示例:XILINX UART控制器详解:特性与功能
  • 新手向:计算机视觉入门OpenCV实战项目
  • elasticsearch 7.x elasticsearch 使用scroll滚动查询一页,删除一页,影响后面滚动的查询吗
  • 【LeetCode热题100道笔记+动画】最大子数组和
  • 任务同步和锁
  • 基于django/python的服装销售系统平台/服装购物系统/基于django/python的服装商城
  • sqli-labs通关笔记-第61关 GET字符型报错注入(单引号双括号闭合 限制5次探测机会)
  • 基于Django的学校实验室预约管理系统/基于python的实验室管理系统的设计与实现#python#django#FLASK
  • JAVA基础-java虚拟机
  • uniapp googlepay支付 内购项目
  • 豆包AI PPT与秒出PPT对比评测:谁更适合你?
  • 计算机毕设选题推荐 基于Spark的家庭能源消耗智能分析与可视化系统 基于机器学习的家庭能源消耗预测与可视化系统源码
  • Python办公之Excel(openpyxl)、PPT(python-pptx)、Word(python-docx)
  • 2026年计算机毕设推荐:基于大数据的慢性肾病数据可视化分析系统技术选型指南【Hadoop、spark、python】
  • 使用PPT进行科研绘图过程中常用的快捷键
  • 日志logging学习(1)
  • Gemini 2.5 Flash-Lite与 DeepSeek-V3 深度对比:谁在性价比上更胜一筹?
  • 【typenum】 21 类型级别计算最大公约数(Gcd)
  • map和set的使⽤
  • 52 C++ 现代C++编程艺术1-禁止隐式转换关键字explicit
  • Qt中用于图像缩放的核⼼⽅法QPixmap::scaled
  • 编写Linux下设备驱动时两种方案:内核态驱动开发和用户态驱动开发
  • --- 使用OpenFeign来优雅的对服务进行调用 ---
  • vue2怎么修改el-table样式
  • 金融风控AI引擎:实时反欺诈系统的架构设计与实现
  • CTFSHOW | 其他篇题解(二)web417 - web437
  • 进程间通信-IPC机制