This project is a static analysis based metric calculator tool for Solidity smart contract programs. It is a Work In Progress, supporting the following metrics
Parameter | Description | Data Type |
---|---|---|
Address | The smart cotract Address on the ethereum blockchain | address (20 bytes) |
CV | Compiler Version | String |
FS | The First time the smart contract has been Seen on the blockchain | Date |
LS | The Last time the smart contract has been Seen on the blockchain | Date |
NA | Number of Asserts | Number |
NC | Number of contracts | Number |
NCL | Number of Comment Lines | Number |
NF | Number of Functions | Number |
NFM | Number of function modifiers | Number |
NM | Number of Mapping types | Number |
NP | Number of modifier Payable | Number |
NRq | Number of requires | Number |
NRv | Number of reverts | Number |
NSCL | Number of Source Code Lines | Number |
McCC | McCabe’s cyclomatic complexity | Number |
This tool merges two metrics datasets: solmet(SolMet) and pyetherchain (EtherChain). The join result is named SMEC (SolMet and EtherChain).
cd examples
python3 01-download-SCs.py
python3 02-metrics-from-solmet.py # input_file: ./output/*.sol | output_file: ./output/*.out
python3 03-join_metrics.py # input_file: contracts_overview_file | output_file: solmetant.csv
cd examples
jupyter notebook &
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
df = pd.read_csv('smec.csv', sep=';')
df.sort_values(by=['CV'], inplace=True)
df.head()
plt.figure(figsize=(20,5))
sns.swarmplot(x = 'CV',y='SLOC',data=df, size=5)
plt.show()
### to calculate the number of contracts for every year
df = pd.read_csv('smec.csv', sep=';')
df.FS = pd.to_datetime(df.FS)
df1 = df.resample('Y', on="FS").agg({"SolidityFile":'size'})
print(df1)
For further information, please follow this link.
The parser is based on the excellent antlr4 grammar available at https://github.com/solidityj/solidity-antlr4.
- A python interface to the ethereum blockchain explorer at www.etherchain.org. https://github.com/tintinweb/pyetherchain
- SolMet-Solidity-parser. https://github.com/chicxurug/SolMet-Solidity-parser