|
|
@ -1,7 +1,7 @@ |
|
|
|
""" |
|
|
|
""" |
|
|
|
Module printing summary of the contract |
|
|
|
Module printing summary of the contract |
|
|
|
""" |
|
|
|
""" |
|
|
|
|
|
|
|
import collections |
|
|
|
from slither.printers.abstract_printer import AbstractPrinter |
|
|
|
from slither.printers.abstract_printer import AbstractPrinter |
|
|
|
from slither.utils.colors import blue, green, magenta |
|
|
|
from slither.utils.colors import blue, green, magenta |
|
|
|
|
|
|
|
|
|
|
@ -21,12 +21,29 @@ class ContractSummary(AbstractPrinter): |
|
|
|
for c in self.contracts: |
|
|
|
for c in self.contracts: |
|
|
|
(name, _inheritance, _var, func_summaries, _modif_summaries) = c.get_summary() |
|
|
|
(name, _inheritance, _var, func_summaries, _modif_summaries) = c.get_summary() |
|
|
|
txt += blue("\n+ Contract %s\n"%name) |
|
|
|
txt += blue("\n+ Contract %s\n"%name) |
|
|
|
for (f_name, visi, _, _, _, _, _) in func_summaries: |
|
|
|
# (c_name, f_name, visi, _, _, _, _, _) in func_summaries |
|
|
|
txt += " - " |
|
|
|
public = [(elem[0], (elem[1], elem[2]) ) for elem in func_summaries] |
|
|
|
|
|
|
|
# private = [(elem[0], (elem[1], elem[2])) for elem in func_summaries if elem[2] in ['internal', 'private']] |
|
|
|
|
|
|
|
# should never happen |
|
|
|
|
|
|
|
# other = [(elem[0], (elem[1], elem[2])) for elem in func_summaries if elem[2] not in ['external', 'public', 'internal', 'private']] |
|
|
|
|
|
|
|
# assert not other |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
collect = collections.defaultdict(list) |
|
|
|
|
|
|
|
for a,b in public: |
|
|
|
|
|
|
|
collect[a].append(b) |
|
|
|
|
|
|
|
public = list(collect.items()) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
for contract, functions in public: |
|
|
|
|
|
|
|
txt += blue(" - From {}\n".format(contract)) |
|
|
|
|
|
|
|
functions = sorted(functions) |
|
|
|
|
|
|
|
for (function, visi) in functions: |
|
|
|
if visi in ['external', 'public']: |
|
|
|
if visi in ['external', 'public']: |
|
|
|
txt += green("%s (%s)\n"%(f_name, visi)) |
|
|
|
txt += green(" - {} ({})\n".format(function, visi)) |
|
|
|
elif visi in ['internal', 'private']: |
|
|
|
for (function, visi) in functions: |
|
|
|
txt += magenta("%s (%s)\n"%(f_name, visi)) |
|
|
|
if visi in ['internal', 'private']: |
|
|
|
else: |
|
|
|
txt += magenta(" - {} ({})\n".format(function, visi)) |
|
|
|
txt += "%s (%s)\n"%(f_name, visi) |
|
|
|
for (function, visi) in functions: |
|
|
|
|
|
|
|
if visi not in ['external', 'public', 'internal', 'private']: |
|
|
|
|
|
|
|
txt += " - {} ({})\n".format(function, visi) |
|
|
|
|
|
|
|
|
|
|
|
self.info(txt) |
|
|
|
self.info(txt) |
|
|
|