Zurück zu den Updates
New releaseJul 29, 2026

slither v0.11.6

Statischer Analyzer für Solidity und Vyper

Teilen

Slither, der statische Analysator für Smart Contracts

Logo des Slither Static-Analyse-Frameworks

Build-Status PyPI Slither – Read the Docs Slither – Wiki

Tritt dem Empire Hacking Slack bei

Slack-Status

- Diskussionen und Support

Slither ist ein in Python3 geschriebenes statisches Analyse-Framework für Solidity und Vyper. Es führt eine Reihe von Schwachstellendetektoren aus, gibt visuelle Informationen über Vertragsdetails aus und bietet eine API, um benutzerdefinierte Analysen einfach zu schreiben. Slither ermöglicht Entwicklern, Schwachstellen zu finden, ihr Codeverständnis zu verbessern und schnell individuelle Analysen zu prototypisieren.

Funktionen

  • Erkennt verwundbaren Solidity-Code mit niedriger Falsch-Positiv-Rate (siehe die Liste der Trophäen)
  • Identifiziert die Stelle im Quellcode, an der der Fehler auftritt
  • Einfache Integration in Continuous Integration und Hardhat/Foundry-Builds
  • Integrierte 'Printer' melden schnell wichtige Vertragsinformationen
  • Detektor-API zum Schreiben benutzerdefinierter Analysen in Python
  • Fähigkeit, Verträge zu analysieren, die mit Solidity >= 0.4 geschrieben wurden
  • Zwischendarstellung (SlithIR) ermöglicht einfache, hochpräzise Analysen
  • Analysiert korrekt 99,9% aller öffentlichen Solidity-Codes
  • Durchschnittliche Ausführungszeit von weniger als 1 Sekunde pro Vertrag
  • Integration in die Code-Scannung von GitHub in CI
  • Unterstützung für Vyper-Smart Contracts

Verwendung

Führe Slither auf einer Hardhat/Foundry/Dapp/Brownie-Anwendung aus:```console slither .

Dies ist die bevorzugte Option, wenn Ihr Projekt Abhängigkeiten hat, da Slither auf dem zugrunde liegenden Kompilierungs-Framework basiert, um Quellcode zu kompilieren.

Sie können Slither jedoch auch auf einer einzelnen Datei ausführen, die keine Abhängigkeiten importiert:```console
slither tests/uninitialized.sol

Wie installieren

Hinweis Slither benötigt Python 3.10+. Falls Sie keines der unterstützten Compilierungs-Frameworks verwenden, benötigen Sie solc, den Solidity-Compiler. Wir empfehlen solc-select für den bequemen Wechsel zwischen solc-Versionen.

Verwendung von uv (empfohlen)

uv ist ein schneller Python-Paketmanager, der 10-100x schneller ist als 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

Zum Aktualisieren:```console
uv tool upgrade slither-analyzer

Mit Pip verwenden```console

python3 -m pip install slither-analyzer

Aktualisieren:```console
python3 -m pip install --upgrade slither-analyzer

Brew verwenden```console

brew install slither-analyzer

### Mit Git (Entwicklung)```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 installiert im bearbeitbaren Modus, was bedeutet, dass Änderungen am Quellcode sofort übernommen werden, ohne dass eine Neuinstallation erforderlich ist.

Docker verwenden

Verwenden Sie das Docker-Image eth-security-toolbox. Es enthält alle unsere Sicherheitstools und jede Hauptversion von Solidity in einem einzigen Image. /home/share wird im Container auf /share gemountet.```bash docker pull trailofbits/eth-security-toolbox

Um ein Verzeichnis im Container freizugeben:```bash
docker run -it -v /home/share:/share trailofbits/eth-security-toolbox

Integration

  • Für die GitHub action Integration verwenden Sie slither-action.
  • Für die pre-commit Integration verwenden Sie (ersetzen Sie $GIT_TAG durch das tatsächliche Tag) ```YAML
  • Um einen Markdown-Bericht zu erstellen, verwenden Sie slither [target] --checklist.
  • Um einen Markdown mit GitHub-Quellcode-Hervorhebung zu generieren, verwenden Sie slither [target] --checklist --markdown-root https://github.com/ORG/REPO/blob/COMMIT/ (ersetzen Sie ORG, REPO, COMMIT)

Detektoren

Nr.DetektorWas er erkenntAuswirkungVertrauen
1abiencoderv2-arrayStorage-abiencoderv2-ArrayHochHoch
2arbitrary-send-erc20transferFrom verwendet beliebiges fromHochHoch
3array-by-referenceÄndern eines Storage-Arrays durch WertHochHoch
4encode-packed-collisionABI encodePacked-KollisionHochHoch
5incorrect-shiftDie Reihenfolge der Parameter in einer Shift-Anweisung ist falsch.HochHoch
6multiple-constructorsMehrere KonstruktorschemataHochHoch
7name-reusedWiederverwendung des VertragsnamensHochHoch
8protected-varsErkannte ungeschützte VariablenHochHoch
9public-mappings-nestedÖffentliche Mappings mit verschachtelten VariablenHochHoch
10rtloSteuerzeichen zur Rechts-nach-Links-Überschreibung wird verwendetHochHoch
11shadowing-stateState-Variablen-ÜberschattungHochHoch
12suicidalFunktionen, die es jedem erlauben, den Vertrag zu zerstörenHochHoch
13uninitialized-stateNicht initialisierte State-VariablenHochHoch
14uninitialized-storageNicht initialisierte Storage-VariablenHochHoch
15unprotected-upgradeUngeschützter upgradebarer VertragHochHoch
16arbitrary-send-erc20-permittransferFrom verwendet beliebiges from mit PermitHochMittel
17arbitrary-send-ethFunktionen, die Ether an beliebige Ziele sendenHochMittel
18controlled-array-lengthZuweisung einer verfälschten Array-LängeHochMittel
19controlled-delegatecallKontrolliertes delegatecall-ZielHochMittel
20delegatecall-loopPayable-Funktionen, die delegatecall innerhalb einer Schleife verwendenHochMittel
21incorrect-expFalsche PotenzierungHochMittel
22incorrect-returnWenn ein return fälschlicherweise im Assembly-Modus verwendet wird.HochMittel
23msg-value-loopmsg.value innerhalb einer SchleifeHochMittel
24reentrancy-ethReentrancy-Schwachstellen (Diebstahl von Ether)HochMittel
25reentrancy-balanceReentrancy-Schwachstellen, die zu veralteten Saldenprüfungen führenHochMittel
26return-leaveWenn ein return anstelle eines leave verwendet wird.HochMittel
27storage-arrayCompiler-Fehler bei signierten Storage-Integer-ArraysHochMittel
28unchecked-transferUngeprüfter Token-TransferHochMittel
29weak-prngSchwacher PRNGHochMittel
30domain-separator-collisionErkennt ERC20-Token, die eine Funktion haben, deren Signatur mit EIP-2612s DOMAIN_SEPARATOR() kollidiertMittelHoch
31enum-conversionErkennt gefährliche Enum-KonvertierungMittelHoch
32erc20-interfaceFalsche ERC20-SchnittstellenMittelHoch
33erc721-interfaceFalsche ERC721-SchnittstellenMittelHoch
34incorrect-equalityGefährliche strikte GleichheitenMittelHoch
35locked-etherVerträge, die Ether sperrenMittelHoch
36mapping-deletionLöschen eines Mappings, das eine Struktur enthältMittelHoch
37pyth-deprecated-functionsErkennt veraltete Pyth-FunktionenMittelHoch
38pyth-unchecked-confidenceErkennt, wenn das Konfidenzniveau eines Pyth-Preises nicht überprüft wirdMittelHoch
39pyth-unchecked-publishtimeErkennt, wenn die publishTime eines Pyth-Preises nicht überprüft wirdMittelHoch
40shadowing-abstractState-Variablen-Überschattung durch abstrakte VerträgeMittelHoch
41tautological-compareVergleicht eine Variable mit sich selbst, was je nach Vergleich immer true oder false zurückgibtMittelHoch
42tautologyTautologie oder WiderspruchMittelHoch
43write-after-writeUnbenutzter SchreibzugriffMittelHoch
44boolean-cstMissbrauch einer Boolean-KonstanteMittelMittel
45chronicle-unchecked-priceErkennt, wenn Chronicle-Preis nicht überprüft wird.MittelMittel
46constant-function-asmKonstante Funktionen mit Assembly-CodeMittelMittel
47constant-function-stateKonstante Funktionen, die den State ändernMittelMittel
48divide-before-multiplyUngenauigkeit der Reihenfolge arithmetischer OperationenMittelMittel
49gelato-unprotected-randomnessAufruf von _requestRandomness innerhalb einer ungeschützten FunktionMittelMittel
50out-of-order-retryableNicht sequenzielle wiederholbare TransaktionenMittelMittel
51reentrancy-no-ethReentrancy-Schwachstellen (kein Diebstahl von Ether)MittelMittel
52reused-constructorWiederverwendeter Basis-KonstruktorMittelMittel
53tx-originGefährliche Verwendung von tx.originMittelMittel
54unchecked-lowlevelUngeprüfte Low-Level-AufrufeMittelMittel
55unchecked-sendUngeprüfter sendMittelMittel
56uninitialized-localNicht initialisierte lokale VariablenMittelMittel
57unused-returnUnbenutzte RückgabewerteMittelMittel
58chainlink-feed-registryErkennt, wenn Chainlink-Feed-Registry verwendet wirdNiedrigHoch
59incorrect-modifierModifier, die den Standardwert zurückgeben könnenNiedrigHoch
60optimism-deprecationErkennt, wenn veralteter Optimism-Predeploy oder -Funktion verwendet wird.NiedrigHoch
61shadowing-builtinÜberschattung eingebauter SymboleNiedrigHoch
62shadowing-localÜberschattung lokaler VariablenNiedrigHoch
63uninitialized-fptr-cstAufrufe nicht initialisierter Funktionszeiger in KonstruktorenNiedrigHoch
64variable-scopeLokale Variablen vor ihrer Deklaration verwendetNiedrigHoch
65void-cstKonstruktor aufgerufen, aber nicht implementiertNiedrigHoch
66calls-loopMehrere Aufrufe in einer SchleifeNiedrigMittel
67events-accessFehlende Ereignisse bei ZugriffskontrolleNiedrigMittel
68events-mathsFehlende Ereignisse bei ArithmetikNiedrigMittel
69incorrect-unaryGefährliche unäre AusdrückeNiedrigMittel
70missing-zero-checkFehlende Validierung der NulladresseNiedrigMittel
71reentrancy-benignGutartige Reentrancy-SchwachstellenNiedrigMittel
72reentrancy-eventsReentrancy-Schwachstellen, die zu nicht sequenziellen Ereignissen führenNiedrigMittel
73return-bombEin Low-Level-Callee könnte unerwartet das gesamte Gas des Aufrufers verbrauchen.NiedrigMittel
74timestampGefährliche Verwendung von block.timestampNiedrigMittel
75assemblyAssembly-VerwendungInformativHoch
76assert-state-changeAssert-StatusänderungInformativHoch
77boolean-equalVergleich mit einer Boolean-KonstanteInformativHoch
78cyclomatic-complexityErkennt Funktionen mit hoher (> 11) zyklomatischer KomplexitätInformativHoch
79deprecated-standardsVeraltete Solidity-StandardsInformativHoch
80erc20-indexedNicht indizierte ERC20-EreignisparameterInformativHoch
81function-init-stateFunktion, die State-Variablen initialisiertInformativHoch
82incorrect-using-forErkennt die Verwendung von using-for-Anweisungen, wenn keine Funktion aus einer bestimmten Bibliothek zu einem bestimmten Typ passtInformativHoch
83low-level-callsLow-Level-AufrufeInformativHoch
84missing-inheritanceFehlende VererbungInformativHoch
85naming-conventionEinhaltung der Solidity-NamenskonventionenInformativHoch
86pragmaWenn verschiedene Pragma-Direktiven verwendet werdenInformativHoch
87redundant-statementsRedundante AnweisungenInformativHoch
88solc-versionFalsche Solidity-VersionInformativHoch
89unimplemented-functionsNicht implementierte FunktionenInformativHoch
90unindexed-event-addressEreignisse mit Adressparametern, aber ohne indizierte ParameterInformativHoch
91unused-stateUnbenutzte State-VariablenInformativHoch
92costly-loopKostspielige Operationen in einer SchleifeInformativMittel
93dead-codeFunktionen, die nicht verwendet werdenInformativMittel
94reentrancy-unlimited-gasReentrancy-Schwachstellen durch send und transferInformativMittel
95too-many-digitsEinhaltung bewährter Praktiken für numerische NotationInformativMittel
96cache-array-lengthErkennt for-Schleifen, die das length-Mitglied eines Storage-Arrays in ihrer Schleifenbedingung verwenden und es nicht verändern.OptimierungHoch
97constable-statesState-Variablen, die als konstant deklariert werden könntenOptimierungHoch
98external-functionÖffentliche Funktion, die als external deklariert werden könnteOptimierungHoch
99immutable-statesState-Variablen, die als immutable deklariert werden könntenOptimierungHoch
100var-read-using-thisVertrag liest seine eigene Variable mittels thisOptimierungHoch

Weitere Informationen finden Sie unter

Printer

Schnellüberblick-Printer

Detailprüfungs-Printer* call-graph: Exportiere den Call-Graphen der Verträge in eine dot-Datei

Um einen Drucker auszuführen, verwende --print und eine kommagetrennte Liste von Druckern.

Siehe die Printer-Dokumentation für die vollständigen Listen.

Tools

Siehe die Tool-Dokumentation für weitere Tools.

Kontaktiere uns, um Hilfe beim Erstellen benutzerdefinierter Tools zu erhalten.

API-Dokumentation

Die Dokumentation zu Slithers Interna ist hier verfügbar.

Hilfe erhalten

Besuche gerne unseren Slack-Kanal (#ethereum) für Hilfe bei der Nutzung oder Erweiterung von Slither.

FAQ

Wie schließe ich Mocks oder Tests aus?

Wie behebe ich "unknown file" oder Kompilierungsprobleme?

  • Da Slither den solc AST benötigt, müssen alle Abhängigkeiten verfügbar sein. Wenn ein Vertrag Abhängigkeiten hat, wird slither contract.sol fehlschlagen. Verwende stattdessen slither . im übergeordneten Verzeichnis von contracts/ (du solltest contracts/ sehen, wenn du ls ausführst). Wenn du einen node_modules/-Ordner hast, muss er sich im selben Verzeichnis wie contracts/ befinden. Um zu überprüfen, ob dieses Problem mit Slither zusammenhängt, führe den Kompilierungsbefehl für das von dir verwendete Framework aus, z.B. npx hardhat compile. Das muss erfolgreich funktionieren; andernfalls kann Slithers Kompilierungs-Engine, crytic-compile, den AST nicht generieren.

Lizenz

Slither ist unter der AGPLv3-Lizenz lizenziert und wird unter dieser vertrieben. Kontaktiere uns, wenn du eine Ausnahme von den Bedingungen suchst.

Veröffentlichungen

Veröffentlichung von Trail of Bits

Externe Veröffentlichungen

TitelNutzungAutorenKonferenz/ZeitschriftCode
ReJection: A AST-Based Reentrancy Vulnerability Detection MethodAST-basierte Analyse auf Basis von SlitherRui Ma, Zefeng Jian, Guangyuan Chen, Ke Ma, Yujia ChenCTCIS 19-
MPro: Combining Static and Symbolic Analysis for Scalable Testing of Smart ContractNutzung von Datenabhängigkeiten durch SlitherWilliam Zhang, Sebastian Banescu, Leodardo Pasos, Steven Stewart, Vijay GaneshISSRE 2019MPro
ETHPLOIT: From Fuzzing to Efficient Exploit Generation against Smart ContractsNutzung von Datenabhängigkeiten durch SlitherQingzhao Zhang, Yizhuo Wang, Juanru Li, Siqi MaSANER 20-
Verification of Ethereum Smart Contracts: A Model Checking ApproachSymbolische Ausführung auf Basis von Slithers CFGTam Bang, Hoang H Nguyen, Dung Nguyen, Toan Trieu, Tho QuanIJMLC 20-
Smart Contract RepairVerlass auf Slithers SchwachstellendetektorenXiao Liang Yu, Omar Al-Bataineh, David Lo, Abhik RoychoudhuryTOSEM 20SCRepair
Demystifying Loops in Smart ContractsNutzung von Datenabhängigkeiten durch SlitherBen Mariano, Yanju Chen, Yu Feng, Shuvendu Lahiri, Isil DilligASE 20-
Trace-Based Dynamic Gas Estimation of Loops in Smart ContractsVerwendung von Slithers CFG zur Erkennung von SchleifenChunmiao Li, Shijie Nie, Yang Cao, Yijun Yu, Zhenjiang HuIEEE Open J. Comput. Soc. 1 (2020)-
SAILFISH: Vetting Smart Contract State-Inconsistency Bugs in SecondsVerlass auf SlithIR zum Aufbau eines Storage-Dependency-GraphenPriyanka Bose, Dipanjan Das, Yanju Chen, Yu Feng, Christopher Kruegel, and Giovanni VignaS&P 22Sailfish
SolType: Refinement Types for Arithmetic Overflow in SolidityVerwendung von Slither als Frontend zur Erstellung eines VerfeinerungstypsystemsBryan Tan, Benjamin Mariano, Shuvendu K. Lahiri, Isil Dillig, Yu FengPOPL 22-
Do Not Rug on Me: Leveraging Machine Learning Techniques for Automated Scam DetectionVerwendung von Slither zur Extraktion von Tokenmerkmalen (mintable, pausable, ..)Mazorra, Bruno, Victor Adan, and Vanesa DazaMathematics 10.6 (2022)-
MANDO: Multi-Level Heterogeneous Graph Embeddings for Fine-Grained Detection of Smart Contract VulnerabilitiesVerwendung von Slither zur Extraktion des CFG und des Call-GraphenHoang Nguyen, Nhat-Minh Nguyen, Chunyao Xie, Zahra Ahmadi, Daniel Kudendo, Thanh-Nam Doan and Lingxiao JiangIEEE 9th International Conference on Data Science and Advanced Analytics (DSAA, 2022)ge-sc
Automated Auditing of Price Gouging TOD Vulnerabilities in Smart ContractsVerwendung von Slither zur Extraktion des CFG und der DatenabhängigkeitenSidi Mohamed Beillahi, Eric Keilty, Keerthi Nelaturu, Andreas Veneris, and Fan Long2022 IEEE International Conference on Blockchain and Cryptocurrency (ICBC)Smart-Contract-Repair
Modeling and Enforcing Access Control Policies for Smart ContractsErweiterung der Datenabhängigkeiten von SlitherJan-Philipp Toberg, Jonas Schiffl, Frederik Reiche, Bernhard Beckert, Robert Heinrich, Ralf ReussnerIEEE International Conference on Decentralized Applications and Infrastructures (DAPPS), 2022SolidityAccessControlEnforcement
Smart Contract Vulnerability Detection Based on Deep Learning and Multimodal Decision FusionVerwendung von Slither zur Extraktion des CFGWeichu Deng, Huanchun Wei, Teng Huang, Cong Cao, Yun Peng, and Xuan HuSensors 2023, 23, 7246-
Semantic-enriched Code Knowledge Graph to Reveal Unknowns in Smart Contract Code ReuseVerwendung von Slither zur Extraktion der Code-Merkmale (CFG, Funktion, Parametertypen, ..)Qing Huang, Dianshu Liao, Zhenchang Xing, Zhengkang Zuo, Changjing Wang, Xin XiaACM Transactions on Software Engineering and Methodology, 2023-
Smart Contract Parallel Execution with Fine-Grained State AccessesVerwendung von Slither zum Aufbau von ZustandszugriffsgraphenXiaodong Qi, Jiao Jiao, Yi LiInternational Conference on Distributed Computing Systems (ICDCS), 2023-
Bad Apples: Understanding the Centralized Security Risks in Decentralized EcosystemsImplementierung einer internen Analyse auf Basis von SlitherKailun Yan , Jilian Zhang , Xiangyu Liu , Wenrui Diao , Shanqing GuoACM Web Conference April 2023-
Identifying Vulnerabilities in Smart Contracts using Interval AnalysisErstellung von 4 Detektoren auf Basis von SlitherŞtefan-Claudiu Susan, Andrei ArusoaieFROM 2023-
Storage State Analysis and Extraction of Ethereum Blockchain Smart Contracts (no PDF in open access)Verlass auf Slithers CFG und ASTMaha Ayub , Tania Saleem , Muhammad Janjua , Talha AhmadTOSEM 2023SmartMuv

Wenn du Slither in einer akademischen Arbeit verwendest, erwäge eine Bewerbung für den Crytic $10k Research Prize.

Kategorien