Amarna ist eine statische Analysatorin und ein Linter für die Kairo-Programmiersprache.
Analysieren Sie ein Kairo -Projekt im aktuellen Verzeichnis und exportieren Sie die SARIF -Ergebnisse in eine Datei:
amarna . -o out.sarif Analysieren Sie eine einzelne file.cairo und exportieren Sie die SARIF -Ergebnisse in eine Datei:
amarna file.cairo -o out.sarif Analysieren Sie eine einzelne file.cairo und drucken Sie eine Zusammenfassung der Ergebnisse aus:
amarna file.cairo -s| # | Regel | Was es findet | Auswirkungen | Präzision |
|---|---|---|---|---|
| 1 | Arithmetische Operationen | Alle Verwendungen von arithmetischen Operationen +, -, *und / | Info | Hoch |
| 2 | Nicht verwendete Argumente | Funktionsargumente, die in den Funktionen, in denen sie erscheinen, nicht verwendet werden | Warnung | Hoch |
| 3 | Unbenutzte Importe | Unbenutzte Importe | Info | Hoch |
| 4 | Verwickelte Dekorateure | Verwickelte Codedekorateure | Info | Hoch |
| 5 | Unbenutzte Funktionen | Funktionen, die niemals genannt werden | Info | Medium |
| 6 | Fehlercodes | Funktionsaufrufe mit Rückgabetwerten, die überprüft werden müssen | Info | Hoch |
| 7 | Inkonsistente Behauptung | Behauptet, dass die gleiche Konstante auf unterschiedliche Weise verwendet wird, z. B. assert_le(amount, BOUND) und assert_le(amount, BOUND - 1) | Warnung | Hoch |
| 8 | Tote Geschäfte | Variablen, denen Werte zugewiesen werden, aber nicht vor einer Rückgabeanweisung verwendet werden | Info | Medium |
| 9 | Deaktivierte Überläufe | Funktionsaufrufe, die die zurückgegebenen Überlaufflags ignorieren, z. B. uint256_add | Warnung | Hoch |
| 10 | Rückgabewert der Anruferadresse | Funktionsaufrufe zur Funktion get_caller_address . | Info | Hoch |
| 11 | Speichervariable Kollision | Multiple @storage_var mit demselben Namen. (veraltet) | Warnung | Hoch |
| 12 | Implizite Funktion Import | Funktion mit Decorator @external, @view, @l1_handler der implizit importiert wird. (veraltet) | Info | Hoch |
| 13 | Nicht durchsetztes Ansichtsfunktion | Statusänderung innerhalb einer @view -Funktion | Info | Hoch |
| 14 | Nicht initialisierte Variable | Lokale Variablen, die nie initialisiert werden. | Info | Hoch |
Analysieren Sie ein Kairo -Projekt im aktuellen Verzeichnis und exportieren Sie die Ergebnisse in eine Datei:
amarna . -o out.sarif Analysieren Sie eine einzelne Datei deleverage.cairo und exportieren Sie die Ergebnisse in eine Datei:
amarna deleverage.cairo -o deleverage.sarif Analysieren Sie einen einzelnen code.cairo und drucken Sie eine Zusammenfassung der Ergebnisse aus:
amarna code.cairo -s Analysieren Sie eine Kairo -Datei und geben Sie den wiederhergestellten AST in png aus:
amarna file.cairo -pngAnalysieren Sie eine Kairo -Datei mit der Regel von UNUSED_IMPORT:
amarna file.cairo --rules=unused-importsAnalysieren Sie eine Kairo-Datei mit allen Regeln mit Ausnahme der Arithmetik-Add-Regel:
amarna file.cairo --except-rules=arithmetic-addDas vollständige Hilfemenü ist:
usage: amarna [-h] [-p] [-o OUTPUT] [-s] [-png] [-rules RULES] [-exclude-rules EXCLUDE_RULES] [-show-rules] [-disable-inline] -f
Amarna is a static-analyzer for the Cairo programming language.
positional arguments:
-f the name of the .cairo file or directory with .cairo files to analyze
optional arguments:
-h, --help show this help message and exit
-p, --print print output
-o OUTPUT, --output OUTPUT
file to write the output results in sarif format
-s, -summary, --summary
output summary
-png, --png save a png with the AST of a file
-rules RULES, --rules RULES
Only run this set of rules. Enter rule names comma-separated, e.g., dead-store,unused-arguments
-exclude-rules EXCLUDE_RULES, --exclude-rules EXCLUDE_RULES
Exclude these rules from the analysis. Enter rule names comma-separated, e.g., dead-store,unused-arguments
-show-rules, --show-rules
Show all supported rules and descriptions.
-disable-inline, --disable-inline
Disable rules with inline comments. The comments should be the first line and of the form: # amarna: disable=rulename1,rulename2
Das SARIF-Dateiformat ist ein Standardformat für statische Analysetools und kann in VSCODE mit der offiziellen Erweiterung angezeigt werden.
pip install amarnaDie statischen Analyseregeln können sein:
Beispiele dafür sind:
Erhalten Sie die Namen der derzeit implementierten Regeln mit:
amarna --show-rulesFühren Sie Amarna mit einem definierten Regeln mit Verwendung aus
amarna --rules=rule1,rule2 . Der folgende Befehl wird nur die Regel unused-imports ausführen und das Zusammenfassungsergebnis drucken
amarna --rules=unused-imports . -sFühren Sie Amarna mit allen Regeln aus, mit Ausnahme eines definierten Regelnsatzes verwenden
amarna --exclude-rules=arithmetic-add,arithmetic-sub . -sSie können die erste Zeile einer Kairo -Datei ändern, um einen bestimmten Regelsatz in dieser Datei zu deaktivieren. Zum Beispiel das Hinzufügen der Zeile
// amarna: disable=arithmetic-div,arithmetic-sub,arithmetic-mul,arithmetic-add als erste file.cairo und laufe Amarna mit
amarna directory/ --disable-inline -s meldet keine arithmetische Regel der file.cairo -Datei.