
Statischer Analyzer für Starknet-Smart-Contracts
Caracal ist ein statisches Analysewerkzeug für die SIERRA-Darstellung von Starknet-Smart-Contracts.
Precompiled binaries sind auf unserer Releases Seite verfügbar. Wenn Sie den Cairo-Compiler 1.x.x verwenden, nutzen Sie die Binärdatei v0.1.x, andernfalls, wenn Sie den Cairo-Compiler 2.x.x verwenden, nutzen Sie v0.2.x.
Sie benötigen den Rust-Compiler und Cargo. Erstellen aus Git:
cargo install --git https://github.com/crytic/caracal --profile release --force
Erstellen aus einer lokalen Kopie:
git clone https://github.com/crytic/caracal
cd caracal
cargo install --path . --profile release --force
Erkennungsmodule auflisten:
caracal detectors
Drucker auflisten:
caracal printers
Um eine eigenständige Cairo-Datei zu verwenden und wenn Sie eine lokale Cairo-Compiler-Binärdatei haben, reicht es, auf die Datei zu verweisen. Andernfalls wird ein gebündelter Compiler verwendet und Sie müssen den Pfad zur corelib-Bibliothek entweder mit der --corelib CLI-Option oder durch Setzen der Umgebungsvariablen CORELIB_PATH angeben.
Erkennungsmodule ausführen:
caracal detect path/file/to/analyze
caracal detect path/file/to/analyze --corelib path/to/corelib/src
Drucker ausführen:
caracal print path/file/to/analyze --printer printer_to_use --corelib path/to/corelib/src
Wenn Sie ein Cairo-Projekt mit mehreren Dateien und Contracts haben, müssen Sie möglicherweise angeben, welche Contracts mit --contract-path. Die lokale Cairo-Compiler-Binärdatei wird verwendet, falls verfügbar, andernfalls wird ein gebündelter Compiler verwendet. In letzterem Fall müssen Sie auch die corelib angeben, wie oben für den eigenständigen Fall erläutert. Der Pfad ist das Verzeichnis, in dem sich cairo_project.toml befindet.
Erkennungsmodule ausführen:
caracal detect path/to/dir
caracal detect path/to/dir --contract-path token::myerc20::... token::myerc721::...
Drucker ausführen:
caracal print path/to/dir --printer printer_to_use
Wenn Sie ein Projekt haben, das Scarb verwendet, müssen Sie Folgendes in Scarb.toml hinzufügen:
[[target.starknet-contract]]
sierra = true
[cairo]
sierra-replace-ids = true
Übergeben Sie dann den Pfad zum Verzeichnis, in dem Scarb.toml liegt. Erkennungsmodule ausführen:
caracal detect path/to/dir
Drucker ausführen:
caracal print path/to/dir --printer printer_to_use
Die Cairo-Spalte repräsentiert die Compiler-Version(en), für die das Erkennungsmodul gültig ist.
cfg: Exportiert das CFG jeder Funktion in eine .dot-Dateicallgraph: Exportiert den Funktionsaufrufgraphen in eine .dot-DateiSchauen Sie im Wiki zu den folgenden Themen nach:
| Nr. | Erkennungsmodul | Erkanntes | Auswirkung | Konfidenz | Cairo |
|---|
| 1 | controlled-library-call | Bibliotheksaufrufe mit einem benutzergesteuerten Klassen-Hash | Hoch | Mittel | 1 & 2 |
| 2 | unchecked-l1-handler-from | Erkennt L1-Handler ohne Überprüfung der Absenderadresse | Hoch | Mittel | 1 & 2 |
| 3 | felt252-unsafe-arithmetic | Erkennt benutzergesteuerte Operationen mit dem felt252-Typ, der nicht überlauf-/unterlaufsicher ist | Mittel | Mittel | 1 & 2 |
| 4 | reentrancy | Erkennt, wenn eine Speichervariable vor einem externen Aufruf gelesen und danach geschrieben wird | Mittel | Mittel | 1 & 2 |
| 5 | read-only-reentrancy | Erkennt, wenn eine View-Funktion eine Speichervariable liest, die nach einem externen Aufruf geschrieben wurde | Mittel | Mittel | 1 & 2 |
| 6 | unused-events | Ereignisse definiert, aber nicht ausgelöst | Mittel | Mittel | 1 & 2 |
| 7 | unused-return | Nicht verwendete Rückgabewerte | Mittel | Mittel | 1 & 2 |
| 8 | unenforced-view | Funktion hat View-Dekorator, ändert aber den Zustand | Mittel | Mittel | 1 |
| 9 | tx-origin | Erkennt Verwendung der Transaktionsursprungsadresse als Zugriffskontrolle | Mittel | Mittel | 2 |
| 10 | unused-arguments | Nicht verwendete Argumente | Niedrig | Mittel | 1 & 2 |
| 11 | reentrancy-benign | Erkennt, wenn eine Speichervariable nach einem externen Aufruf geschrieben, aber nicht vorher gelesen wird | Niedrig | Mittel | 1 & 2 |
| 12 | reentrancy-events | Erkennt, wenn ein Ereignis nach einem externen Aufruf ausgelöst wird, was zu einer falschen Reihenfolge führt | Niedrig | Mittel | 1 & 2 |
| 13 | dead-code | Private Funktionen, die nie verwendet werden | Niedrig | Mittel | 1 & 2 |
| 14 | use-after-pop-front | Erkennt Verwendung eines Arrays oder eines Span nach dem Entfernen von Element(en) | Niedrig | Mittel | 1 & 2 |