需 Python 3.10+;不用 Hardhat/Foundry 等编译框架时要自行安装 solc 并建议用 solc-select 切换版本;分析带依赖的项目应在项目根目录运行 slither . 而非单文件
uv tool install slither-analyzer
slither .README 未说明硬件要求;需 Python 3.10+,不使用支持的编译框架时还需安装 solc
Python 写的 Solidity/Vyper 静态分析框架,跑漏洞检测器并输出合约结构信息
针对 Solidity 和 Vyper 智能合约的静态分析器,能在部署前自动检测漏洞、代码异味和规范问题,帮审计和开发人员提前排雷。
核心能力
- 内置数十个漏洞检测器,覆盖重入、未初始化状态变量等
- 用 SlithIR 中间表示做高精度分析
- 提供 printers 快速输出合约关键信息
- 提供 Python API 编写自定义检测规则
- 可接入 CI 与 Hardhat/Foundry 构建流程
容易踩的坑
- 0.11.6最新正式版2026-07-28 · 2026-07-28 21:32 UTC
This release supports Hardhat v3 and Sourcify, it contains performance improvements and a reduction of false positives for some detectors.
What's Changed
- feat: add performance benchmark script by @dguido in https://github.com/crytic/slither/pull/2933
- perf: optimize transitive closure with worklist algorithm (17-27% faster) by @dguido in https://github.com/crytic/slither/pull/2932
- perf: use set for O(1) membership in _explore_functions by @dguido in https://github.com/crytic/slither/pull/2924
- perf: cache derived_contracts lookup in compilation unit by @dguido in https://github.com/crytic/slither/pull/2925
- feat: add --timing flag for phase-level performance breakdown by @dguido in https://github.com/crytic/slither/pull/2928
- perf: cache Literal.str conversion for numeric types by @dguido in https://github.com/crytic/slither/pull/2934
- perf: optimize Type.eq methods with direct attribute access by @dguido in https://github.com/crytic/slither/pull/2935
- perf: cache filename lookups in _convert_source_mapping by @dguido in https://github.com/crytic/slither/pull/2936
- Add --exclude-location flag to hide file locations in detector messages by @ep0chzer0 in https://github.com/crytic/slither/pull/2872
- Fix external call classification for Yul/Vyper by @edlsh in https://github.com/crytic/slither/pull/2938
- feat: add msg-value-in-nonpayable detector by @ep0chzer0 in https://github.com/crytic/slither/pull/2923
- fix: add ArrayType and complex type support in _find_struct_var_slot by @ep0chzer0 in https://github.com/crytic/slither/pull/2922
- feat: add --warn-unused-ignores flag for detecting unnecessary slither-disable comments by @ep0chzer0 in https://github.com/crytic/slither/pull/2921
- feat: add C3 linearization printer for inheritance analysis by @ep0chzer0 in https://github.com/crytic/slither/pull/2917
- fix: handle unhashable types in using_for lookup by @ep0chzer0 in https://github.com/crytic/slither/pull/2916
- feat: add support for constant and immutable variables in slither-read-storage by @ep0chzer0 in https://github.com/crytic/slither/pull/2920
- fix: output to stdout instead of stderr by @ep0chzer0 in https://github.com/crytic/slither/pull/2912
- fix: only exclude unoverridden virtual functions in inheritance-graph by @ep0chzer0 in https://github.com/crytic/slither/pull/2915
- fix: correct NewContract expression type annotation by @ep0chzer0 in https://github.com/crytic/slither/pull/2914
- Add enum ranges to echidna printer output by @ep0chzer0 in https://github.com/crytic/slither/pull/2908
- Add detector's name for the upgradeability tool by @smonicas in https://github.com/crytic/slither/pull/2942
- Fix dead-code detector incorrectly flagging library functions by @ep0chzer0 in https://github.com/crytic/slither/pull/2905
- chore: add Serena MCP server configuration by @dguido in https://github.com/crytic/slither/pull/2948
- chore: optimize Serena MCP configuration by @dguido in https://github.com/crytic/slither/pull/2949
- Fix dead-code detector false positive for virtual functions by @ep0chzer0 in https://github.com/crytic/slither/pull/2951
- Fix unused-return false positive when return values used in return statement by @ep0chzer0 in https://github.com/crytic/slither/pull/2950
- fix: handle TypeAlias in read_storage for custom value types by @ep0chzer0 in https://github.com/crytic/slither/pull/2911
- feat: add reference URL to JSON output by @ep0chzer0 in https://github.com/crytic/slither/pull/2910
- Fix call-graph printer to distinguish overloaded functions by @ep0chzer0 in https://github.com/crytic/slither/pull/2909
- fix: raise exception for malformed disable comments by @dguido in https://github.com/crytic/slither/pull/2897
- Fix call-graph printer to support top-level functions by @ep0chzer0 in https://github.com/crytic/slither/pull/2904
- Fix super call resolution by @smonicas in https://github.com/crytic/slither/pull/2958
- fix: len should gte 2 by @cuiwe
- 0.11.52026-01-16 · 2026-01-16 19:46 UTC
查看更新说明
This minor release upgrades the minimum Python version to 3.10, adds one new detector reentrancy-balance and various other fixes.
What's Changed
- Fix markdown lint on docs/ by @dguido in https://github.com/crytic/slither/pull/2870
- slither-doctor: paths: follow symlinks by @elopez in https://github.com/crytic/slither/pull/1608
- fixed consistency by @shushaaniik in https://github.com/crytic/slither/pull/2556
- Add paths to inheritance printer by @shargon in https://github.com/crytic/slither/pull/2732
- chore: fix typos by @omahs in https://github.com/crytic/slither/pull/2723
- fix: update snapshots for typo fix in uninitialized detector by @dguido in https://github.com/crytic/slither/pull/2886
- #2688 fix markdown linter by @nsiregar in https://github.com/crytic/slither/pull/2722
- docs: Add comprehensive CLAUDE.md for AI-assisted development by @dguido in https://github.com/crytic/slither/pull/2889
- fix: remove Etherscan API dependency from CI tests by @dguido in https://github.com/crytic/slither/pull/2890
- ci: Harden and optimize GitHub Actions workflows by @dguido in https://github.com/crytic/slither/pull/2891
- chore: modernize pre-commit hooks with prek by @dguido in https://github.com/crytic/slither/pull/2894
- chore: modernize Makefile to use uv-native workflow by @dguido in https://github.com/crytic/slither/pull/2895
- fix: correct ERC conformance JSON key and document evm-cfg-builder dep by @dguido in https://github.com/crytic/slither/pull/2896
- chore: enable 34 additional ruff lint rules by @dguido in https://github.com/crytic/slither/pull/2898
- fix: add fasttext as optional dependency for slither-simil by @dguido in https://github.com/crytic/slither/pull/2899
- feat: upgrade minimum Python version to 3.10, modernize type annotations by @dguido in https://github.com/crytic/slither/pull/2900
- detectors: unindexed-event-address: add source mapping information to detection by @elopez in https://github.com/crytic/slither/pull/2918
- Add reentrancy-balance detector by @smonicas in https://github.com/crytic/slither/pull/2919
New Contributors
- @shushaaniik made their first contribution in https://github.com/crytic/slither/pull/2556
- @omahs made their first contribution in https://github.com/crytic/slither/pull/2723
Full Changelog: https://github.com/crytic/slither/compare/0.11.4...0.11.5
- 0.11.42026-01-15 · 2026-01-15 18:59 UTC
查看更新说明
This release adds support for the CLZ EVM opcode, for solidity custom storage layout, adds 1 new detector
unindexed-event-addressand various fixes. Additionally it changes the development environment to using uv and ruff for linting.What's Changed
- Update FUNDING.json by @bsamuels453 in https://github.com/crytic/slither/pull/2713
- FIxed typo of solidity and conditions by @sidarth16 in https://github.com/crytic/slither/pull/2751
- docs: fix typos by @Ahjan1999 in https://github.com/crytic/slither/pull/2726
- chore: fix some typos in comment by @tsinghuacoder in https://github.com/crytic/slither/pull/2703
- Fix Usage.md by @shargon in https://github.com/crytic/slither/pull/2737
- Fix trimmed network string by @DaniPopes in https://github.com/crytic/slither/pull/2775
- tests: mutator: fix test after crytic-compile update by @elopez in https://github.com/crytic/slither/pull/2816
- tests: fix slither_config by @elopez in https://github.com/crytic/slither/pull/2817
- chore: remove redundant word by @tzchenxixi in https://github.com/crytic/slither/pull/2790
- Build: Migrate from setuptools to hatchling with uv by @dguido in https://github.com/crytic/slither/pull/2849
- Lint: Migrate from black/pylint to ruff by @dguido in https://github.com/crytic/slither/pull/2850
- Style: Apply ruff auto-fixes for formatting by @dguido in https://github.com/crytic/slither/pull/2852
- CI: Modernize CI workflows and bump Python to 3.9+ by @dguido in https://github.com/crytic/slither/pull/2851
- Remove codex detector by @smonicas in https://github.com/crytic/slither/pull/2853
- Fix signature of fixed size arrays by @smonicas in https://github.com/crytic/slither/pull/2771
- Fix try-catch parsing by @smonicas in https://github.com/crytic/slither/pull/2730
- Fix cases of echidna printer crashing by @smonicas in https://github.com/crytic/slither/pull/2727
- Clean up GitHub templates and config files by @dguido in https://github.com/crytic/slither/pull/2848
- docs: add CLAUDE.md coding standards for AI assistants by @dguido in https://github.com/crytic/slither/pull/2855
- Test Slither on Python 3.13 and 3.14 by @elopez in https://github.com/crytic/slither/pull/2858
- Add support for CLZ EVM opcode by @smonicas in https://github.com/crytic/slither/pull/2857
- Bump actions/checkout from 4 to 6 by @dependabot[bot] in https://github.com/crytic/slither/pull/2859
- fix: expand add_refers_to assertion to accept TopLevelVariable by @nisedo in https://github.com/crytic/slither/pull/2827
- Mutation cleanup by @bohendo in https://github.com/crytic/slither/pull/2761
- Add storage variables and contract inheritance to
entry-pointsprinter by @nisedo in https://github.com/crytic/slither/pull/2768 - fix: handle Unicode characters correctly in mutator byte offset calculation by @stevennevins in https://github.com/crytic/slither/pull/2832
- feat(mutator): add --target-functions flag to filter mutations by selector by @stevennevins in https://github.com/crytic/slither/pull/2828
- Add detector's name in the output by @smonicas in https://github.com/crytic/slither/pull/2864
- Support custom storage layout by @smonicas in https://github.com/crytic/slither/pull/2863
- Fix aliasing of member access with Vyper's builtins when parsing an expression by @smonicas in https://github.com/crytic/slither/pull/2861
- Fix parsing of modifiers by @smonicas in https://github.com/crytic/slither/pull/2860
- Remove iterating modifiers as they are already present from all_internal_calls() by @smonicas in https://github.com/crytic/slither/pull/2865
- Modernize plugin_example to use pyproject.toml by @dguido in https://github.com/crytic/slither/pull/2869
uv lock --upgradeby @elopez in https://github.com/crytic/slither/pull/2873- Target master branch for development by @smonicas in https://github.com/crytic/slither/pull/2874
- Add unindexed-event-address detector by @smonicas in https://github.com/crytic/slither/pull/2866
- Optimize Dockerfile
- 0.11.32025-04-18 · 2025-04-18 11:59 UTC
查看更新说明
This minor release updates some dependencies.
What's Changed
- Update
web3,eth-*dependencies by @elopez in https://github.com/crytic/slither/pull/2710
Full Changelog: https://github.com/crytic/slither/compare/0.11.2...0.11.3
- Update
- 0.11.22025-04-16 · 2025-04-16 20:43 UTC
查看更新说明
This minor release fixes a bug in the storage pointer analysis.
What's Changed
- Fix written variables in storage pointer analysis by @smonicas in https://github.com/crytic/slither/pull/2707
Full Changelog: https://github.com/crytic/slither/compare/0.11.1...0.11.2
用户点评
登录用户的真实使用记录,可按版本和硬件筛选还没有人点评。第一个说出真实体验的人最有价值。
Slither, the smart contract static analyzer
Join the Empire Hacking Slack
- Discussions and Support
Slither is a Solidity & Vyper static analysis framework written in Python3. It runs a suite of vulnerability detectors, prints visual information about contract details, and provides an API to easily write custom analyses. Slither enables developers to find vulnerabilities, enhance their code comprehension, and quickly prototype custom analyses.
- Features
- Usage
- How to install
- Detectors
- Printers
- Tools
- API Documentation
- Getting Help
- FAQ
- License
- Publications
Features
- Detects vulnerable Solidity code with low false positives (see the list of trophies)
- Identifies where the error condition occurs in the source code
- Easily integrates into continuous integration and Hardhat/Foundry builds
- Built-in 'printers' quickly report crucial contract information
- Detector API to write custom analyses in Python
- Ability to analyze contracts written with Solidity >= 0.4
- Intermediate representation (SlithIR) enables simple, high-precision analyses
- Correctly parses 99.9% of all public Solidity code
- Average execution time of less than 1 second per contract
- Integrates with Github's code scanning in CI
- Support for Vyper smart contracts
Usage
Run Slither on a Hardhat/Foundry/Dapp/Brownie application:
slither .
This is the preferred option if your project has dependencies as Slither relies on the underlying compilation framework to compile source code.
However, you can run Slither on a single file that does not import dependencies:
slither tests/uninitialized.sol
How to install
Note Slither requires Python 3.10+. If you're not going to use one of the supported compilation frameworks, you need solc, the Solidity compiler; we recommend using solc-select to conveniently switch between solc versions.
Using uv (Recommended)
uv is a fast Python package manager that's 10-100x faster than pip.
# Install uv if you haven't already
curl -LsSf https://astral.sh/uv/install.sh | sh
# Install slither as a tool
uv tool install slither-analyzer
# Or run slither without installation
uvx --from slither-analyzer slither <target>
To upgrade:
uv tool upgrade slither-analyzer
Using Pip
python3 -m pip install slither-analyzer
To upgrade:
python3 -m pip install --upgrade slither-analyzer
Using Brew
brew install slither-analyzer
Using Git (Development)
git clone https://github.com/crytic/slither.git && cd slither
# Install as editable for development
uv tool install -e .
# Or use uv run for testing without installation
uv run slither <target>
The -e flag installs in editable mode, meaning changes to the source code are immediately reflected without reinstalling.
Using Docker
Use the eth-security-toolbox docker image. It includes all of our security tools and every major version of Solidity in a single image. /home/share will be mounted to /share in the container.
docker pull trailofbits/eth-security-toolbox
To share a directory in the container:
docker run -it -v /home/share:/share trailofbits/eth-security-toolbox
Integration
- For GitHub action integration, use slither-action.
- For pre-commit integration, use (replace
$GIT_TAGwith real tag)- repo: https://github.com/crytic/slither rev: $GIT_TAG hooks: - id: slither - To generate a Markdown report, use
slither [target] --checklist. - To generate a Markdown with GitHub source code highlighting, use
slither [target] --checklist --markdown-root https://github.com/ORG/REPO/blob/COMMIT/(replaceORG,REPO,COMMIT)
Detectors
For more information, see
- The Detector Documentation for details on each detector
- The Detection Selection to run only selected detectors. By default, all the detectors are run.
- The Triage Mode to filter individual results
Printers
Quick Review Printers
human-summary: Print a human-readable summary of the contractsinheritance-graph: Export the inheritance graph of each contract to a dot filecontract-summary: Print a summary of the contractsloc: Count the total number lines of code (LOC), source lines of code (SLOC), and comment lines of code (CLOC) found in source files (SRC), dependencies (DEP), and test files (TEST).entry-points: Print all the state-changing entry point functions and their variables of the contracts
In-Depth Review Printers
call-graph: Export the call-graph of the contracts to a dot filecfg: Export the CFG of each functionsfunction-summary: Print a summary of the functionsvars-and-auth: Print the state variables written and the authorization of the functionsnot-pausable: Print functions that do not usewhenNotPausedmodifier.
To run a printer, use --print and a comma-separated list of printers.
See the Printer documentation for the complete lists.
Tools
slither-check-upgradeability: Reviewdelegatecall-based upgradeabilityslither-prop: Automatic unit test and property generationslither-flat: Flatten a codebaseslither-check-erc: Check the ERC's conformanceslither-read-storage: Read storage values from contractsslither-interface: Generate an interface for a contract
See the Tool documentation for additional tools.
Contact us to get help on building custom tools.
API Documentation
Documentation on Slither's internals is available here.
Getting Help
Feel free to stop by our Slack channel (#ethereum) for help using or extending Slither.
-
The Printer documentation describes the information Slither is capable of visualizing for each contract.
-
The Detector documentation describes how to write a new vulnerability analyses.
-
The API documentation describes the methods and objects available for custom analyses.
-
The SlithIR documentation describes the SlithIR intermediate representation.
FAQ
How do I exclude mocks or tests?
- View our documentation on path filtering.
How do I fix "unknown file" or compilation issues?
- Because slither requires the solc AST, it must have all dependencies available.
If a contract has dependencies,
slither contract.solwill fail. Instead, useslither .in the parent directory ofcontracts/(you should seecontracts/when you runls). If you have anode_modules/folder, it must be in the same directory ascontracts/. To verify that this issue is related to slither, run the compilation command for the framework you are using e.gnpx hardhat compile. That must work successfully; otherwise, slither's compilation engine, crytic-compile, cannot generate the AST.
License
Slither is licensed and distributed under the AGPLv3 license. Contact us if you're looking for an exception to the terms.
Publications
Trail of Bits publication
- Slither: A Static Analysis Framework For Smart Contracts, Josselin Feist, Gustavo Grieco, Alex Groce - WETSEB '19
External publications
| Title | Usage | Authors | Venue | Code |
|---|---|---|---|---|
| ReJection: A AST-Based Reentrancy Vulnerability Detection Method | AST-based analysis built on top of Slither | Rui Ma, Zefeng Jian, Guangyuan Chen, Ke Ma, Yujia Chen | CTCIS 19 | - |
| MPro: Combining Static and Symbolic Analysis for Scalable Testing of Smart Contract | Leverage data dependency through Slither | William Zhang, Sebastian Banescu, Leodardo Pasos, Steven Stewart, Vijay Ganesh | ISSRE 2019 | MPro |
| ETHPLOIT: From Fuzzing to Efficient Exploit Generation against Smart Contracts | Leverage data dependency through Slither | Qingzhao Zhang, Yizhuo Wang, Juanru Li, Siqi Ma | SANER 20 | - |
| Verification of Ethereum Smart Contracts: A Model Checking Approach | Symbolic execution built on top of Slither’s CFG | Tam Bang, Hoang H Nguyen, Dung Nguyen, Toan Trieu, Tho Quan | IJMLC 20 | - |
| Smart Contract Repair | Rely on Slither’s vulnerabilities detectors | Xiao Liang Yu, Omar Al-Bataineh, David Lo, Abhik Roychoudhury | TOSEM 20 | SCRepair |
| Demystifying Loops in Smart Contracts | Leverage data dependency through Slither | Ben Mariano, Yanju Chen, Yu Feng, Shuvendu Lahiri, Isil Dillig | ASE 20 | - |
| Trace-Based Dynamic Gas Estimation of Loops in Smart Contracts | Use Slither’s CFG to detect loops | Chunmiao Li, Shijie Nie, Yang Cao, Yijun Yu, Zhenjiang Hu | IEEE Open J. Comput. Soc. 1 (2020) | - |
| SAILFISH: Vetting Smart Contract State-Inconsistency Bugs in Seconds | Rely on SlithIR to build a storage dependency graph | Priyanka Bose, Dipanjan Das, Yanju Chen, Yu Feng, Christopher Kruegel, and Giovanni Vigna | S&P 22 | Sailfish |
| SolType: Refinement Types for Arithmetic Overflow in Solidity | Use Slither as frontend to build refinement type system | Bryan Tan, Benjamin Mariano, Shuvendu K. Lahiri, Isil Dillig, Yu Feng | POPL 22 | - |
| Do Not Rug on Me: Leveraging Machine Learning Techniques for Automated Scam Detection | Use Slither to extract tokens' features (mintable, pausable, ..) | Mazorra, Bruno, Victor Adan, and Vanesa Daza | Mathematics 10.6 (2022) | - |
| MANDO: Multi-Level Heterogeneous Graph Embeddings for Fine-Grained Detection of Smart Contract Vulnerabilities | Use Slither to extract the CFG and call graph | Hoang Nguyen, Nhat-Minh Nguyen, Chunyao Xie, Zahra Ahmadi, Daniel Kudendo, Thanh-Nam Doan and Lingxiao Jiang | IEEE 9th International Conference on Data Science and Advanced Analytics (DSAA, 2022) | ge-sc |
| Automated Auditing of Price Gouging TOD Vulnerabilities in Smart Contracts | Use Slither to extract the CFG and data dependencies | Sidi Mohamed Beillahi, Eric Keilty, Keerthi Nelaturu, Andreas Veneris, and Fan Long | 2022 IEEE International Conference on Blockchain and Cryptocurrency (ICBC) | Smart-Contract-Repair |
| Modeling and Enforcing Access Control Policies for Smart Contracts | Extend Slither's data dependencies | Jan-Philipp Toberg, Jonas Schiffl, Frederik Reiche, Bernhard Beckert, Robert Heinrich, Ralf Reussner | IEEE International Conference on Decentralized Applications and Infrastructures (DAPPS), 2022 | SolidityAccessControlEnforcement |
| Smart Contract Vulnerability Detection Based on Deep Learning and Multimodal Decision Fusion | Use Slither to extract the CFG | Weichu Deng, Huanchun Wei, Teng Huang, Cong Cao, Yun Peng, and Xuan Hu | Sensors 2023, 23, 7246 | - |
| Semantic-enriched Code Knowledge Graph to Reveal Unknowns in Smart Contract Code Reuse | Use Slither to extract the code features (CFG, function, parameters types, ..) | Qing Huang, Dianshu Liao, Zhenchang Xing, Zhengkang Zuo, Changjing Wang, Xin Xia | ACM Transactions on Software Engineering and Methodology, 2023 | - |
| Smart Contract Parallel Execution with Fine-Grained State Accesses | Use Slither to build state access graphs | Xiaodong Qi, Jiao Jiao, Yi Li | International Conference on Distributed Computing Systems (ICDCS), 2023 | - |
| Bad Apples: Understanding the Centralized Security Risks in Decentralized Ecosystems | Implement an internal analysis on top of Slither | Kailun Yan , Jilian Zhang , Xiangyu Liu , Wenrui Diao , Shanqing Guo | ACM Web Conference April 2023 | - |
| Identifying Vulnerabilities in Smart Contracts using Interval Analysis | Create 4 detectors on top of Slither | Ştefan-Claudiu Susan, Andrei Arusoaie | FROM 2023 | - |
| Storage State Analysis and Extraction of Ethereum Blockchain Smart Contracts (no PDF in open access) | Rely on Slither's CFG and AST | Maha Ayub , Tania Saleem , Muhammad Janjua , Talha Ahmad | TOSEM 2023 | SmartMuv |
If you are using Slither on an academic work, consider applying to the Crytic $10k Research Prize.