Skip to content
KitploitKITPLOIT
FerramentasExploitsBlog
Log in
Enviar
FerramentasExploitsBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

FeedsContatoPrivacidade© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
slither — Analisador Estático para Solidity e Vyper | Kitploit
Ferramentas/GitHubGitHub/crytic/slither
Análise EstáticaAnálise de VulnerabilidadesAnálise de Código
GitHubcrytic/slither

slither

Analisador Estático para Solidity e Vyper

Ver RepositórioSite
6.3k1.1k54há 4 diasRevisado pelo Kitploit

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar
# [Slither, o analisador estático de contratos inteligentes](https://crytic.github.io/slither/slither.html)

<img src="https://assets.kitploit.com/production/public/readmes/2943/62b8c109c585043091c50668ec219aa530aa6d589d7cda02181bf209249f5205.png" alt="Slither Static Analysis Framework Logo" width="500" />

[![Build Status](https://img.shields.io/github/actions/workflow/status/crytic/slither/ci.yml?branch=master)](https://github.com/crytic/slither/actions?query=workflow%3ACI)
![PyPI](https://img.shields.io/pypi/v/slither-analyzer?logo=python&logoColor=white&label=slither-analyzer)
[![Slither - Read the Docs](https://img.shields.io/badge/Slither-Read_the_Docs-2ea44f)](https://crytic.github.io/slither/slither.html)
[![Slither - Wiki](https://img.shields.io/badge/Slither-Wiki-2ea44f)](https://github.com/crytic/slither/wiki/SlithIR)

> Junte-se ao Slack do Empire Hacking
>
> [![Slack Status](https://slack.empirehacking.nyc/badge.svg)](https://slack.empirehacking.nyc/)
> > _- Discussões e Suporte_

**Slither** é um framework de análise estática para Solidity e Vyper escrito em Python3. Ele executa um conjunto de detectores de vulnerabilidades, exibe informações visuais sobre detalhes dos contratos e fornece uma API para escrever análises personalizadas facilmente. Slither permite que desenvolvedores encontrem vulnerabilidades, melhorem sua compreensão do código e criem protótipos rapidamente de análises personalizadas.

* [Funcionalidades](#features)
* [Uso](#usage)
* [Como instalar](#how-to-install)
  * [Usando uv (Recomendado)](#using-uv-recommended)
  * [Usando Pip](#using-pip)
  * [Usando Git](#using-git-development)
  * [Usando Docker](#using-docker)
  * [Integração](#integration)
* [Detectores](#detectors)
* [Relatórios](#printers)
  * [Relatórios de Revisão Rápida](#quick-review-printers)
  * [Relatórios de Revisão Detalhada](#in-depth-review-printers)
* [Ferramentas](#tools)
* [Documentação da API](#api-documentation)
* [Obtendo Ajuda](#getting-help)
* [FAQ](#faq)
* [Licença](#license)
* [Publicações](#publications)
  * [Publicação da Trail of Bits](#trail-of-bits-publication)
  * [Publicações externas](#external-publications)

## Funcionalidades

* Detecta código Solidity vulnerável com baixas taxas de falsos positivos (veja a lista de [troféus](https://github.com/crytic/slither/blob/master/trophies.md))
* Identifica onde a condição de erro ocorre no código-fonte
* Integra-se facilmente em integração contínua e builds Hardhat/Foundry
* Os 'printers' integrados relatam rapidamente informações cruciais do contrato
* API de detectores para escrever análises personalizadas em Python
* Capacidade de analisar contratos escritos com Solidity >= 0.4
* Representação intermediária ([SlithIR](https://github.com/crytic/slither/wiki/SlithIR)) possibilita análises simples e de alta precisão
* Analisa corretamente 99.9% de todo o código Solidity público
* Tempo médio de execução de menos de 1 segundo por contrato
* Integra-se com a varredura de código do Github em [CI](https://github.com/marketplace/actions/slither-action)
* Suporte para contratos inteligentes Vyper

## Uso

Execute o Slither em uma aplicação Hardhat/Foundry/Dapp/Brownie:```console
slither .
```
Esta é a opção preferida se o seu projeto possui dependências, já que o Slither depende da estrutura de compilação subjacente para compilar o código-fonte.

No entanto, você pode executar o Slither em um único arquivo que não importa dependências:```console
slither tests/uninitialized.sol
```
## Como instalar

> **Nota**
> O Slither requer Python 3.10+.
Se você **não** for usar um dos [frameworks de compilação suportados](https://github.com/crytic/crytic-compile), precisará do [solc](https://github.com/ethereum/solidity/), o compilador Solidity; recomendamos usar o [solc-select](https://github.com/crytic/solc-select) para alternar convenientemente entre versões do solc.

### Usando uv (Recomendado)

O [uv](https://github.com/astral-sh/uv) é um gerenciador de pacotes Python rápido, 10 a 100 vezes mais rápido que o 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>
```
Para atualizar:```console
uv tool upgrade slither-analyzer
```
### Usando Pip```console
python3 -m pip install slither-analyzer
```
Para atualizar:```console
python3 -m pip install --upgrade slither-analyzer
```
### Usando Brew```console
brew install slither-analyzer
```
### Usando Git (Desenvolvimento)```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>
```
A flag `-e` instala em modo editável, o que significa que as alterações no código-fonte são refletidas imediatamente sem necessidade de reinstalação.

### Usando Docker

Use a imagem docker [`eth-security-toolbox`](https://github.com/crytic/eth-security-toolbox/). Ela inclui todas as nossas ferramentas de segurança e todas as principais versões do Solidity em uma única imagem. `/home/share` será montado em `/share` no contêiner.```bash
docker pull trailofbits/eth-security-toolbox
```
Para compartilhar um diretório no contêiner:```bash
docker run -it -v /home/share:/share trailofbits/eth-security-toolbox
```
### Integração

* Para integração com GitHub action, use [slither-action](https://github.com/marketplace/actions/slither-action).
* Para integração com pre-commit, use (substitua `$GIT_TAG` pela tag real)  ```YAML
  - repo: https://github.com/crytic/slither
    rev: $GIT_TAG
    hooks:
      - id: slither
  ```
* Para gerar um relatório Markdown, use `slither [target] --checklist`.
* Para gerar um Markdown com realce de código fonte do GitHub, use `slither [target] --checklist --markdown-root https://github.com/ORG/REPO/blob/COMMIT/` (substitua `ORG`, `REPO`, `COMMIT`)

## Detectores

Num | Detector | O que Detecta | Impacto | Confiança
--- | --- | --- | --- | ---
1 | `abiencoderv2-array` | [Array abiencoderv2 de armazenamento](https://github.com/crytic/slither/wiki/Detector-Documentation#storage-abiencoderv2-array) | Alto | Alta
2 | `arbitrary-send-erc20` | [transferFrom usa `from` arbitrário](https://github.com/crytic/slither/wiki/Detector-Documentation#arbitrary-from-in-transferfrom) | Alto | Alta
3 | `array-by-reference` | [Modificando array de armazenamento por valor](https://github.com/crytic/slither/wiki/Detector-Documentation#modifying-storage-array-by-value) | Alto | Alta
4 | `encode-packed-collision` | [Colisão de ABI encodePacked](https://github.com/crytic/slither/wiki/Detector-Documentation#abi-encodePacked-collision) | Alto | Alta
5 | `incorrect-shift` | [A ordem dos parâmetros em uma instrução de shift está incorreta.](https://github.com/crytic/slither/wiki/Detector-Documentation#incorrect-shift-in-assembly) | Alto | Alta
6 | `multiple-constructors` | [Esquemas de múltiplos construtores](https://github.com/crytic/slither/wiki/Detector-Documentation#multiple-constructor-schemes) | Alto | Alta
7 | `name-reused` | [Nome de contrato reutilizado](https://github.com/crytic/slither/wiki/Detector-Documentation#name-reused) | Alto | Alta
8 | `protected-vars` | [Variáveis não protegidas detectadas](https://github.com/crytic/slither/wiki/Detector-Documentation#protected-variables) | Alto | Alta
9 | `public-mappings-nested` | [Mapeamentos públicos com variáveis aninhadas](https://github.com/crytic/slither/wiki/Detector-Documentation#public-mappings-with-nested-variables) | Alto | Alta
10 | `rtlo` | [Caractere de controle Right-To-Left-Override é usado](https://github.com/crytic/slither/wiki/Detector-Documentation#right-to-left-override-character) | Alto | Alta
11 | `shadowing-state` | [Sombra de variáveis de estado](https://github.com/crytic/slither/wiki/Detector-Documentation#state-variable-shadowing) | Alto | Alta
12 | `suicidal` | [Funções que permitem a qualquer um destruir o contrato](https://github.com/crytic/slither/wiki/Detector-Documentation#suicidal) | Alto | Alta
13 | `uninitialized-state` | [Variáveis de estado não inicializadas](https://github.com/crytic/slither/wiki/Detector-Documentation#uninitialized-state-variables) | Alto | Alta
14 | `uninitialized-storage` | [Variáveis de armazenamento não inicializadas](https://github.com/crytic/slither/wiki/Detector-Documentation#uninitialized-storage-variables) | Alto | Alta
15 | `unprotected-upgrade` | [Contrato atualizável não protegido](https://github.com/crytic/slither/wiki/Detector-Documentation#unprotected-upgradeable-contract) | Alto | Alta
16 | `arbitrary-send-erc20-permit` | [transferFrom usa from arbitrário com permit](https://github.com/crytic/slither/wiki/Detector-Documentation#arbitrary-from-in-transferfrom-used-with-permit) | Alto | Média
17 | `arbitrary-send-eth` | [Funções que enviam Ether para destinos arbitrários](https://github.com/crytic/slither/wiki/Detector-Documentation#functions-that-send-ether-to-arbitrary-destinations) | Alto | Média
18 | `controlled-array-length` | [Atribuição de comprimento de array contaminado](https://github.com/crytic/slither/wiki/Detector-Documentation#array-length-assignment) | Alto | Média
19 | `controlled-delegatecall` | [Destino de delegatecall controlado](https://github.com/crytic/slither/wiki/Detector-Documentation#controlled-delegatecall) | Alto | Média
20 | `delegatecall-loop` | [Funções pagáveis que usam `delegatecall` dentro de um loop](https://github.com/crytic/slither/wiki/Detector-Documentation/#payable-functions-using-delegatecall-inside-a-loop) | Alto | Média
21 | `incorrect-exp` | [Exponenciação incorreta](https://github.com/crytic/slither/wiki/Detector-Documentation#incorrect-exponentiation) | Alto | Média
22 | `incorrect-return` | [Se um `return` for usado incorretamente no modo assembly.](https://github.com/crytic/slither/wiki/Detector-Documentation#incorrect-return-in-assembly) | Alto | Média
23 | `msg-value-loop` | [msg.value dentro de um loop](https://github.com/crytic/slither/wiki/Detector-Documentation/#msgvalue-inside-a-loop) | Alto | Média
24 | `reentrancy-eth` | [Vulnerabilidades de reentrância (roubo de ethers)](https://github.com/crytic/slither/wiki/Detector-Documentation#reentrancy-vulnerabilities) | Alto | Média
25 | `reentrancy-balance` | [Vulnerabilidades de reentrância que levam a verificações de saldo desatualizadas](https://github.com/crytic/slither/wiki/Detector-Documentation#reentrancy-vulnerabilities-4) | Alto | Média
26 | `return-leave` | [Se um `return` é usado em vez de um `leave`.](https://github.com/crytic/slither/wiki/Detector-Documentation#return-instead-of-leave-in-assembly) | Alto | Média
27 | `storage-array` | [Bug do compilador de array de inteiros com sinal em armazenamento](https://github.com/crytic/slither/wiki/Detector-Documentation#storage-signed-integer-array) | Alto | Média
28 | `unchecked-transfer` | [Transferência de tokens não verificada](https://github.com/crytic/slither/wiki/Detector-Documentation#unchecked-transfer) | Alto | Média
29 | `weak-prng` | [PRNG fraco](https://github.com/crytic/slither/wiki/Detector-Documentation#weak-PRNG) | Alto | Média
30 | `domain-separator-collision` | [Detecta tokens ERC20 que possuem uma função cuja assinatura colide com DOMAIN_SEPARATOR() do EIP-2612](https://github.com/crytic/slither/wiki/Detector-Documentation#domain-separator-collision) | Médio | Alta
31 | `enum-conversion` | [Detecta conversão perigosa de enum](https://github.com/crytic/slither/wiki/Detector-Documentation#dangerous-enum-conversion) | Médio | Alta
32 | `erc20-interface` | [Interfaces ERC20 incorretas](https://github.com/crytic/slither/wiki/Detector-Documentation#incorrect-erc20-interface) | Médio | Alta
33 | `erc721-interface` | [Interfaces ERC721 incorretas](https://github.com/crytic/slither/wiki/Detector-Documentation#incorrect-erc721-interface) | Médio | Alta
34 | `incorrect-equality` | [Igualdades estritas perigosas](https://github.com/crytic/slither/wiki/Detector-Documentation#dangerous-strict-equalities) | Médio | Alta
35 | `locked-ether` | [Contratos que bloqueiam ether](https://github.com/crytic/slither/wiki/Detector-Documentation#contracts-that-lock-ether) | Médio | Alta
36 | `mapping-deletion` | [Exclusão em mapeamento contendo uma estrutura](https://github.com/crytic/slither/wiki/Detector-Documentation#deletion-on-mapping-containing-a-structure) | Médio | Alta
37 | `pyth-deprecated-functions` | [Detecta funções obsoletas do Pyth](https://github.com/crytic/slither/wiki/Detector-Documentation#pyth-deprecated-functions) | Médio | Alta
38 | `pyth-unchecked-confidence` | [Detecta quando o nível de confiança de um preço Pyth não é verificado](https://github.com/crytic/slither/wiki/Detector-Documentation#pyth-unchecked-confidence-level) | Médio | Alta
39 | `pyth-unchecked-publishtime` | [Detecta quando o publishTime de um preço Pyth não é verificado](https://github.com/crytic/slither/wiki/Detector-Documentation#pyth-unchecked-publishtime) | Médio | Alta
40 | `shadowing-abstract` | [Sombra de variáveis de estado de contratos abstratos](https://github.com/crytic/slither/wiki/Detector-Documentation#state-variable-shadowing-from-abstract-contracts) | Médio | Alta
41 | `tautological-compare` | [Comparar uma variável consigo mesma sempre retorna true ou false, dependendo da comparação](https://github.com/crytic/slither/wiki/Detector-Documentation#tautological-compare) | Médio | Alta
42 | `tautology` | [Tautologia ou contradição](https://github.com/crytic/slither/wiki/Detector-Documentation#tautology-or-contradiction) | Médio | Alta
43 | `write-after-write` | [Escrita não utilizada](https://github.com/crytic/slither/wiki/Detector-Documentation#write-after-write) | Médio | Alta
44 | `boolean-cst` | [Uso incorreto de constante booleana](https://github.com/crytic/slither/wiki/Detector-Documentation#misuse-of-a-boolean-constant) | Médio | Média
45 | `chronicle-unchecked-price` | [Detecta quando o preço Chronicle não é verificado.](https://github.com/crytic/slither/wiki/Detector-Documentation#chronicle-unchecked-price) | Médio | Média
46 | `constant-function-asm` | [Funções constantes usando código assembly](https://github.com/crytic/slither/wiki/Detector-Documentation#constant-functions-using-assembly-code) | Médio | Média
47 | `constant-function-state` | [Funções constantes alterando o estado](https://github.com/crytic/slither/wiki/Detector-Documentation#constant-functions-changing-the-state) | Médio | Média
48 | `divide-before-multiply` | [Ordem imprecisa de operações aritméticas](https://github.com/crytic/slither/wiki/Detector-Documentation#divide-before-multiply) | Médio | Média
49 | `gelato-unprotected-randomness` | [Chamada para `_requestRandomness` dentro de uma função não protegida](https://github.com/crytic/slither/wiki/Detector-Documentation#gelato-unprotected-randomness) | Médio | Média
50 | `out-of-order-retryable` | [Transações retryable fora de ordem](https://github.com/crytic/slither/wiki/Detector-Documentation#out-of-order-retryable-transactions) | Médio | Média
51 | `reentrancy-no-eth` | [Vulnerabilidades de reentrância (sem roubo de ethers)](https://github.com/crytic/slither/wiki/Detector-Documentation#reentrancy-vulnerabilities-1) | Médio | Média
52 | `reused-constructor` | [Construtor base reutilizado](https://github.com/crytic/slither/wiki/Detector-Documentation#reused-base-constructors) | Médio | Média
53 | `tx-origin` | [Uso perigoso de `tx.origin`](https://github.com/crytic/slither/wiki/Detector-Documentation#dangerous-usage-of-txorigin) | Médio | Média
54 | `unchecked-lowlevel` | [Chamadas de baixo nível não verificadas](https://github.com/crytic/slither/wiki/Detector-Documentation#unchecked-low-level-calls) | Médio | Média
55 | `unchecked-send` | [Send não verificado](https://github.com/crytic/slither/wiki/Detector-Documentation#unchecked-send) | Médio | Média
56 | `uninitialized-local` | [Variáveis locais não inicializadas](https://github.com/crytic/slither/wiki/Detector-Documentation#uninitialized-local-variables) | Médio | Média
57 | `unused-return` | [Valores de retorno não utilizados](https://github.com/crytic/slither/wiki/Detector-Documentation#unused-return) | Médio | Média
58 | `chainlink-feed-registry` | [Detecta quando o registro de feed do Chainlink é usado](https://github.com/crytic/slither/wiki/Detector-Documentation#chainlink-feed-registry-usage) | Baixo | Alta
59 | `incorrect-modifier` | [Modificadores que podem retornar o valor padrão](https://github.com/crytic/slither/wiki/Detector-Documentation#incorrect-modifier) | Baixo | Alta
60 | `optimism-deprecation` | [Detecta quando um predeploy ou função obsoleta do Optimism é usado.](https://github.com/crytic/slither/wiki/Detector-Documentation#optimism-deprecated-predeploy-or-function) | Baixo | Alta
61 | `shadowing-builtin` | [Sombra de símbolo embutido](https://github.com/crytic/slither/wiki/Detector-Documentation#builtin-symbol-shadowing) | Baixo | Alta
62 | `shadowing-local` | [Sombra de variáveis locais](https://github.com/crytic/slither/wiki/Detector-Documentation#local-variable-shadowing) | Baixo | Alta
63 | `uninitialized-fptr-cst` | [Chamadas de ponteiro de função não inicializadas em construtores](https://github.com/crytic/slither/wiki/Detector-Documentation#uninitialized-function-pointers-in-constructors) | Baixo | Alta
64 | `variable-scope` | [Variáveis locais usadas antes de sua declaração](https://github.com/crytic/slither/wiki/Detector-Documentation#pre-declaration-usage-of-local-variables) | Baixo | Alta
65 | `void-cst` | [Construtor chamado não implementado](https://github.com/crytic/slither/wiki/Detector-Documentation#void-constructor) | Baixo | Alta
66 | `calls-loop` | [Múltiplas chamadas em um loop](https://github.com/crytic/slither/wiki/Detector-Documentation/#calls-inside-a-loop) | Baixo | Média
67 | `events-access` | [Eventos de controle de acesso ausentes](https://github.com/crytic/slither/wiki/Detector-Documentation#missing-events-access-control) | Baixo | Média
68 | `events-maths` | [Eventos aritméticos ausentes](https://github.com/crytic/slither/wiki/Detector-Documentation#missing-events-arithmetic) | Baixo | Média
69 | `incorrect-unary` | [Expressões unárias perigosas](https://github.com/crytic/slither/wiki/Detector-Documentation#dangerous-unary-expressions) | Baixo | Média
70 | `missing-zero-check` | [Validação de endereço zero ausente](https://github.com/crytic/slither/wiki/Detector-Documentation#missing-zero-address-validation) | Baixo | Média
71 | `reentrancy-benign` | [Vulnerabilidades de reentrância benignas](https://github.com/crytic/slither/wiki/Detector-Documentation#reentrancy-vulnerabilities-2) | Baixo | Média
72 | `reentrancy-events` | [Vulnerabilidades de reentrância que levam a Eventos fora de ordem](https://github.com/crytic/slither/wiki/Detector-Documentation#reentrancy-vulnerabilities-3) | Baixo | Média
73 | `return-bomb` | [Uma função chamada de baixo nível pode consumir todo o gas do chamador inesperadamente.](https://github.com/crytic/slither/wiki/Detector-Documentation#return-bomb) | Baixo | Média
74 | `timestamp` | [Uso perigoso de `block.timestamp`](https://github.com/crytic/slither/wiki/Detector-Documentation#block-timestamp) | Baixo | Média
75 | `assembly` | [Uso de assembly](https://github.com/crytic/slither/wiki/Detector-Documentation#assembly-usage) | Informativo | Alta
76 | `assert-state-change` | [Mudança de estado em assert](https://github.com/crytic/slither/wiki/Detector-Documentation#assert-state-change) | Informativo | Alta
77 | `boolean-equal` | [Comparação com constante booleana](https://github.com/crytic/slither/wiki/Detector-Documentation#boolean-equality) | Informativo | Alta
78 | `cyclomatic-complexity` | [Detecta funções com complexidade ciclomática alta (> 11)](https://github.com/crytic/slither/wiki/Detector-Documentation#cyclomatic-complexity) | Informativo | Alta
79 | `deprecated-standards` | [Padrões Solidity obsoletos](https://github.com/crytic/slither/wiki/Detector-Documentation#deprecated-standards) | Informativo | Alta
80 | `erc20-indexed` | [Parâmetros de evento ERC20 não indexados](https://github.com/crytic/slither/wiki/Detector-Documentation#unindexed-erc20-event-parameters) | Informativo | Alta
81 | `function-init-state` | [Função inicializando variáveis de estado](https://github.com/crytic/slither/wiki/Detector-Documentation#function-initializing-state) | Informativo | Alta
82 | `incorrect-using-for` | [Detecta uso de using-for quando nenhuma função de uma biblioteca corresponde a um tipo](https://github.com/crytic/slither/wiki/Detector-Documentation#incorrect-usage-of-using-for-statement) | Informativo | Alta
83 | `low-level-calls` | [Chamadas de baixo nível](https://github.com/crytic/slither/wiki/Detector-Documentation#low-level-calls) | Informativo | Alta
84 | `missing-inheritance` | [Herança ausente](https://github.com/crytic/slither/wiki/Detector-Documentation#missing-inheritance) | Informativo | Alta
85 | `naming-convention` | [Conformidade com convenções de nomenclatura Solidity](https://github.com/crytic/slither/wiki/Detector-Documentation#conformance-to-solidity-naming-conventions) | Informativo | Alta
86 | `pragma` | [Se diferentes diretivas pragma são usadas](https://github.com/crytic/slither/wiki/Detector-Documentation#different-pragma-directives-are-used) | Informativo | Alta
87 | `redundant-statements` | [Declarações redundantes](https://github.com/crytic/slither/wiki/Detector-Documentation#redundant-statements) | Informativo | Alta
88 | `solc-version` | [Versão Solidity incorreta](https://github.com/crytic/slither/wiki/Detector-Documentation#incorrect-versions-of-solidity) | Informativo | Alta
89 | `unimplemented-functions` | [Funções não implementadas](https://github.com/crytic/slither/wiki/Detector-Documentation#unimplemented-functions) | Informativo | Alta
90 | `unindexed-event-address` | [Eventos com parâmetros de endereço, mas nenhum parâmetro indexado](https://github.com/crytic/slither/wiki/Detector-Documentation#unindexed-event-address-parameters) | Informativo | Alta
91 | `unused-state` | [Variáveis de estado não utilizadas](https://github.com/crytic/slither/wiki/Detector-Documentation#unused-state-variable) | Informativo | Alta
92 | `costly-loop` | [Operações custosas em um loop](https://github.com/crytic/slither/wiki/Detector-Documentation#costly-operations-inside-a-loop) | Informativo | Média
93 | `dead-code` | [Funções que não são usadas](https://github.com/crytic/slither/wiki/Detector-Documentation#dead-code) | Informativo | Média
94 | `reentrancy-unlimited-gas` | [Vulnerabilidades de reentrância através de send e transfer](https://github.com/crytic/slither/wiki/Detector-Documentation#reentrancy-vulnerabilities-4) | Informativo | Média
95 | `too-many-digits` | [Conformidade com boas práticas de notação numérica](https://github.com/crytic/slither/wiki/Detector-Documentation#too-many-digits) | Informativo | Média
96 | `cache-array-length` | [Detecta loops `for` que usam o membro `length` de algum array de armazenamento em sua condição de loop e não o modificam.](https://github.com/crytic/slither/wiki/Detector-Documentation#cache-array-length) | Otimização | Alta
97 | `constable-states` | [Variáveis de estado que poderiam ser declaradas constantes](https://github.com/crytic/slither/wiki/Detector-Documentation#state-variables-that-could-be-declared-constant) | Otimização | Alta
98 | `external-function` | [Função pública que poderia ser declarada externa](https://github.com/crytic/slither/wiki/Detector-Documentation#public-function-that-could-be-declared-external) | Otimização | Alta
99 | `immutable-states` | [Variáveis de estado que poderiam ser declaradas imutáveis](https://github.com/crytic/slither/wiki/Detector-Documentation#state-variables-that-could-be-declared-immutable) | Otimização | Alta
100 | `var-read-using-this` | [Contrato lê sua própria variável usando `this`](https://github.com/crytic/slither/wiki/Detector-Documentation#public-variable-read-in-external-context) | Otimização | Alta

Para mais informações, veja

* A [Documentação dos Detectores](https://github.com/crytic/slither/wiki/Detector-Documentation) para detalhes sobre cada detector
* A [Seleção de Detecção](https://github.com/crytic/slither/wiki/Usage#detector-selection) para executar apenas detectores selecionados. Por padrão, todos os detectores são executados.
* O [Modo de Triagem](https://github.com/crytic/slither/wiki/Usage#triage-mode) para filtrar resultados individuais

## Impressoras

### Impressoras de Revisão Rápida

* `human-summary`: [Imprime um resumo legível por humanos dos contratos](https://github.com/trailofbits/slither/wiki/Printer-documentation#human-summary)
* `inheritance-graph`: [Exporta o gráfico de herança de cada contrato para um arquivo dot](https://github.com/trailofbits/slither/wiki/Printer-documentation#inheritance-graph)
* `contract-summary`: [Imprime um resumo dos contratos](https://github.com/trailofbits/slither/wiki/Printer-documentation#contract-summary)
* `loc`: [Conta o número total de linhas de código (LOC), linhas de código fonte (SLOC) e linhas de código de comentário (CLOC) encontradas em arquivos fonte (SRC), dependências (DEP) e arquivos de teste (TEST).](https://github.com/trailofbits/slither/wiki/Printer-documentation#loc)
* `entry-points`: [Imprime todas as funções de ponto de entrada que alteram estado e suas variáveis dos contratos](https://github.com/trailofbits/slither/wiki/Printer-documentation#entry-points)

### Impressoras de Revisão Detalhada* `call-graph`: [Exportar o grafo de chamadas dos contratos para um arquivo dot](https://github.com/crytic/slither/wiki/Printer-documentation#call-graph)
* `cfg`: [Exportar o CFG de cada função](https://github.com/crytic/slither/wiki/Printer-documentation#cfg)
* `function-summary`: [Imprimir um resumo das funções](https://github.com/crytic/slither/wiki/Printer-documentation#function-summary)
* `vars-and-auth`: [Imprimir as variáveis de estado escritas e a autorização das funções](https://github.com/crytic/slither/wiki/Printer-documentation#variables-written-and-authorization)
* `not-pausable`: [Imprimir funções que não usam o modificador `whenNotPaused`](https://github.com/crytic/slither/wiki/Printer-documentation#when-not-paused).

Para executar um printer, use `--print` e uma lista separada por vírgulas de printers.

Consulte a [Documentação do Printer](https://github.com/crytic/slither/wiki/Printer-documentation) para obter as listas completas.

## Ferramentas

* `slither-check-upgradeability`: [Revisar a atualizabilidade baseada em `delegatecall`](https://github.com/crytic/slither/blob/master/docs/src/tools/Upgradeability-Checks.md)
* `slither-prop`: [Geração automática de testes unitários e propriedades](https://github.com/crytic/slither/blob/master/docs/src/tools/Property-generation.md)
* `slither-flat`: [Achatar uma base de código](https://github.com/crytic/slither/blob/master/docs/src/tools/Contract-Flattening.md)
* `slither-check-erc`: [Verificar a conformidade com os ERCs](https://github.com/crytic/slither/blob/master/docs/src/tools/ERC-Conformance.md)
* `slither-read-storage`: [Ler valores de armazenamento de contratos](https://github.com/crytic/slither/blob/master/docs/src/tools/ReadStorage.md)
* `slither-interface`: [Gerar uma interface para um contrato](https://github.com/crytic/slither/blob/master/docs/src/tools/Interface.md)

Consulte a [Documentação de Ferramentas](https://github.com/crytic/slither/blob/master/docs/src/tools/README.md) para ferramentas adicionais.

[Entre em contato conosco](https://www.trailofbits.com/contact/) para obter ajuda na construção de ferramentas personalizadas.

## Documentação da API

A documentação sobre os detalhes internos do Slither está disponível [aqui](https://crytic.github.io/slither/slither.html).

## Obtendo Ajuda

Sinta-se à vontade para passar em nosso [canal no Slack](https://empireslacking.herokuapp.com) (#ethereum) para obter ajuda no uso ou na extensão do Slither.

* A [Documentação do Printer](https://github.com/crytic/slither/wiki/Printer-documentation) descreve as informações que o Slither é capaz de visualizar para cada contrato.

* A [Documentação do Detector](https://github.com/crytic/slither/wiki/Adding-a-new-detector) descreve como escrever uma nova análise de vulnerabilidade.

* A [Documentação da API](https://github.com/crytic/slither/wiki/Python-API) descreve os métodos e objetos disponíveis para análises personalizadas.

* A [Documentação do SlithIR](https://github.com/crytic/slither/wiki/SlithIR) descreve a representação intermediária SlithIR.

## Perguntas Frequentes

Como excluir mocks ou testes?

* Consulte nossa documentação sobre [filtragem de caminho](https://github.com/crytic/slither/wiki/Usage#path-filtering).

Como corrigir "arquivo desconhecido" ou problemas de compilação?

* Como o slither requer a AST do solc, todas as dependências devem estar disponíveis.
Se um contrato tiver dependências, `slither contract.sol` falhará.
Em vez disso, use `slither .` no diretório pai de `contracts/` (você deve ver `contracts/` ao executar `ls`).
Se você tiver uma pasta `node_modules/`, ela deve estar no mesmo diretório que `contracts/`. Para verificar se esse problema está relacionado ao slither,
execute o comando de compilação do framework que você está usando, por exemplo, `npx hardhat compile`. Isso deve funcionar com sucesso;
caso contrário, o motor de compilação do slither, crytic-compile, não conseguirá gerar a AST.

## Licença

O Slither é licenciado e distribuído sob a licença AGPLv3. [Entre em contato conosco](mailto:[email protected]) se estiver procurando uma exceção aos termos.

## Publicações

### Publicação da Trail of Bits

* [Slither: A Static Analysis Framework For Smart Contracts](https://arxiv.org/abs/1908.09878), Josselin Feist, Gustavo Grieco, Alex Groce - WETSEB '19

### Publicações externas

Título | Uso | Autores | Evento | Código
--- | --- | --- | --- | ---
[ReJection: A AST-Based Reentrancy Vulnerability Detection Method](https://www.researchgate.net/publication/339354823_ReJection_A_AST-Based_Reentrancy_Vulnerability_Detection_Method) | Análise baseada em AST construída sobre o 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](https://arxiv.org/pdf/1911.00570.pdf) | Aproveitar a dependência de dados através do Slither | William Zhang, Sebastian Banescu, Leodardo Pasos, Steven Stewart, Vijay Ganesh | ISSRE 2019 | [MPro](https://github.com/QuanZhang-William/M-Pro)
[ETHPLOIT: From Fuzzing to Efficient Exploit Generation against Smart Contracts](https://wcventure.github.io/FuzzingPaper/Paper/SANER20_ETHPLOIT.pdf) | Aproveitar a dependência de dados através do Slither | Qingzhao Zhang, Yizhuo Wang, Juanru Li, Siqi Ma | SANER 20 | -
[Verification of Ethereum Smart Contracts: A Model Checking Approach](http://www.ijmlc.org/vol10/977-AM0059.pdf) | Execução simbólica construída sobre o CFG do Slither | Tam Bang, Hoang H Nguyen, Dung Nguyen, Toan Trieu, Tho Quan | IJMLC 20 | -
[Smart Contract Repair](https://arxiv.org/pdf/1912.05823.pdf) | Utilizar os detectores de vulnerabilidades do Slither | Xiao Liang Yu, Omar Al-Bataineh, David Lo, Abhik Roychoudhury | TOSEM 20 | [SCRepair](https://github.com/xiaoly8/SCRepair/)
[Demystifying Loops in Smart Contracts](https://www.microsoft.com/en-us/research/uploads/prod/2020/08/loops_solidity__camera_ready-5f3fec3f15c69.pdf) | Aproveitar a dependência de dados através do Slither | Ben Mariano, Yanju Chen, Yu Feng, Shuvendu Lahiri, Isil Dillig | ASE 20 | -
[Trace-Based Dynamic Gas Estimation of Loops in Smart Contracts](https://ieeexplore.ieee.org/stamp/stamp.jsp?arnumber=9268144) | Usar o CFG do Slither para detectar loops | Chunmiao Li, Shijie Nie, Yang Cao, Yijun Yu, Zhenjiang Hu | IEEE Open J. Comput. Soc. 1 (2020) | -
```

---

[Read more](https://github.com/crytic/slither)
Baixar ferramenta