Slither

Blockchain / Web3 v0.11.5 · 16.01.2026 активный

Статический анализатор смарт-контрактов Solidity от Trail of Bits. 80+ детекторов: reentrancy, integer overflow, tx.origin authentication, unprotected SELFDESTRUCT, shadowing переменных. Строит граф вызовов, inheritance, выполняет taint-анализ. Интегрируется в CI/CD для аудита контрактов при каждом коммите.

v0.11.5
16.01.2026 current
Добавлен 13.07.2026 · Обновлён 13.07.2026 · Blockchain / Web3
Установка
pip install slither-analyzer
# Анализ проекта Hardhat/Foundry
slither .
# Конкретный контракт
slither contract.sol
# JSON-вывод для CI
slither . --json results.json
переведено ИИ

Slither — статический анализатор смарт-контрактов

Логотип фреймворка статического анализа Slither

Статус сборки PyPI Slither - Read the Docs Slither - Wiki

Присоединяйтесь к Slack-каналу Empire Hacking

Статус Slack

- Обсуждения и поддержка

Slither — это фреймворк статического анализа контрактов на языках Solidity и Vyper, написанный на Python3. Он выполняет набор детекторов уязвимостей, выводит визуальную информацию о деталях контрактов и предоставляет API для простой реализации пользовательских анализов. Slither помогает разработчикам находить уязвимости, повышать понимание своего кода и быстро создавать прототипы пользовательских анализов.

Возможности

  • Обнаруживает уязвимый код на Solidity с низким процентом ложных срабатываний (см. список трофеев)
  • Определяет место возникновения условия ошибки в исходном коде
  • Легко интегрируется в процессы непрерывной интеграции и сборки Hardhat/Foundry
  • Встроенные «принтеры» быстро сообщают ключевую информацию о контракте
  • API детекторов для написания пользовательских анализов на Python
  • Возможность анализа контрактов, написанных на Solidity >= 0.4
  • Промежуточное представление (SlithIR) обеспечивает простой и высоко точный анализ
  • Корректно обрабатывает 99.9% всего публичного кода на Solidity
  • Среднее время выполнения менее 1 секунды на контракт
  • Интеграция со сканированием кода Github в CI
  • Поддержка смарт-контрактов на Vyper

Использование

Запустите Slither на приложении Hardhat/Foundry/Dapp/Brownie:

slither .

Это предпочтительный вариант, если ваш проект имеет зависимости, так как Slither полагается на базовую среду компиляции для компиляции исходного кода.

Тем не менее, вы можете запустить Slither на отдельном файле, который не импортирует зависимости:

slither tests/uninitialized.sol

Установка

Примечание Для работы Slither требуется Python 3.10+. Если вы не планируете использовать одну из поддерживаемых сред компиляции, вам потребуется solc, компилятор Solidity; мы рекомендуем использовать solc-select для удобного переключения между версиями solc.

Использование uv (Рекомендуется)

uv — это быстрый менеджер пакетов Python, который в 10-100 раз быстрее 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>

Для обновления:

uv tool upgrade slither-analyzer

Использование Pip

python3 -m pip install slither-analyzer

Для обновления:

python3 -m pip install --upgrade slither-analyzer

Использование Brew

brew install slither-analyzer

Использование Git (Разработка)

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>

Флаг -e устанавливает в редактируемом режиме, то есть изменения в исходном коде сразу отражаются без переустановки.

Использование Docker

Используйте docker-образ eth-security-toolbox. Он включает все наши инструменты безопасности и каждую основную версию Solidity в одном образе. /home/share будет смонтирован в /share в контейнере.

docker pull trailofbits/eth-security-toolbox

Для совместного использования каталога в контейнере:

docker run -it -v /home/share:/share trailofbits/eth-security-toolbox

Интеграция

  • Для интеграции с GitHub action используйте slither-action.
  • Для интеграции с pre-commit используйте (замените $GIT_TAG на реальный тег) ```YAML
  • repo: https://github.com/crytic/slither rev: $GIT_TAG hooks:
    • id: slither ```
  • Для генерации отчета в Markdown используйте slither [target] --checklist.
  • Для генерации Markdown с подсветкой кода из Github используйте slither [target] --checklist --markdown-root https://github.com/ORG/REPO/blob/COMMIT/ (замените ORG, REPO, COMMIT)

Детекторы

Детектор Что обнаруживает Влияние Уверенность
1 abiencoderv2-array Массив storage в abiencoderv2 Высокое Высокая
2 arbitrary-send-erc20 transferFrom использует произвольный from Высокое Высокая
3 array-by-reference Изменение массива storage по значению Высокое Высокая
4 encode-packed-collision Коллизия ABI encodePacked Высокое Высокая
5 incorrect-shift Неправильный порядок параметров в инструкции сдвига. Высокое Высокая
6 multiple-constructors Несколько схем конструкторов Высокое Высокая
7 name-reused Повторное использование имени контракта Высокое Высокая
8 protected-vars Обнаружены незащищенные переменные Высокое Высокая
9 public-mappings-nested Публичные mapping со вложенными переменными Высокое Высокая
10 rtlo Используется символ управления обратного порядка (Right-To-Left-Override) Высокое Высокая
11 shadowing-state Затенение переменных состояния Высокое Высокая
12 suicidal Функции, позволяющие любому уничтожить контракт Высокое Высокая
13 uninitialized-state Неинициализированные переменные состояния Высокое Высокая
14 uninitialized-storage Неинициализированные переменные storage Высокое Высокая
15 unprotected-upgrade Незащищенный обновляемый контракт Высокое Высокая
16 arbitrary-send-erc20-permit transferFrom использует произвольный from с permit Высокое Средняя
17 arbitrary-send-eth Функции, отправляющие Ether на произвольные адреса Высокое Средняя
18 controlled-array-length Загрязненное присвоение длины массива Высокое Средняя
19 controlled-delegatecall Управляемое назначение delegatecall Высокое Средняя
20 delegatecall-loop Оплачиваемые функции, использующие delegatecall внутри цикла Высокое Средняя
21 incorrect-exp Неправильное возведение в степень Высокое Средняя
22 incorrect-return Если return неправильно используется в режиме assembly. Высокое Средняя
23 msg-value-loop Значение msg.value внутри цикла Высокая Средняя
24 reentrancy-eth Уязвимости повторного входа (кража эфира) Высокая Средняя
25 reentrancy-balance Уязвимости повторного входа, приводящие к проверке устаревшего баланса Высокая Средняя
26 return-leave Использование return вместо leave. Высокая Средняя
27 storage-array Ошибка компилятора для массивов знаковых целых чисел в хранилище Высокая Средняя
28 unchecked-transfer Непроверенный перевод токенов Высокая Средняя
29 weak-prng Слабый ГСЧ (ПСЧ) Высокая Средняя
30 domain-separator-collision Обнаружение токенов ERC20, функция которых имеет сигнатуру, совпадающую с DOMAIN_SEPARATOR() из EIP-2612 Средняя Высокая
31 enum-conversion Обнаружение опасного преобразования перечислений Средняя Высокая
32 erc20-interface Некорректные интерфейсы ERC20 Средняя Высокая
33 erc721-interface Некорректные интерфейсы ERC721 Средняя Высокая
34 incorrect-equality Опасные строгие сравнения на равенство Средняя Высокая
35 locked-ether Контракты, блокирующие эфир Средняя Высокая
36 mapping-deletion Удаление из mapping, содержащего структуру Средняя Высокая
37 pyth-deprecated-functions Обнаружение устаревших функций Pyth Средняя Высокая
38 pyth-unchecked-confidence Обнаружение, когда уровень достоверности цены Pyth не проверяется Средняя Высокая
39 pyth-unchecked-publishtime Обнаружение, когда время публикации (publishTime) цены Pyth не проверяется Средняя Высокая
40 shadowing-abstract Затенение переменных состояния из абстрактных контрактов Средняя Высокая
41 tautological-compare Сравнение переменной с самой собой всегда возвращает true или false в зависимости от операции сравнения Средняя Высокая
42 tautology Тавтология или противоречие Средняя Высокая
43 write-after-write Неиспользуемая запись Средняя Высокая
44 boolean-cst Неправильное использование логической константы Средняя Средняя
45 chronicle-unchecked-price Обнаружение, когда цена Chronicle не проверяется. Средняя Средняя
46 constant-function-asm Постоянные функции, использующие код ассемблера Средняя Средняя
47 constant-function-state Постоянные функции, изменяющие состояние Средняя Средняя
48 divide-before-multiply Неточный порядок арифметических операций Средняя Средняя
49 gelato-unprotected-randomness Вызов _requestRandomness внутри незащищенной функции Средняя Средняя
50 out-of-order-retryable Вызовы повторных транзакций не в правильном порядке Средняя Средняя
51 reentrancy-no-eth Уязвимости повторного входа (без кражи эфира) Средняя Средняя
52 reused-constructor Повторно используемый базовый конструктор Средняя Средняя
53 tx-origin Опасное использование tx.origin Средняя Средняя
54 unchecked-lowlevel Непроверенные вызовы низкого уровня Средняя Средняя
55 unchecked-send Непроверенная отправка Средняя Средняя
56 uninitialized-local Неинициализированные локальные переменные Средняя Средняя
57 unused-return Неиспользуемые значения возвращаемых переменных Средняя Средняя
58 chainlink-feed-registry Обнаружение использования реестра котировок Chainlink Низкая Высокая
59 incorrect-modifier Модификаторы, которые могут возвращать значение по умолчанию Низкая Высокая
60 optimism-deprecation Обнаружение использования устаревшего предварительно развернутого контракта или функции Optimism. Низкая Высокая
61 shadowing-builtin Затенение встроенных символов Низкая Высокая
62 shadowing-local Затенение локальных переменных Низкая Высокая
63 uninitialized-fptr-cst Вызовы неинициализированных указателей на функции в конструкторах Низкая Высокая
64 variable-scope Использование локальных переменных до их объявления Низкая Высокая
65 void-cst Вызов не реализованного конструктора Низкая Высокая
66 calls-loop Множественные вызовы в цикле Низкая Средняя
67 events-access Отсутствие контроля доступа к событиям Низкая Средняя
68 events-maths Отсутствие событий для арифметических операций Низкая Средняя
69 incorrect-unary Опасные унарные выражения Низкая Средняя
70 missing-zero-check Отсутствие проверки адреса на нулевое значение Низкая Средняя
71 reentrancy-benign Доброкачественные уязвимости повторного входа Низкая Средняя
72 reentrancy-events Уязвимости повторного входа, приводящие к нарушению порядка событий Низкая Средняя
73 return-bomb Вызываемая функция низкого уровня может неожиданно потребить все газы вызывающей функции. Низкая Средняя
74 timestamp Опасное использование block.timestamp Низкий Средний
75 assembly Использование ассемблера Информационный Высокий
76 assert-state-change Изменение состояния через assert Информационный Высокий
77 boolean-equal Сравнение с логической константой Информационный Высокий
78 cyclomatic-complexity Обнаружение функций с высокой (> 11) цикломатической сложностью Информационный Высокий
79 deprecated-standards Устаревшие стандарты Solidity Информационный Высокий
80 erc20-indexed Параметры событий ERC20 без индексации Информационный Высокий
81 function-init-state Функции, инициализирующие переменные состояния Информационный Высокий
82 incorrect-using-for Обнаружение использования оператора using for, когда ни одна функция из указанной библиотеки не соответствует указанному типу Информационный Высокий
83 low-level-calls Вызовы низкого уровня Информационный Высокий
84 missing-inheritance Отсутствующее наследование Информационный Высокий
85 naming-convention Соответствие соглашениям об именовании в Solidity Информационный Высокий
86 pragma Использование различных директив pragma Информационный Высокий
87 redundant-statements Избыточные выражения Информационный Высокий
88 solc-version Неверная версия Solidity Информационный Высокий
89 unimplemented-functions Нереализованные функции Информационный Высокий
90 unindexed-event-address События с параметрами address, но без индексированных параметров Информационный Высокий
91 unused-state Неиспользуемые переменные состояния Информационный Высокий
92 costly-loop Дорогостоящие операции в цикле Информационный Средний
93 dead-code Неиспользуемые функции Информационный Средний
94 reentrancy-unlimited-gas Уязвимости повторного входа через send и transfer Информационный Средний
95 too-many-digits Соответствие лучшим практикам числовой записи Информационный Средний
96 cache-array-length Обнаружение циклов for, которые используют член length некоторого хранилища массива в условии цикла и не модифицируют его. Оптимизация Высокий
97 constable-states Переменные состояния, которые могут быть объявлены как константные Оптимизация Высокий
98 external-function Публичная функция, которая может быть объявлена как внешняя Оптимизация Высокий
99 immutable-states Переменные состояния, которые могут быть объявлены как неизменяемые Оптимизация Высокий
100 var-read-using-this Контракт читает свою собственную переменную, используя this Оптимизация Высокий

Для получения дополнительной информации смотрите

Принтеры

Принтеры для быстрого обзора

Принтеры для глубокого обзора

Для запуска принтера используйте --print и разделенный запятыми список принтеров.

Полный список смотрите в документации по принтерам.

Инструменты

Для получения информации о дополнительных инструментах смотрите документацию по инструментам.

Свяжитесь с нами для получения помощи в разработке собственных инструментов.

Документация API

Документация по внутреннему устройству Slither доступна здесь.

Получение помощи

Не стесняйтесь заходить на наш канал в Slack (#ethereum) за помощью по использованию или расширению Slither.

Часто задаваемые вопросы

Как исключить моки или тесты?

Как исправить ошибку "unknown file" или проблемы с компиляцией?

  • Поскольку slither требует AST от solc, он должен иметь доступ ко всем зависимостям. Если контракт имеет зависимости, команда slither contract.sol завершится неудачей. Вместо этого используйте slither . в родительской директории папки contracts/ (при выполнении команды ls вы должны видеть contracts/). Если у вас есть папка node_modules/, она должна находиться в той же директории, что и contracts/. Чтобы убедиться, что эта проблема связана со slither, запустите команду компиляции для используемого вами фреймворка, например npx hardhat compile. Она должна успешно выполниться; в противном случае движок компиляции slither, crytic-compile, не сможет сгенерировать AST.

Лицензия

Slither лицензирован и распространяется под лицензией AGPLv3. Свяжитесь с нами, если вы ищете исключение из условий.

Публикации

Публикация Trail of Bits

Внешние публикации

Название Использование Авторы Площадка Код
ReJection: A AST-Based Reentrancy Vulnerability Detection Method Анализ на основе AST, построенный поверх 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 Использование зависимостей данных через Slither William Zhang, Sebastian Banescu, Leodardo Pasos, Steven Stewart, Vijay Ganesh ISSRE 2019 MPro
ETHPLOIT: From Fuzzing to Efficient Exploit Generation against Smart Contracts Использование зависимостей данных через Slither Qingzhao Zhang, Yizhuo Wang, Juanru Li, Siqi Ma SANER 20 -
Verification of Ethereum Smart Contracts: A Model Checking Approach Символическое выполнение, построенное поверх CFG от Slither Tam Bang, Hoang H Nguyen, Dung Nguyen, Toan Trieu, Tho Quan IJMLC 20 -
Smart Contract Repair Опирается на детекторы уязвимостей Slither Xiao Liang Yu, Omar Al-Bataineh, David Lo, Abhik Roychoudhury TOSEM 20 SCRepair
Demystifying Loops in Smart Contracts Использование зависимостей данных через Slither Ben Mariano, Yanju Chen, Yu Feng, Shuvendu Lahiri, Isil Dillig ASE 20 -
Trace-Based Dynamic Gas Estimation of Loops in Smart Contracts Использование CFG от Slither для обнаружения циклов 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 Опирается на SlithIR для построения графа зависимостей хранилища 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 Использование Slither как фронтенда для построения системы уточняющих типов 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 Использование Slither для извлечения признаков токенов (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 Использование Slither для извлечения CFG и графа вызовов 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 Использование Slither для извлечения CFG и зависимостей данных 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 Расширение зависимостей данных от Slither 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 Использование Slither для извлечения 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 Использование Slither для извлечения признаков кода (CFG, функции, типы параметров, ..) 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 Использование Slither для построения графов доступа к состоянию Xiaodong Qi, Jiao Jiao, Yi Li International Conference on Distributed Computing Systems (ICDCS), 2023 -
Bad Apples: Understanding the Centralized Security Risks in Decentralized Ecosystems Реализация внутреннего анализа поверх Slither Kailun Yan , Jilian Zhang , Xiangyu Liu , Wenrui Diao , Shanqing Guo ACM Web Conference April 2023 -
Identifying Vulnerabilities in Smart Contracts using Interval Analysis Создание 4 детекторов поверх Slither Ştefan-Claudiu Susan, Andrei Arusoaie FROM 2023 -
Storage State Analysis and Extraction of Ethereum Blockchain Smart Contracts (pdf не в открытом доступе) Опирается на CFG и AST от Slither Maha Ayub , Tania Saleem , Muhammad Janjua , Talha Ahmad TOSEM 2023 SmartMuv

Если вы используете Slither для академической работы, рассмотрите возможность подачи заявки на Crytic Research Prize $10k.

Комментарии
Войдите, чтобы оставить комментарий