Skip to content

A tool for design pattern recognition on blockchain through static code analysis

License

Notifications You must be signed in to change notification settings

LightDestory/SolidityDesignPatternAnalyzer

Repository files navigation


Preview

Solidity Design Pattern Analyzer

Un utility per il riconoscimento di design pattern su blockchain tramite analisi statica del codice

This README is available in the following languages:
Italian · English

Tabella dei Contenuti
  1. Avviso
  2. Informazioni sul Progetto
  3. Guida all'utilizzo
  4. Licenza
  5. Bibliografia

Avviso

Successivamente alla laurea, il progetto ha subito cambiamente e miglioramenti, perciò quanto descritto nell'elaborato della tesi potrebbe non rispecchiare più attendibile.

Per visionare il progetto nella forma descritta nell'elaborato della tesi e la tesi stessa, fare riferimento al branch frozen, clicca qui .

Informazioni sul Progetto

Solidity Design Pattern Analyzer è un applicativo software sviluppato per la mia tesi di laurea per il CdL Triennale in Informatica presso l'Università degli Studi di Catania.

L’applicativo software e in grado di eseguire le seguenti operazioni:

  • Rilevare, nei limiti linguistici e delle dipendenze utilizzate, tutti e ventidue i design pattern documentati nella tesi, i cui relativi descriptor sono inclusi nel codice sorgente, ed e possibile, mediante la combinazione di controlli generici, definire nuovi descriptor per riconoscere design pattern futuri;
  • Descrivere uno smart-contract, ovvero estrarre le informazioni utili a creare un nuovo descriptor;

(back to top)

Basato su

(back to top)

Guida all'utilizzo

Prima di utilizzare l'applicativo è necessario installare le dipendenze.

Prerequisiti

Per installare le dipendeze puoi usare il package installer di python denominato pip:

  • Come pacchetti globali:
    pip install -r requirements.txt
  • Tramite ambiente virtuale:
    python3 -m venv /path/to/new/virtual/environment
    source /path/to/new/virtual/environment/bin/activate
    pip install -r requirements.txt

Come usarlo

Per utilizzare Analyzer e necessario fornire una serie di parametri, qui elencati:

Parametro Descrizione
-h, --help Un parametro opzionale che, se fornito, fara stampare una guida sull’utilizzo nel terminale
-a, --action Un parametro obbligatorio che accetta soltanto i valori analyze e describe, a seconda dell’operazione che si vuole eseguire.
-t, --target Un parametro obbligatorio che rappresenta la path, assoluta o relativa, del file o cartella contenente del codice sorgente Solidity.
Nel caso venga fornita una directory verrà eseguità la modalità batch che salverà tutti i risultati ottenuti in un'unico file.
-d, --descriptor Un parametro opzionale per l’operazione analyze che rappresenta la path, assoluta o relativa, del file o cartella contenente i Design Pattern Descriptor.
Se omesso verra usato un path predefinito.
-v, --verbose Un parametro opzionale che, se fornito, fara stampare nel terminale i log di debug, normalmente non visualizzati.
-ai, --allow-incompatible Un parametro opzionale che determina il controllo di compatibilita della versione di Solidity utilizzata nel file fornito.
Accetta come valori: ask, skip, always.
Default: ask, chiede conferma.
-p, --plot Un parametro opzionale che determina la visualizzazione di un grafico riassuntivo.
Accetta come valori: ask, skip, always.
Default: ask, chiede conferma.
-pr, --print-result Un parametro opzionale che, se fornito, farà stampare sul terminale un riassunto dei risultati ottenuti dall'analisi.
-wr, --write-result Un parametro opzionale che determina il salvataggio su disco dei risultati ottenuti dall'analisi dei singoli file.
Accetta come valori: ask, skip, always.
Default: ask, chiede conferma.
-fr, --format-result Un parametro opzionale che determina il formato con cui i dati ottenuti vengono salvati.
Accetta come valori: json, csv.
Default: json.
--debug-analysis Un parametro opzionale che, se fornito, farà eseguire un analisi di debug sull'AST.

Per esempio, volendo analizzare uno smart-contract al fine di individuare l’utilizzo dell’Ownership pattern e necessario eseguire il comando:

python analyzer.py -a analyze -t ./source_code.sol -d ./Ownership_descriptor.json --print-result --write-result always --plot always

(back to top)

Licenza

Il software è rilasciato sotto licenza MIT. Visionare LICENSE per maggiori informazioni.

(back to top)

Bibliografia

(back to top)

About

A tool for design pattern recognition on blockchain through static code analysis

Topics

Resources

License

Stars

Watchers

Forks

Contributors 4

  •  
  •  
  •  
  •