
Analizador estático para Solidity y Vyper
# [Slither, el analizador 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" />
[](https://github.com/crytic/slither/actions?query=workflow%3ACI)

[](https://crytic.github.io/slither/slither.html)
[](https://github.com/crytic/slither/wiki/SlithIR)
> Únete al Slack de Empire Hacking
>
> [](https://slack.empirehacking.nyc/)
> > _- Discusiones y Soporte_
**Slither** es un framework de análisis estático para Solide y Vyper escrito en Python3. Ejecuta un conjunto de detectores de vulnerabilidades, imprime información visual sobre los detalles del contrato y proporciona una API para escribir fácilmente análisis personalizados. Slither permite a los desarrolladores encontrar vulnerabilidades, mejorar su comprensión del código y prototipar rápidamente análisis personalizados.
* [Características](#features)
* [Uso](#usage)
* [Cómo instalar](#how-to-install)
* [Usando uv (Recomendado)](#using-uv-recommended)
* [Usando Pip](#using-pip)
* [Usando Git](#using-git-development)
* [Usando Docker](#using-docker)
* [Integración](#integration)
* [Detectores](#detectors)
* [Impresoras](#printers)
* [Impresoras de Revisión Rápida](#quick-review-printers)
* [Impresoras de Revisión en Profundidad](#in-depth-review-printers)
* [Herramientas](#tools)
* [Documentación de la API](#api-documentation)
* [Obtener Ayuda](#getting-help)
* [Preguntas Frecuentes](#faq)
* [Licencia](#license)
* [Publicaciones](#publications)
* [Publicación de Trail of Bits](#trail-of-bits-publication)
* [Publicaciones externas](#external-publications)
## Características
* Detecta código Solidity vulnerable con bajos falsos positivos (ver la lista de [trofeos](https://github.com/crytic/slither/blob/master/trophies.md))
* Identifica dónde ocurre la condición de error en el código fuente
* Se integra fácilmente en la integración continua y en compilaciones de Hardhat/Foundry
* 'Impresoras' integradas que reportan rápidamente información crucial del contrato
* API de detectores para escribir análisis personalizados en Python
* Capacidad de analizar contratos escritos con Solidity >= 0.4
* Representación intermedia ([SlithIR](https://github.com/crytic/slither/wiki/SlithIR)) permite análisis simples y de alta precisión
* Analiza correctamente el 99.9% de todo el código Solidity público
* Tiempo de ejecución promedio de menos de 1 segundo por contrato
* Se integra con el escaneo de código de Github en [CI](https://github.com/marketplace/actions/slither-action)
* Soporte para contratos inteligentes Vyper
## Uso
Ejecuta Slither en una aplicación Hardhat/Foundry/Dapp/Brownie:```console
slither .
```
Esta es la opción preferida si tu proyecto tiene dependencias, ya que Slither se basa en el marco de compilación subyacente para compilar el código fuente.
Sin embargo, puedes ejecutar Slither en un solo archivo que no importe dependencias:```console
slither tests/uninitialized.sol
```
## Cómo instalar
> **Nota**
> Slither requiere Python 3.10+.
Si **no** vas a usar uno de los [frameworks de compilación compatibles](https://github.com/crytic/crytic-compile), necesitas [solc](https://github.com/ethereum/solidity/), el compilador de Solidity; recomendamos usar [solc-select](https://github.com/crytic/solc-select) para cambiar convenientemente entre versiones de solc.
### Usando uv (Recomendado)
[uv](https://github.com/astral-sh/uv) es un gestor de paquetes de Python rápido que es 10-100x más rápido que 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 actualizar:```console
uv tool upgrade slither-analyzer
```
### Usando Pip```console
python3 -m pip install slither-analyzer
```
Para actualizar:```console
python3 -m pip install --upgrade slither-analyzer
```
### Usando Brew```console
brew install slither-analyzer
```
### Usando Git (Desarrollo)```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>
```
The `-e` flag installs in editable mode, meaning changes to the source code are immediately reflected without reinstalling.
### Usando Docker
Use la imagen docker [`eth-security-toolbox`](https://github.com/crytic/eth-security-toolbox/). Incluye todas nuestras herramientas de seguridad y todas las versiones principales de Solidity en una sola imagen. `/home/share` se montará en `/share` dentro del contenedor.```bash
docker pull trailofbits/eth-security-toolbox
```
Para compartir un directorio en el contenedor:```bash
docker run -it -v /home/share:/share trailofbits/eth-security-toolbox
```
### Integración
* Para integración de GitHub Action, usa [slither-action](https://github.com/marketplace/actions/slither-action).
* Para integración de pre-commit, usa (reemplaza `$GIT_TAG` con la etiqueta real) ```YAML
- repo: https://github.com/crytic/slither
rev: $GIT_TAG
hooks:
- id: slither
```
* Para generar un informe en Markdown, use `slither [objetivo] --checklist`.
* Para generar un Markdown con resaltado de código fuente de GitHub, use `slither [objetivo] --checklist --markdown-root https://github.com/ORG/REPO/blob/COMMIT/` (reemplace `ORG`, `REPO`, `COMMIT`)
## Detectores
Núm | Detector | Qué Detecta | Impacto | Confianza
--- | --- | --- | --- | ---
1 | `abiencoderv2-array` | [Array abiencoderv2 de almacenamiento](https://github.com/crytic/slither/wiki/Detector-Documentation#storage-abiencoderv2-array) | Alto | Alta
2 | `arbitrary-send-erc20` | [transferFrom usa `from` arbitrario](https://github.com/crytic/slither/wiki/Detector-Documentation#arbitrary-from-in-transferfrom) | Alto | Alta
3 | `array-by-reference` | [Modificar array de almacenamiento por valor](https://github.com/crytic/slither/wiki/Detector-Documentation#modifying-storage-array-by-value) | Alto | Alta
4 | `encode-packed-collision` | [Colisión de ABI encodePacked](https://github.com/crytic/slither/wiki/Detector-Documentation#abi-encodePacked-collision) | Alto | Alta
5 | `incorrect-shift` | [El orden de los parámetros en una instrucción de desplazamiento es incorrecto.](https://github.com/crytic/slither/wiki/Detector-Documentation#incorrect-shift-in-assembly) | Alto | Alta
6 | `multiple-constructors` | [Múltiples esquemas de constructor](https://github.com/crytic/slither/wiki/Detector-Documentation#multiple-constructor-schemes) | Alto | Alta
7 | `name-reused` | [Nombre de contrato reutilizado](https://github.com/crytic/slither/wiki/Detector-Documentation#name-reused) | Alto | Alta
8 | `protected-vars` | [Variables no protegidas detectadas](https://github.com/crytic/slither/wiki/Detector-Documentation#protected-variables) | Alto | Alta
9 | `public-mappings-nested` | [Mapeos públicos con variables anidadas](https://github.com/crytic/slither/wiki/Detector-Documentation#public-mappings-with-nested-variables) | Alto | Alta
10 | `rtlo` | [Se utiliza el carácter de control de anulación de derecha a izquierda](https://github.com/crytic/slither/wiki/Detector-Documentation#right-to-left-override-character) | Alto | Alta
11 | `shadowing-state` | [Sombreado de variables de estado](https://github.com/crytic/slither/wiki/Detector-Documentation#state-variable-shadowing) | Alto | Alta
12 | `suicidal` | [Funciones que permiten a cualquiera autodestruir el contrato](https://github.com/crytic/slither/wiki/Detector-Documentation#suicidal) | Alto | Alta
13 | `uninitialized-state` | [Variables de estado no inicializadas](https://github.com/crytic/slither/wiki/Detector-Documentation#uninitialized-state-variables) | Alto | Alta
14 | `uninitialized-storage` | [Variables de almacenamiento no inicializadas](https://github.com/crytic/slither/wiki/Detector-Documentation#uninitialized-storage-variables) | Alto | Alta
15 | `unprotected-upgrade` | [Contrato actualizable desprotegido](https://github.com/crytic/slither/wiki/Detector-Documentation#unprotected-upgradeable-contract) | Alto | Alta
16 | `arbitrary-send-erc20-permit` | [transferFrom usa from arbitrario con permit](https://github.com/crytic/slither/wiki/Detector-Documentation#arbitrary-from-in-transferfrom-used-with-permit) | Alto | Media
17 | `arbitrary-send-eth` | [Funciones que envían Ether a destinos arbitrarios](https://github.com/crytic/slither/wiki/Detector-Documentation#functions-that-send-ether-to-arbitrary-destinations) | Alto | Media
18 | `controlled-array-length` | [Asignación de longitud de array contaminada](https://github.com/crytic/slither/wiki/Detector-Documentation#array-length-assignment) | Alto | Media
19 | `controlled-delegatecall` | [Destino de delegatecall controlado](https://github.com/crytic/slither/wiki/Detector-Documentation#controlled-delegatecall) | Alto | Media
20 | `delegatecall-loop` | [Funciones pagables que usan `delegatecall` dentro de un bucle](https://github.com/crytic/slither/wiki/Detector-Documentation/#payable-functions-using-delegatecall-inside-a-loop) | Alto | Media
21 | `incorrect-exp` | [Exponenciación incorrecta](https://github.com/crytic/slither/wiki/Detector-Documentation#incorrect-exponentiation) | Alto | Media
22 | `incorrect-return` | [Si se usa `return` incorrectamente en modo ensamblador.](https://github.com/crytic/slither/wiki/Detector-Documentation#incorrect-return-in-assembly) | Alto | Media
23 | `msg-value-loop` | [msg.value dentro de un bucle](https://github.com/crytic/slither/wiki/Detector-Documentation/#msgvalue-inside-a-loop) | Alto | Media
24 | `reentrancy-eth` | [Vulnerabilidades de reentrada (robo de ethers)](https://github.com/crytic/slither/wiki/Detector-Documentation#reentrancy-vulnerabilities) | Alto | Media
25 | `reentrancy-balance` | [Vulnerabilidades de reentrada que conducen a comprobaciones de saldo desactualizadas](https://github.com/crytic/slither/wiki/Detector-Documentation#reentrancy-vulnerabilities-4) | Alto | Media
26 | `return-leave` | [Si se usa `return` en lugar de `leave`.](https://github.com/crytic/slither/wiki/Detector-Documentation#return-instead-of-leave-in-assembly) | Alto | Media
27 | `storage-array` | [Error del compilador de array de enteros con signo de almacenamiento](https://github.com/crytic/slither/wiki/Detector-Documentation#storage-signed-integer-array) | Alto | Media
28 | `unchecked-transfer` | [Transferencia de tokens no verificada](https://github.com/crytic/slither/wiki/Detector-Documentation#unchecked-transfer) | Alto | Media
29 | `weak-prng` | [PRNG débil](https://github.com/crytic/slither/wiki/Detector-Documentation#weak-PRNG) | Alto | Media
30 | `domain-separator-collision` | [Detecta tokens ERC20 que tienen una función cuya firma colisiona con DOMAIN_SEPARATOR() de EIP-2612](https://github.com/crytic/slither/wiki/Detector-Documentation#domain-separator-collision) | Medio | Alta
31 | `enum-conversion` | [Detecta conversión peligrosa de enum](https://github.com/crytic/slither/wiki/Detector-Documentation#dangerous-enum-conversion) | Medio | Alta
32 | `erc20-interface` | [Interfaces ERC20 incorrectas](https://github.com/crytic/slither/wiki/Detector-Documentation#incorrect-erc20-interface) | Medio | Alta
33 | `erc721-interface` | [Interfaces ERC721 incorrectas](https://github.com/crytic/slither/wiki/Detector-Documentation#incorrect-erc721-interface) | Medio | Alta
34 | `incorrect-equality` | [Igualdades estrictas peligrosas](https://github.com/crytic/slither/wiki/Detector-Documentation#dangerous-strict-equalities) | Medio | Alta
35 | `locked-ether` | [Contratos que bloquean ether](https://github.com/crytic/slither/wiki/Detector-Documentation#contracts-that-lock-ether) | Medio | Alta
36 | `mapping-deletion` | [Eliminación en mapeo que contiene una estructura](https://github.com/crytic/slither/wiki/Detector-Documentation#deletion-on-mapping-containing-a-structure) | Medio | Alta
37 | `pyth-deprecated-functions` | [Detecta funciones obsoletas de Pyth](https://github.com/crytic/slither/wiki/Detector-Documentation#pyth-deprecated-functions) | Medio | Alta
38 | `pyth-unchecked-confidence` | [Detecta cuando el nivel de confianza de un precio de Pyth no está verificado](https://github.com/crytic/slither/wiki/Detector-Documentation#pyth-unchecked-confidence-level) | Medio | Alta
39 | `pyth-unchecked-publishtime` | [Detecta cuando el publishTime de un precio de Pyth no está verificado](https://github.com/crytic/slither/wiki/Detector-Documentation#pyth-unchecked-publishtime) | Medio | Alta
40 | `shadowing-abstract` | [Sombreado de variables de estado de contratos abstractos](https://github.com/crytic/slither/wiki/Detector-Documentation#state-variable-shadowing-from-abstract-contracts) | Medio | Alta
41 | `tautological-compare` | [Comparar una variable consigo misma siempre devuelve verdadero o falso, dependiendo de la comparación](https://github.com/crytic/slither/wiki/Detector-Documentation#tautological-compare) | Medio | Alta
42 | `tautology` | [Tautología o contradicción](https://github.com/crytic/slither/wiki/Detector-Documentation#tautology-or-contradiction) | Medio | Alta
43 | `write-after-write` | [Escritura no utilizada](https://github.com/crytic/slither/wiki/Detector-Documentation#write-after-write) | Medio | Alta
44 | `boolean-cst` | [Uso incorrecto de constante booleana](https://github.com/crytic/slither/wiki/Detector-Documentation#misuse-of-a-boolean-constant) | Medio | Media
45 | `chronicle-unchecked-price` | [Detecta cuando el precio de Chronicle no está verificado.](https://github.com/crytic/slither/wiki/Detector-Documentation#chronicle-unchecked-price) | Medio | Media
46 | `constant-function-asm` | [Funciones constantes que usan código ensamblador](https://github.com/crytic/slither/wiki/Detector-Documentation#constant-functions-using-assembly-code) | Medio | Media
47 | `constant-function-state` | [Funciones constantes que cambian el estado](https://github.com/crytic/slither/wiki/Detector-Documentation#constant-functions-changing-the-state) | Medio | Media
48 | `divide-before-multiply` | [Orden de operaciones aritméticas impreciso](https://github.com/crytic/slither/wiki/Detector-Documentation#divide-before-multiply) | Medio | Media
49 | `gelato-unprotected-randomness` | [Llamada a `_requestRandomness` dentro de una función desprotegida](https://github.com/crytic/slither/wiki/Detector-Documentation#gelato-unprotected-randomness) | Medio | Media
50 | `out-of-order-retryable` | [Transacciones retryables fuera de orden](https://github.com/crytic/slither/wiki/Detector-Documentation#out-of-order-retryable-transactions) | Medio | Media
51 | `reentrancy-no-eth` | [Vulnerabilidades de reentrada (sin robo de ethers)](https://github.com/crytic/slither/wiki/Detector-Documentation#reentrancy-vulnerabilities-1) | Medio | Media
52 | `reused-constructor` | [Constructor base reutilizado](https://github.com/crytic/slither/wiki/Detector-Documentation#reused-base-constructors) | Medio | Media
53 | `tx-origin` | [Uso peligroso de `tx.origin`](https://github.com/crytic/slither/wiki/Detector-Documentation#dangerous-usage-of-txorigin) | Medio | Media
54 | `unchecked-lowlevel` | [Llamadas de bajo nivel no verificadas](https://github.com/crytic/slither/wiki/Detector-Documentation#unchecked-low-level-calls) | Medio | Media
55 | `unchecked-send` | [Envío no verificado](https://github.com/crytic/slither/wiki/Detector-Documentation#unchecked-send) | Medio | Media
56 | `uninitialized-local` | [Variables locales no inicializadas](https://github.com/crytic/slither/wiki/Detector-Documentation#uninitialized-local-variables) | Medio | Media
57 | `unused-return` | [Valores de retorno no utilizados](https://github.com/crytic/slither/wiki/Detector-Documentation#unused-return) | Medio | Media
58 | `chainlink-feed-registry` | [Detecta cuando se utiliza el registro de feeds de Chainlink](https://github.com/crytic/slither/wiki/Detector-Documentation#chainlink-feed-registry-usage) | Bajo | Alta
59 | `incorrect-modifier` | [Modificadores que pueden devolver el valor por defecto](https://github.com/crytic/slither/wiki/Detector-Documentation#incorrect-modifier) | Bajo | Alta
60 | `optimism-deprecation` | [Detecta cuando se utiliza un predeploy o función obsoleta de Optimism.](https://github.com/crytic/slither/wiki/Detector-Documentation#optimism-deprecated-predeploy-or-function) | Bajo | Alta
61 | `shadowing-builtin` | [Sombreado de símbolos incorporados](https://github.com/crytic/slither/wiki/Detector-Documentation#builtin-symbol-shadowing) | Bajo | Alta
62 | `shadowing-local` | [Sombreado de variables locales](https://github.com/crytic/slither/wiki/Detector-Documentation#local-variable-shadowing) | Bajo | Alta
63 | `uninitialized-fptr-cst` | [Llamadas a punteros de función no inicializados en constructores](https://github.com/crytic/slither/wiki/Detector-Documentation#uninitialized-function-pointers-in-constructors) | Bajo | Alta
64 | `variable-scope` | [Variables locales usadas antes de su declaración](https://github.com/crytic/slither/wiki/Detector-Documentation#pre-declaration-usage-of-local-variables) | Bajo | Alta
65 | `void-cst` | [Constructor llamado no implementado](https://github.com/crytic/slither/wiki/Detector-Documentation#void-constructor) | Bajo | Alta
66 | `calls-loop` | [Múltiples llamadas en un bucle](https://github.com/crytic/slither/wiki/Detector-Documentation/#calls-inside-a-loop) | Bajo | Media
67 | `events-access` | [Control de acceso sin eventos](https://github.com/crytic/slither/wiki/Detector-Documentation#missing-events-access-control) | Bajo | Media
68 | `events-maths` | [Aritmética sin eventos](https://github.com/crytic/slither/wiki/Detector-Documentation#missing-events-arithmetic) | Bajo | Media
69 | `incorrect-unary` | [Expresiones unarias peligrosas](https://github.com/crytic/slither/wiki/Detector-Documentation#dangerous-unary-expressions) | Bajo | Media
70 | `missing-zero-check` | [Validación de dirección cero faltante](https://github.com/crytic/slither/wiki/Detector-Documentation#missing-zero-address-validation) | Bajo | Media
71 | `reentrancy-benign` | [Vulnerabilidades de reentrada benignas](https://github.com/crytic/slither/wiki/Detector-Documentation#reentrancy-vulnerabilities-2) | Bajo | Media
72 | `reentrancy-events` | [Vulnerabilidades de reentrada que conducen a eventos fuera de orden](https://github.com/crytic/slither/wiki/Detector-Documentation#reentrancy-vulnerabilities-3) | Bajo | Media
73 | `return-bomb` | [Un destinatario de bajo nivel puede consumir todo el gas del llamante inesperadamente.](https://github.com/crytic/slither/wiki/Detector-Documentation#return-bomb) | Bajo | Media
74 | `timestamp` | [Uso peligroso de `block.timestamp`](https://github.com/crytic/slither/wiki/Detector-Documentation#block-timestamp) | Bajo | Media
75 | `assembly` | [Uso de ensamblador](https://github.com/crytic/slither/wiki/Detector-Documentation#assembly-usage) | Informativo | Alta
76 | `assert-state-change` | [Cambio de estado en assert](https://github.com/crytic/slither/wiki/Detector-Documentation#assert-state-change) | Informativo | Alta
77 | `boolean-equal` | [Comparación con constante booleana](https://github.com/crytic/slither/wiki/Detector-Documentation#boolean-equality) | Informativo | Alta
78 | `cyclomatic-complexity` | [Detecta funciones con alta (> 11) complejidad ciclomática](https://github.com/crytic/slither/wiki/Detector-Documentation#cyclomatic-complexity) | Informativo | Alta
79 | `deprecated-standards` | [Estándares obsoletos de Solidity](https://github.com/crytic/slither/wiki/Detector-Documentation#deprecated-standards) | Informativo | Alta
80 | `erc20-indexed` | [Parámetros de eventos ERC20 no indexados](https://github.com/crytic/slither/wiki/Detector-Documentation#unindexed-erc20-event-parameters) | Informativo | Alta
81 | `function-init-state` | [Función que inicializa variables de estado](https://github.com/crytic/slither/wiki/Detector-Documentation#function-initializing-state) | Informativo | Alta
82 | `incorrect-using-for` | [Detecta el uso de la declaración using-for cuando ninguna función de una biblioteca determinada coincide con un tipo determinado](https://github.com/crytic/slither/wiki/Detector-Documentation#incorrect-usage-of-using-for-statement) | Informativo | Alta
83 | `low-level-calls` | [Llamadas de bajo nivel](https://github.com/crytic/slither/wiki/Detector-Documentation#low-level-calls) | Informativo | Alta
84 | `missing-inheritance` | [Herencia faltante](https://github.com/crytic/slither/wiki/Detector-Documentation#missing-inheritance) | Informativo | Alta
85 | `naming-convention` | [Conformidad con las convenciones de nomenclatura de Solidity](https://github.com/crytic/slither/wiki/Detector-Documentation#conformance-to-solidity-naming-conventions) | Informativo | Alta
86 | `pragma` | [Si se utilizan diferentes directivas pragma](https://github.com/crytic/slither/wiki/Detector-Documentation#different-pragma-directives-are-used) | Informativo | Alta
87 | `redundant-statements` | [Declaraciones redundantes](https://github.com/crytic/slither/wiki/Detector-Documentation#redundant-statements) | Informativo | Alta
88 | `solc-version` | [Versión incorrecta de Solidity](https://github.com/crytic/slither/wiki/Detector-Documentation#incorrect-versions-of-solidity) | Informativo | Alta
89 | `unimplemented-functions` | [Funciones no implementadas](https://github.com/crytic/slither/wiki/Detector-Documentation#unimplemented-functions) | Informativo | Alta
90 | `unindexed-event-address` | [Eventos con parámetros de dirección pero sin parámetros indexados](https://github.com/crytic/slither/wiki/Detector-Documentation#unindexed-event-address-parameters) | Informativo | Alta
91 | `unused-state` | [Variables de estado no utilizadas](https://github.com/crytic/slither/wiki/Detector-Documentation#unused-state-variable) | Informativo | Alta
92 | `costly-loop` | [Operaciones costosas en un bucle](https://github.com/crytic/slither/wiki/Detector-Documentation#costly-operations-inside-a-loop) | Informativo | Media
93 | `dead-code` | [Funciones que no se utilizan](https://github.com/crytic/slither/wiki/Detector-Documentation#dead-code) | Informativo | Media
94 | `reentrancy-unlimited-gas` | [Vulnerabilidades de reentrada a través de send y transfer](https://github.com/crytic/slither/wiki/Detector-Documentation#reentrancy-vulnerabilities-4) | Informativo | Media
95 | `too-many-digits` | [Conformidad con las mejores prácticas de notación numérica](https://github.com/crytic/slither/wiki/Detector-Documentation#too-many-digits) | Informativo | Media
96 | `cache-array-length` | [Detecta bucles `for` que usan el miembro `length` de algún array de almacenamiento en su condición de bucle y no lo modifican.](https://github.com/crytic/slither/wiki/Detector-Documentation#cache-array-length) | Optimización | Alta
97 | `constable-states` | [Variables de estado que podrían declararse constantes](https://github.com/crytic/slither/wiki/Detector-Documentation#state-variables-that-could-be-declared-constant) | Optimización | Alta
98 | `external-function` | [Función pública que podría declararse externa](https://github.com/crytic/slither/wiki/Detector-Documentation#public-function-that-could-be-declared-external) | Optimización | Alta
99 | `immutable-states` | [Variables de estado que podrían declararse inmutables](https://github.com/crytic/slither/wiki/Detector-Documentation#state-variables-that-could-be-declared-immutable) | Optimización | Alta
100 | `var-read-using-this` | [El contrato lee su propia variable usando `this`](https://github.com/crytic/slither/wiki/Detector-Documentation#public-variable-read-in-external-context) | Optimización | Alta
Para más información, consulte
* La [Documentación de Detectores](https://github.com/crytic/slither/wiki/Detector-Documentation) para detalles sobre cada detector
* La [Selección de Detección](https://github.com/crytic/slither/wiki/Usage#detector-selection) para ejecutar solo los detectores seleccionados. Por defecto, se ejecutan todos los detectores.
* El [Modo de Triaje](https://github.com/crytic/slither/wiki/Usage#triage-mode) para filtrar resultados individuales
## Impresoras
### Impresoras de Revisión Rápida
* `human-summary`: [Imprime un resumen legible por humanos de los contratos](https://github.com/trailofbits/slither/wiki/Printer-documentation#human-summary)
* `inheritance-graph`: [Exporta el gráfico de herencia de cada contrato a un archivo dot](https://github.com/trailofbits/slither/wiki/Printer-documentation#inheritance-graph)
* `contract-summary`: [Imprime un resumen de los contratos](https://github.com/trailofbits/slither/wiki/Printer-documentation#contract-summary)
* `loc`: [Cuenta el número total de líneas de código (LOC), líneas de código fuente (SLOC) y líneas de código de comentario (CLOC) encontradas en archivos fuente (SRC), dependencias (DEP) y archivos de prueba (TEST).](https://github.com/trailofbits/slither/wiki/Printer-documentation#loc)
* `entry-points`: [Imprime todas las funciones de punto de entrada que cambian el estado y sus variables de los contratos](https://github.com/trailofbits/slither/wiki/Printer-documentation#entry-points)
### Impresoras de Revisión en Profundidad* `call-graph`: [Exportar el grafo de llamadas de los contratos a un archivo dot](https://github.com/crytic/slither/wiki/Printer-documentation#call-graph)
* `cfg`: [Exportar el CFG de cada función](https://github.com/crytic/slither/wiki/Printer-documentation#cfg)
* `function-summary`: [Imprimir un resumen de las funciones](https://github.com/crytic/slither/wiki/Printer-documentation#function-summary)
* `vars-and-auth`: [Imprimir las variables de estado escritas y la autorización de las funciones](https://github.com/crytic/slither/wiki/Printer-documentation#variables-written-and-authorization)
* `not-pausable`: [Imprimir funciones que no usan el modificador `whenNotPaused`](https://github.com/crytic/slither/wiki/Printer-documentation#when-not-paused).
Para ejecutar un printer, use `--print` y una lista separada por comas de printers.
Consulte la [documentación de Printer](https://github.com/crytic/slither/wiki/Printer-documentation) para obtener la lista completa.
## Herramientas
* `slither-check-upgradeability`: [Revisar la actualización basada en `delegatecall`](https://github.com/crytic/slither/blob/master/docs/src/tools/Upgradeability-Checks.md)
* `slither-prop`: [Generación automática de pruebas unitarias y propiedades](https://github.com/crytic/slither/blob/master/docs/src/tools/Property-generation.md)
* `slither-flat`: [Aplanar una base de código](https://github.com/crytic/slither/blob/master/docs/src/tools/Contract-Flattening.md)
* `slither-check-erc`: [Verificar la conformidad con los ERC](https://github.com/crytic/slither/blob/master/docs/src/tools/ERC-Conformance.md)
* `slither-read-storage`: [Leer valores de almacenamiento de contratos](https://github.com/crytic/slither/blob/master/docs/src/tools/ReadStorage.md)
* `slither-interface`: [Generar una interfaz para un contrato](https://github.com/crytic/slither/blob/master/docs/src/tools/Interface.md)
Consulte la [documentación de Herramientas](https://github.com/crytic/slither/blob/master/docs/src/tools/README.md) para herramientas adicionales.
[Contáctenos](https://www.trailofbits.com/contact/) para obtener ayuda en la creación de herramientas personalizadas.
## Documentación de la API
La documentación sobre los componentes internos de Slither está disponible [aquí](https://crytic.github.io/slither/slither.html).
## Obtener ayuda
No dude en pasar por nuestro [canal de Slack](https://empireslacking.herokuapp.com) (#ethereum) para obtener ayuda sobre el uso o la extensión de Slither.
* La [documentación de Printer](https://github.com/crytic/slither/wiki/Printer-documentation) describe la información que Slither es capaz de visualizar para cada contrato.
* La [documentación de Detector](https://github.com/crytic/slither/wiki/Adding-a-new-detector) describe cómo escribir un nuevo análisis de vulnerabilidades.
* La [documentación de la API](https://github.com/crytic/slither/wiki/Python-API) describe los métodos y objetos disponibles para análisis personalizados.
* La [documentación de SlithIR](https://github.com/crytic/slither/wiki/SlithIR) describe la representación intermedia SlithIR.
## FAQ
¿Cómo excluyo mocks o pruebas?
* Consulte nuestra documentación sobre [filtrado de rutas](https://github.com/crytic/slither/wiki/Usage#path-filtering).
¿Cómo soluciono el error "archivo desconocido" o problemas de compilación?
* Debido a que Slither requiere el AST de solc, debe tener todas las dependencias disponibles.
Si un contrato tiene dependencias, `slither contract.sol` fallará.
En su lugar, use `slither .` en el directorio padre de `contracts/` (debería ver `contracts/` cuando ejecute `ls`).
Si tiene una carpeta `node_modules/`, debe estar en el mismo directorio que `contracts/`. Para verificar que este problema está relacionado con Slither,
ejecute el comando de compilación del framework que está utilizando, por ejemplo `npx hardhat compile`. Eso debe funcionar correctamente;
de lo contrario, el motor de compilación de Slither, crytic-compile, no puede generar el AST.
## Licencia
Slither está licenciado y distribuido bajo la licencia AGPLv3. [Contáctenos](mailto:[email protected]) si busca una excepción a los términos.
## Publicaciones
### Publicación de Trail of Bits
* [Slither: Un Framework de Análisis Estático para Contratos Inteligentes](https://arxiv.org/abs/1908.09878), Josselin Feist, Gustavo Grieco, Alex Groce - WETSEB '19
### Publicaciones externas
Título | Uso | Autores | Lugar | Código
--- | --- | --- | --- | ---
[ReJection: Un Método de Detección de Vulnerabilidades de Reentrancia basado en AST](https://www.researchgate.net/publication/339354823_ReJection_A_AST-Based_Reentrancy_Vulnerability_Detection_Method) | Análisis basado en AST construido sobre Slither | Rui Ma, Zefeng Jian, Guangyuan Chen, Ke Ma, Yujia Chen | CTCIS 19 | -
[MPro: Combinando Análisis Estático y Simbólico para Pruebas Escalables de Contratos Inteligentes](https://arxiv.org/pdf/1911.00570.pdf) | Aprovechar la dependencia de datos a través de Slither | William Zhang, Sebastian Banescu, Leodardo Pasos, Steven Stewart, Vijay Ganesh | ISSRE 2019 | [MPro](https://github.com/QuanZhang-William/M-Pro)
[ETHPLOIT: Desde Fuzzing hasta Generación Eficiente de Exploits contra Contratos Inteligentes](https://wcventure.github.io/FuzzingPaper/Paper/SANER20_ETHPLOIT.pdf) | Aprovechar la dependencia de datos a través de Slither | Qingzhao Zhang, Yizhuo Wang, Juanru Li, Siqi Ma | SANER 20 | -
[Verificación de Contratos Inteligentes Ethereum: Un Enfoque de Model Checking](http://www.ijmlc.org/vol10/977-AM0059.pdf) | Ejecución simbólica construida sobre el CFG de Slither | Tam Bang, Hoang H Nguyen, Dung Nguyen, Toan Trieu, Tho Quan | IJMLC 20 | -
[Reparación de Contratos Inteligentes](https://arxiv.org/pdf/1912.05823.pdf) | Depender de los detectores de vulnerabilidades de Slither | Xiao Liang Yu, Omar Al-Bataineh, David Lo, Abhik Roychoudhury | TOSEM 20 | [SCRepair](https://github.com/xiaoly8/SCRepair/)
[Desmitificando Bucles en Contratos Inteligentes](https://www.microsoft.com/en-us/research/uploads/prod/2020/08/loops_solidity__camera_ready-5f3fec3f15c69.pdf) | Aprovechar la dependencia de datos a través de Slither | Ben Mariano, Yanju Chen, Yu Feng, Shuvendu Lahiri, Isil Dillig | ASE 20 | -
[Estimación Dinámica de Gas Basada en Trazas de Bucles en Contratos Inteligentes](https://ieeexplore.ieee.org/stamp/stamp.jsp?arnumber=9268144) | Usar el CFG de Slither para detectar bucles | Chunmiao Li, Shijie Nie, Yang Cao, Yijun Yu, Zhenjiang Hu | IEEE Open J. Comput. Soc. 1 (2020) | -
```
---
[Read more](https://github.com/crytic/slither)