作為區塊鏈開發者,寫完合約之后最重要的一步就是?檢查代碼有沒有漏洞。一旦部署到鏈上出了問題,不僅修復麻煩,還可能直接造成資金損失。
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 不能替代人工審計,但它能幫你在?最短時間發現最關鍵的問題,是開發者自檢的必備工具。