
Статический анализатор для Solidity и Vyper
# [Slither, статический анализатор смарт-контрактов](https://crytic.github.io/slither/slither.html)
<img src="https://assets.kitploit.com/production/public/readmes/2943/62b8c109c585043091c50668ec219aa530aa6d589d7cda02181bf209249f5205.png" alt="Логотип статического анализатора Slither" width="500" />
[](https://github.com/crytic/slither/actions?query=workflow%3ACI)

[](https://crytic.github.io/slither/slither.html)
[](https://github.com/crytic/slither/wiki/SlithIR)
> Присоединяйтесь к Slack-каналу Empire Hacking
>
> [](https://slack.empirehacking.nyc/)
> > _- Обсуждения и поддержка_
**Slither** — это фреймворк статического анализа для Solidity и Vyper, написанный на Python3. Он запускает набор детекторов уязвимостей, выводит визуальную информацию о деталях контрактов и предоставляет API для простого написания собственных анализов. Slither позволяет разработчикам находить уязвимости, улучшать понимание кода и быстро прототипировать собственные анализы.
* [Возможности](#features)
* [Использование](#usage)
* [Как установить](#how-to-install)
* [Используя uv (рекомендуется)](#using-uv-recommended)
* [Используя Pip](#using-pip)
* [Используя Git](#using-git-development)
* [Используя Docker](#using-docker)
* [Интеграция](#integration)
* [Детекторы](#detectors)
* [Принтеры](#printers)
* [Быстрые принтеры для обзора](#quick-review-printers)
* [Углублённые принтеры для рецензирования](#in-depth-review-printers)
* [Инструменты](#tools)
* [Документация API](#api-documentation)
* [Получение помощи](#getting-help)
* [Часто задаваемые вопросы](#faq)
* [Лицензия](#license)
* [Публикации](#publications)
* [Публикации Trail of Bits](#trail-of-bits-publication)
* [Внешние публикации](#external-publications)
## Возможности
* Обнаруживает уязвимый код Solidity с низким уровнем ложных срабатываний (см. список [трофеев](https://github.com/crytic/slither/blob/master/trophies.md))
* Определяет, где в исходном коде возникает условие ошибки
* Легко интегрируется в непрерывную интеграцию и сборки Hardhat/Foundry
* Встроенные «принтеры» быстро сообщают важную информацию о контракте
* API детекторов для написания собственных анализов на Python
* Возможность анализа контрактов, написанных на Solidity >= 0.4
* Промежуточное представление ([SlithIR](https://github.com/crytic/slither/wiki/SlithIR)) обеспечивает простые и высокоточные анализы
* Корректно парсит 99.9% всего публичного кода Solidity
* Среднее время выполнения менее 1 секунды на контракт
* Интегрируется со сканированием кода GitHub в [CI](https://github.com/marketplace/actions/slither-action)
* Поддержка смарт-контрактов Vyper
## Использование
Запустите Slither в приложении Hardhat/Foundry/Dapp/Brownie:```console
slither .
```
Это предпочтительный вариант, если ваш проект имеет зависимости, поскольку Slither полагается на базовый фреймворк компиляции для компиляции исходного кода.
Однако вы можете запустить Slither на одном файле, который не импортирует зависимости:```console
slither tests/uninitialized.sol
```
## Как установить
> **Примечание**
> Slither требует Python 3.10+.
Если вы **не** собираетесь использовать один из [поддерживаемых фреймворков сборки](https://github.com/crytic/crytic-compile), вам потребуется [solc](https://github.com/ethereum/solidity/), компилятор Solidity; мы рекомендуем использовать [solc-select](https://github.com/crytic/solc-select) для удобного переключения между версиями solc.
### Использование uv (рекомендуется)
[uv](https://github.com/astral-sh/uv) — это быстрый менеджер пакетов Python, который в 10-100 раз быстрее pip.```console
# 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>
```
Для обновления:```console
uv tool upgrade slither-analyzer
```
### Использование Pip```console
python3 -m pip install slither-analyzer
```
Для обновления:```console
python3 -m pip install --upgrade slither-analyzer
```
### Использование Brew```console
brew install slither-analyzer
```
### Использование Git (Разработка)```bash
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`](https://github.com/crytic/eth-security-toolbox/). Он включает все наши инструменты безопасности и все основные версии Solidity в одном образе. `/home/share` будет смонтирован в `/share` внутри контейнера.```bash
docker pull trailofbits/eth-security-toolbox
```
Чтобы предоставить общий доступ к каталогу в контейнере:```bash
docker run -it -v /home/share:/share trailofbits/eth-security-toolbox
```
### Интеграция
* Для интеграции с GitHub Actions используйте [slither-action](https://github.com/marketplace/actions/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` | [Массив abiencoderv2 в хранилище](https://github.com/crytic/slither/wiki/Detector-Documentation#storage-abiencoderv2-array) | High | High
2 | `arbitrary-send-erc20` | [transferFrom использует произвольный `from`](https://github.com/crytic/slither/wiki/Detector-Documentation#arbitrary-from-in-transferfrom) | High | High
3 | `array-by-reference` | [Изменение массива хранилища по значению](https://github.com/crytic/slither/wiki/Detector-Documentation#modifying-storage-array-by-value) | High | High
4 | `encode-packed-collision` | [Коллизия ABI encodePacked](https://github.com/crytic/slither/wiki/Detector-Documentation#abi-encodePacked-collision) | High | High
5 | `incorrect-shift` | [Порядок параметров в инструкции сдвига неверен.](https://github.com/crytic/slither/wiki/Detector-Documentation#incorrect-shift-in-assembly) | High | High
6 | `multiple-constructors` | [Несколько схем конструкторов](https://github.com/crytic/slither/wiki/Detector-Documentation#multiple-constructor-schemes) | High | High
7 | `name-reused` | [Повторное использование имени контракта](https://github.com/crytic/slither/wiki/Detector-Documentation#name-reused) | High | High
8 | `protected-vars` | [Обнаружены незащищённые переменные](https://github.com/crytic/slither/wiki/Detector-Documentation#protected-variables) | High | High
9 | `public-mappings-nested` | [Публичные отображения с вложенными переменными](https://github.com/crytic/slither/wiki/Detector-Documentation#public-mappings-with-nested-variables) | High | High
10 | `rtlo` | [Используется управляющий символ «справа налево»](https://github.com/crytic/slither/wiki/Detector-Documentation#right-to-left-override-character) | High | High
11 | `shadowing-state` | [Затенение переменных состояния](https://github.com/crytic/slither/wiki/Detector-Documentation#state-variable-shadowing) | High | High
12 | `suicidal` | [Функции, позволяющие любому уничтожить контракт](https://github.com/crytic/slither/wiki/Detector-Documentation#suicidal) | High | High
13 | `uninitialized-state` | [Неинициализированные переменные состояния](https://github.com/crytic/slither/wiki/Detector-Documentation#uninitialized-state-variables) | High | High
14 | `uninitialized-storage` | [Неинициализированные переменные хранилища](https://github.com/crytic/slither/wiki/Detector-Documentation#uninitialized-storage-variables) | High | High
15 | `unprotected-upgrade` | [Незащищённый обновляемый контракт](https://github.com/crytic/slither/wiki/Detector-Documentation#unprotected-upgradeable-contract) | High | High
16 | `arbitrary-send-erc20-permit` | [transferFrom использует произвольный `from` с permit](https://github.com/crytic/slither/wiki/Detector-Documentation#arbitrary-from-in-transferfrom-used-with-permit) | High | Medium
17 | `arbitrary-send-eth` | [Функции, отправляющие Ether произвольным адресам](https://github.com/crytic/slither/wiki/Detector-Documentation#functions-that-send-ether-to-arbitrary-destinations) | High | Medium
18 | `controlled-array-length` | [Присвоение заражённой длины массива](https://github.com/crytic/slither/wiki/Detector-Documentation#array-length-assignment) | High | Medium
19 | `controlled-delegatecall` | [Контролируемый получатель delegatecall](https://github.com/crytic/slither/wiki/Detector-Documentation#controlled-delegatecall) | High | Medium
20 | `delegatecall-loop` | [Платные функции, использующие `delegatecall` внутри цикла](https://github.com/crytic/slither/wiki/Detector-Documentation/#payable-functions-using-delegatecall-inside-a-loop) | High | Medium
21 | `incorrect-exp` | [Некорректное возведение в степень](https://github.com/crytic/slither/wiki/Detector-Documentation#incorrect-exponentiation) | High | Medium
22 | `incorrect-return` | [Если `return` неправильно используется в режиме ассемблера.](https://github.com/crytic/slither/wiki/Detector-Documentation#incorrect-return-in-assembly) | High | Medium
23 | `msg-value-loop` | [msg.value внутри цикла](https://github.com/crytic/slither/wiki/Detector-Documentation/#msgvalue-inside-a-loop) | High | Medium
24 | `reentrancy-eth` | [Уязвимости повторного входа (хищение эфиров)](https://github.com/crytic/slither/wiki/Detector-Documentation#reentrancy-vulnerabilities) | High | Medium
25 | `reentrancy-balance` | [Уязвимости повторного входа, приводящие к устаревшим проверкам баланса](https://github.com/crytic/slither/wiki/Detector-Documentation#reentrancy-vulnerabilities-4) | High | Medium
26 | `return-leave` | [Если `return` используется вместо `leave`.](https://github.com/crytic/slither/wiki/Detector-Documentation#return-instead-of-leave-in-assembly) | High | Medium
27 | `storage-array` | [Ошибка компилятора для массива целых чисел со знаком в хранилище](https://github.com/crytic/slither/wiki/Detector-Documentation#storage-signed-integer-array) | High | Medium
28 | `unchecked-transfer` | [Непроверенный перевод токенов](https://github.com/crytic/slither/wiki/Detector-Documentation#unchecked-transfer) | High | Medium
29 | `weak-prng` | [Слабый ГПСЧ](https://github.com/crytic/slither/wiki/Detector-Documentation#weak-PRNG) | High | Medium
30 | `domain-separator-collision` | [Обнаруживает токены ERC20, у которых есть функция, сигнатура которой совпадает с DOMAIN_SEPARATOR() из EIP-2612](https://github.com/crytic/slither/wiki/Detector-Documentation#domain-separator-collision) | Medium | High
31 | `enum-conversion` | [Обнаруживает опасное преобразование перечисления](https://github.com/crytic/slither/wiki/Detector-Documentation#dangerous-enum-conversion) | Medium | High
32 | `erc20-interface` | [Некорректные интерфейсы ERC20](https://github.com/crytic/slither/wiki/Detector-Documentation#incorrect-erc20-interface) | Medium | High
33 | `erc721-interface` | [Некорректные интерфейсы ERC721](https://github.com/crytic/slither/wiki/Detector-Documentation#incorrect-erc721-interface) | Medium | High
34 | `incorrect-equality` | [Опасные строгие равенства](https://github.com/crytic/slither/wiki/Detector-Documentation#dangerous-strict-equalities) | Medium | High
35 | `locked-ether` | [Контракты, которые блокируют эфир](https://github.com/crytic/slither/wiki/Detector-Documentation#contracts-that-lock-ether) | Medium | High
36 | `mapping-deletion` | [Удаление по отображению, содержащему структуру](https://github.com/crytic/slither/wiki/Detector-Documentation#deletion-on-mapping-containing-a-structure) | Medium | High
37 | `pyth-deprecated-functions` | [Обнаруживает устаревшие функции Pyth](https://github.com/crytic/slither/wiki/Detector-Documentation#pyth-deprecated-functions) | Medium | High
38 | `pyth-unchecked-confidence` | [Обнаруживает, когда не проверяется уровень уверенности цены Pyth](https://github.com/crytic/slither/wiki/Detector-Documentation#pyth-unchecked-confidence-level) | Medium | High
39 | `pyth-unchecked-publishtime` | [Обнаруживает, когда не проверяется publishTime цены Pyth](https://github.com/crytic/slither/wiki/Detector-Documentation#pyth-unchecked-publishtime) | Medium | High
40 | `shadowing-abstract` | [Затенение переменных состояния из абстрактных контрактов](https://github.com/crytic/slither/wiki/Detector-Documentation#state-variable-shadowing-from-abstract-contracts) | Medium | High
41 | `tautological-compare` | [Сравнение переменной с самой собой всегда возвращает true или false в зависимости от сравнения](https://github.com/crytic/slither/wiki/Detector-Documentation#tautological-compare) | Medium | High
42 | `tautology` | [Тавтология или противоречие](https://github.com/crytic/slither/wiki/Detector-Documentation#tautology-or-contradiction) | Medium | High
43 | `write-after-write` | [Неиспользуемая запись](https://github.com/crytic/slither/wiki/Detector-Documentation#write-after-write) | Medium | High
44 | `boolean-cst` | [Неправильное использование логической константы](https://github.com/crytic/slither/wiki/Detector-Documentation#misuse-of-a-boolean-constant) | Medium | Medium
45 | `chronicle-unchecked-price` | [Обнаруживает, когда не проверяется цена Chronicle.](https://github.com/crytic/slither/wiki/Detector-Documentation#chronicle-unchecked-price) | Medium | Medium
46 | `constant-function-asm` | [Константные функции, использующие ассемблерный код](https://github.com/crytic/slither/wiki/Detector-Documentation#constant-functions-using-assembly-code) | Medium | Medium
47 | `constant-function-state` | [Константные функции, изменяющие состояние](https://github.com/crytic/slither/wiki/Detector-Documentation#constant-functions-changing-the-state) | Medium | Medium
48 | `divide-before-multiply` | [Неточный порядок арифметических операций](https://github.com/crytic/slither/wiki/Detector-Documentation#divide-before-multiply) | Medium | Medium
49 | `gelato-unprotected-randomness` | [Вызов `_requestRandomness` в незащищённой функции](https://github.com/crytic/slither/wiki/Detector-Documentation#gelato-unprotected-randomness) | Medium | Medium
50 | `out-of-order-retryable` | [Транзакции retryable с нарушением порядка](https://github.com/crytic/slither/wiki/Detector-Documentation#out-of-order-retryable-transactions) | Medium | Medium
51 | `reentrancy-no-eth` | [Уязвимости повторного входа (без хищения эфиров)](https://github.com/crytic/slither/wiki/Detector-Documentation#reentrancy-vulnerabilities-1) | Medium | Medium
52 | `reused-constructor` | [Повторно используемый базовый конструктор](https://github.com/crytic/slither/wiki/Detector-Documentation#reused-base-constructors) | Medium | Medium
53 | `tx-origin` | [Опасное использование `tx.origin`](https://github.com/crytic/slither/wiki/Detector-Documentation#dangerous-usage-of-txorigin) | Medium | Medium
54 | `unchecked-lowlevel` | [Непроверенные низкоуровневые вызовы](https://github.com/crytic/slither/wiki/Detector-Documentation#unchecked-low-level-calls) | Medium | Medium
55 | `unchecked-send` | [Непроверенная отправка](https://github.com/crytic/slither/wiki/Detector-Documentation#unchecked-send) | Medium | Medium
56 | `uninitialized-local` | [Неинициализированные локальные переменные](https://github.com/crytic/slither/wiki/Detector-Documentation#uninitialized-local-variables) | Medium | Medium
57 | `unused-return` | [Неиспользуемые возвращаемые значения](https://github.com/crytic/slither/wiki/Detector-Documentation#unused-return) | Medium | Medium
58 | `chainlink-feed-registry` | [Обнаруживает использование реестра фидов Chainlink](https://github.com/crytic/slither/wiki/Detector-Documentation#chainlink-feed-registry-usage) | Low | High
59 | `incorrect-modifier` | [Модификаторы, которые могут возвращать значение по умолчанию](https://github.com/crytic/slither/wiki/Detector-Documentation#incorrect-modifier) | Low | High
60 | `optimism-deprecation` | [Обнаруживает использование устаревших predeploy или функций Optimism.](https://github.com/crytic/slither/wiki/Detector-Documentation#optimism-deprecated-predeploy-or-function) | Low | High
61 | `shadowing-builtin` | [Затенение встроенных символов](https://github.com/crytic/slither/wiki/Detector-Documentation#builtin-symbol-shadowing) | Low | High
62 | `shadowing-local` | [Затенение локальных переменных](https://github.com/crytic/slither/wiki/Detector-Documentation#local-variable-shadowing) | Low | High
63 | `uninitialized-fptr-cst` | [Вызов неинициализированных указателей на функции в конструкторах](https://github.com/crytic/slither/wiki/Detector-Documentation#uninitialized-function-pointers-in-constructors) | Low | High
64 | `variable-scope` | [Локальные переменные, используемые до их объявления](https://github.com/crytic/slither/wiki/Detector-Documentation#pre-declaration-usage-of-local-variables) | Low | High
65 | `void-cst` | [Вызов конструктора, который не реализован](https://github.com/crytic/slither/wiki/Detector-Documentation#void-constructor) | Low | High
66 | `calls-loop` | [Множественные вызовы в цикле](https://github.com/crytic/slither/wiki/Detector-Documentation/#calls-inside-a-loop) | Low | Medium
67 | `events-access` | [Отсутствие событий контроля доступа](https://github.com/crytic/slither/wiki/Detector-Documentation#missing-events-access-control) | Low | Medium
68 | `events-maths` | [Отсутствие событий арифметики](https://github.com/crytic/slither/wiki/Detector-Documentation#missing-events-arithmetic) | Low | Medium
69 | `incorrect-unary` | [Опасные унарные выражения](https://github.com/crytic/slither/wiki/Detector-Documentation#dangerous-unary-expressions) | Low | Medium
70 | `missing-zero-check` | [Отсутствие проверки нулевого адреса](https://github.com/crytic/slither/wiki/Detector-Documentation#missing-zero-address-validation) | Low | Medium
71 | `reentrancy-benign` | [Безвредные уязвимости повторного входа](https://github.com/crytic/slither/wiki/Detector-Documentation#reentrancy-vulnerabilities-2) | Low | Medium
72 | `reentrancy-events` | [Уязвимости повторного входа, приводящие к событиям в неправильном порядке](https://github.com/crytic/slither/wiki/Detector-Documentation#reentrancy-vulnerabilities-3) | Low | Medium
73 | `return-bomb` | [Низкоуровневый вызываемый код может неожиданно израсходовать весь газ вызывающего.](https://github.com/crytic/slither/wiki/Detector-Documentation#return-bomb) | Low | Medium
74 | `timestamp` | [Опасное использование `block.timestamp`](https://github.com/crytic/slither/wiki/Detector-Documentation#block-timestamp) | Low | Medium
75 | `assembly` | [Использование ассемблера](https://github.com/crytic/slither/wiki/Detector-Documentation#assembly-usage) | Informational | High
76 | `assert-state-change` | [Изменение состояния в assert](https://github.com/crytic/slither/wiki/Detector-Documentation#assert-state-change) | Informational | High
77 | `boolean-equal` | [Сравнение с логической константой](https://github.com/crytic/slither/wiki/Detector-Documentation#boolean-equality) | Informational | High
78 | `cyclomatic-complexity` | [Обнаруживает функции с высокой (> 11) цикломатической сложностью](https://github.com/crytic/slither/wiki/Detector-Documentation#cyclomatic-complexity) | Informational | High
79 | `deprecated-standards` | [Устаревшие стандарты Solidity](https://github.com/crytic/slither/wiki/Detector-Documentation#deprecated-standards) | Informational | High
80 | `erc20-indexed` | [Неиндексированные параметры событий ERC20](https://github.com/crytic/slither/wiki/Detector-Documentation#unindexed-erc20-event-parameters) | Informational | High
81 | `function-init-state` | [Функция, инициализирующая переменные состояния](https://github.com/crytic/slither/wiki/Detector-Documentation#function-initializing-state) | Informational | High
82 | `incorrect-using-for` | [Обнаруживает использование оператора using-for, когда ни одна функция из данной библиотеки не соответствует данному типу](https://github.com/crytic/slither/wiki/Detector-Documentation#incorrect-usage-of-using-for-statement) | Informational | High
83 | `low-level-calls` | [Низкоуровневые вызовы](https://github.com/crytic/slither/wiki/Detector-Documentation#low-level-calls) | Informational | High
84 | `missing-inheritance` | [Отсутствие наследования](https://github.com/crytic/slither/wiki/Detector-Documentation#missing-inheritance) | Informational | High
85 | `naming-convention` | [Соответствие соглашениям об именах Solidity](https://github.com/crytic/slither/wiki/Detector-Documentation#conformance-to-solidity-naming-conventions) | Informational | High
86 | `pragma` | [Если используются разные директивы pragma](https://github.com/crytic/slither/wiki/Detector-Documentation#different-pragma-directives-are-used) | Informational | High
87 | `redundant-statements` | [Избыточные операторы](https://github.com/crytic/slither/wiki/Detector-Documentation#redundant-statements) | Informational | High
88 | `solc-version` | [Некорректная версия Solidity](https://github.com/crytic/slither/wiki/Detector-Documentation#incorrect-versions-of-solidity) | Informational | High
89 | `unimplemented-functions` | [Нереализованные функции](https://github.com/crytic/slither/wiki/Detector-Documentation#unimplemented-functions) | Informational | High
90 | `unindexed-event-address` | [События с параметрами address, но без индексированных параметров](https://github.com/crytic/slither/wiki/Detector-Documentation#unindexed-event-address-parameters) | Informational | High
91 | `unused-state` | [Неиспользуемые переменные состояния](https://github.com/crytic/slither/wiki/Detector-Documentation#unused-state-variable) | Informational | High
92 | `costly-loop` | [Дорогостоящие операции в цикле](https://github.com/crytic/slither/wiki/Detector-Documentation#costly-operations-inside-a-loop) | Informational | Medium
93 | `dead-code` | [Функции, которые не используются](https://github.com/crytic/slither/wiki/Detector-Documentation#dead-code) | Informational | Medium
94 | `reentrancy-unlimited-gas` | [Уязвимости повторного входа через send и transfer](https://github.com/crytic/slither/wiki/Detector-Documentation#reentrancy-vulnerabilities-4) | Informational | Medium
95 | `too-many-digits` | [Соответствие лучшим практикам числовой нотации](https://github.com/crytic/slither/wiki/Detector-Documentation#too-many-digits) | Informational | Medium
96 | `cache-array-length` | [Обнаруживает циклы `for`, которые используют член `length` некоторого массива хранилища в условии цикла и не изменяют его.](https://github.com/crytic/slither/wiki/Detector-Documentation#cache-array-length) | Optimization | High
97 | `constable-states` | [Переменные состояния, которые можно объявить константами](https://github.com/crytic/slither/wiki/Detector-Documentation#state-variables-that-could-be-declared-constant) | Optimization | High
98 | `external-function` | [Публичная функция, которую можно объявить внешней](https://github.com/crytic/slither/wiki/Detector-Documentation#public-function-that-could-be-declared-external) | Optimization | High
99 | `immutable-states` | [Переменные состояния, которые можно объявить неизменяемыми](https://github.com/crytic/slither/wiki/Detector-Documentation#state-variables-that-could-be-declared-immutable) | Optimization | High
100 | `var-read-using-this` | [Контракт читает свою собственную переменную, используя `this`](https://github.com/crytic/slither/wiki/Detector-Documentation#public-variable-read-in-external-context) | Optimization | High
Для получения дополнительной информации см.
* [Документацию по детекторам](https://github.com/crytic/slither/wiki/Detector-Documentation) для подробностей о каждом детекторе
* [Выбор детекторов](https://github.com/crytic/slither/wiki/Usage#detector-selection) для запуска только выбранных детекторов. По умолчанию запускаются все детекторы.
* [Режим триажа](https://github.com/crytic/slither/wiki/Usage#triage-mode) для фильтрации отдельных результатов
## Принтеры
### Принтеры быстрого обзора
* `human-summary`: [Вывести удобочитаемую сводку по контрактам](https://github.com/trailofbits/slither/wiki/Printer-documentation#human-summary)
* `inheritance-graph`: [Экспортировать граф наследования каждого контракта в dot-файл](https://github.com/trailofbits/slither/wiki/Printer-documentation#inheritance-graph)
* `contract-summary`: [Вывести сводку по контрактам](https://github.com/trailofbits/slither/wiki/Printer-documentation#contract-summary)
* `loc`: [Подсчитать общее количество строк кода (LOC), исходных строк кода (SLOC) и строк комментариев (CLOC) в исходных файлах (SRC), зависимостях (DEP) и тестовых файлах (TEST).](https://github.com/trailofbits/slither/wiki/Printer-documentation#loc)
* `entry-points`: [Вывести все изменяющие состояние точки входа и их переменные контрактов](https://github.com/trailofbits/slither/wiki/Printer-documentation#entry-points)
### Принтеры углублённого обзора* `call-graph`: [Экспортировать граф вызовов контрактов в dot-файл](https://github.com/crytic/slither/wiki/Printer-documentation#call-graph)
* `cfg`: [Экспортировать CFG каждой функции](https://github.com/crytic/slither/wiki/Printer-documentation#cfg)
* `function-summary`: [Вывести сводку по функциям](https://github.com/crytic/slither/wiki/Printer-documentation#function-summary)
```
---
[Read more](https://github.com/crytic/slither)