Amarna est un analyseur statique et un linter pour le langage de programmation du Caire.
Analyser un projet CAIRO dans le répertoire actuel et exporter les résultats Sarif vers un fichier:
amarna . -o out.sarif Analyser un seul fichier file.cairo et exporter les résultats Sarif vers un fichier:
amarna file.cairo -o out.sarif Analyser un seul fichier file.cairo et imprimer un résumé des résultats:
amarna file.cairo -s| # | Règle | Ce qu'il trouve | Impact | Précision |
|---|---|---|---|---|
| 1 | Opérations arithmétiques | Toutes les utilisations des opérations arithmétiques +, -, * et / | Informations | Haut |
| 2 | Arguments inutilisés | Arguments de fonction qui ne sont pas utilisés dans les fonctions dans lesquelles elles apparaissent | Avertissement | Haut |
| 3 | Importations inutilisées | Importations inutilisées | Informations | Haut |
| 4 | Décorateurs de faux | Décorateurs de code mal tivé | Informations | Haut |
| 5 | Fonctions inutilisées | Fonctions qui ne sont jamais appelées | Informations | Moyen |
| 6 | Codes d'erreur | Les appels de fonction qui ont des valeurs de retour qui doivent être vérifiées | Informations | Haut |
| 7 | Utilisation de l'affirmation incohérente | Affirme qui utilise la même constante de différentes manières, par exemple, assert_le(amount, BOUND) et assert_le(amount, BOUND - 1) | Avertissement | Haut |
| 8 | Magasins morts | Variables qui sont attribuées de valeurs mais non utilisées avant une instruction de retour | Informations | Moyen |
| 9 | Débordements incontrôlés | Les appels de fonction qui ignorent les drapeaux de débordement renvoyés, par exemple, uint256_add | Avertissement | Haut |
| 10 | Valeur de retour d'adresse de l'appelant | Fonction appelle la fonction get_caller_address . | Informations | Haut |
| 11 | Collision variable de stockage | Plusieurs @storage_var avec le même nom. (déprécié) | Avertissement | Haut |
| 12 | Importation de fonction implicite | Fonction avec décorateur @external, @view, @l1_handler qui est implicitement importé. (déprécié) | Informations | Haut |
| 13 | Fonction de vue non appliquée | Modification d'état dans une fonction @view | Informations | Haut |
| 14 | Variable non initialisée | Variables locales qui ne sont jamais initialisées. | Informations | Haut |
Analyser un projet du Caire dans le répertoire actuel et exporter les résultats vers un fichier:
amarna . -o out.sarif Analyser un seul fichier deleverage.cairo et exporter les résultats vers un fichier:
amarna deleverage.cairo -o deleverage.sarif Analyser un seul code.cairo de fichier.caire et imprimer un résumé des résultats:
amarna code.cairo -s Analyser un fichier du Caire et sortir l'AST récupéré en png :
amarna file.cairo -pngAnalyser un fichier du Caire avec la règle UNUSED_IMPORT:
amarna file.cairo --rules=unused-importsAnalyser un fichier du Caire en utilisant toutes les règles à l'exception de la règle arithmétique-ADD:
amarna file.cairo --except-rules=arithmetic-addLe menu d'aide complet est:
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
Le format de fichier SARIF est un format standard pour les outils d'analyse statique et peut être affiché dans VScode avec l'extension officielle.
pip install amarnaLes règles d'analyse statique peuvent être:
Des exemples de ceux-ci sont:
Obtenez les noms des règles actuellement mises en œuvre avec:
amarna --show-rulesExécuter amarna avec un ensemble de règles défini en utilisant
amarna --rules=rule1,rule2 . La commande suivante exécutera uniquement la règle unused-imports et imprime le résultat résumé
amarna --rules=unused-imports . -sExécutez Amarna avec toutes les règles, sauf un ensemble défini de règles en utilisant
amarna --exclude-rules=arithmetic-add,arithmetic-sub . -sVous pouvez modifier la première ligne d'un fichier du Caire pour désactiver un ensemble de règles spécifiques sur ce fichier. Par exemple, en ajoutant la ligne
// amarna: disable=arithmetic-div,arithmetic-sub,arithmetic-mul,arithmetic-add comme première ligne de file.cairo et exécutant Amarna avec
amarna directory/ --disable-inline -s ne signalera aucune règle arithmétique au fichier file.cairo .