def __init__(self, solv=None, solc_args=None, dynld=False): self.solv = solv self.solc_args = solc_args self.dynld = dynld self.mythril_dir = self._init_mythril_dir() self.sigs = signatures.SignatureDb() try: self.sigs.open( ) # tries mythril_dir/signatures.json by default (provide path= arg to make this configurable) except FileNotFoundError as fnfe: logging.info( "No signature database found. Creating database if sigs are loaded in: " + self.sigs.signatures_file + "\n" + "Consider replacing it with the pre-initialized database at https://raw.githubusercontent.com/ConsenSys/mythril/master/signatures.json" ) except json.JSONDecodeError as jde: raise CriticalError("Invalid JSON in signatures file " + self.sigs.signatures_file + "\n" + str(jde)) self.solc_binary = self._init_solc_binary(solv) self.config_path = os.path.join(self.mythril_dir, 'config.ini') self.leveldb_dir = self._init_config() self.eth = None # ethereum API client self.eth_db = None # ethereum LevelDB client self.contracts = [] # loaded contracts
def __init__( self, solv=None, solc_args=None, dynld=False, enable_online_lookup=False, onchain_storage_access=True, ): self.solv = solv self.solc_args = solc_args self.dynld = dynld self.onchain_storage_access = onchain_storage_access self.enable_online_lookup = enable_online_lookup self.mythril_dir = self._init_mythril_dir() self.sigs = {} try: # tries mythril_dir/signatures.json by default (provide path= arg to make this configurable) self.sigs = signatures.SignatureDb( enable_online_lookup=self.enable_online_lookup) except FileNotFoundError as e: logging.info(str(e)) # Create empty db file if none exists f = open(os.path.join(self.mythril_dir, "signatures.json"), "w") f.write("{}") f.close() self.sigs = signatures.SignatureDb( enable_online_lookup=self.enable_online_lookup) except json.JSONDecodeError as e: raise CriticalError(str(e)) self.solc_binary = self._init_solc_binary(solv) self.config_path = os.path.join(self.mythril_dir, "config.ini") self.leveldb_dir = self._init_config() self.eth = None # ethereum API client self.eth_db = None # ethereum LevelDB client self.contracts = [] # loaded contracts