def parse_args(parser: argparse.ArgumentParser, args: argparse.Namespace) -> None: """ Parses the arguments :param parser: The parser :param args: The args """ if args.epic: path = os.path.dirname(os.path.realpath(__file__)) sys.argv.remove("--epic") os.system(" ".join(sys.argv) + " | python3 " + path + "/epic.py") sys.exit() if args.version: if args.outform == "json": print(json.dumps({"version_str": VERSION})) else: print("Mythril version {}".format(VERSION)) sys.exit() # Parse cmdline args validate_args(parser, args) try: quick_commands(args) config = set_config(args) leveldb_search(config, args) disassembler = MythrilDisassembler( eth=config.eth, solc_version=args.solv, solc_args=args.solc_args, enable_online_lookup=args.query_signature, ) if args.truffle: try: disassembler.analyze_truffle_project(args) except FileNotFoundError: print( "Build directory not found. Make sure that you start the analysis from the project root, and that 'truffle compile' has executed successfully." ) sys.exit() address = get_code(disassembler, args) execute_command(disassembler=disassembler, address=address, parser=parser, args=args) except CriticalError as ce: exit_with_error(args.outform, str(ce)) except Exception: exit_with_error(args.outform, traceback.format_exc())
def parse_args_and_execute(parser: ArgumentParser, args: Namespace) -> None: """ Parses the arguments :param parser: The parser :param args: The args """ if args.epic: path = os.path.dirname(os.path.realpath(__file__)) sys.argv.remove("--epic") os.system(" ".join(sys.argv) + " | python3 " + path + "/epic.py") sys.exit() if args.command not in COMMAND_LIST or args.command is None: parser.print_help() sys.exit() if args.command == "version": if args.outform == "json": print(json.dumps({"version_str": VERSION})) else: print("Mythril version {}".format(VERSION)) sys.exit() if args.command == "help": parser.print_help() sys.exit() # Parse cmdline args validate_args(args) try: if args.command == "function-to-hash": contract_hash_to_address(args) config = set_config(args) leveldb_search(config, args) query_signature = args.__dict__.get("query_signature", None) solc_args = args.__dict__.get("solc_args", None) solv = args.__dict__.get("solv", None) disassembler = MythrilDisassembler( eth=config.eth, solc_version=solv, solc_args=solc_args, enable_online_lookup=query_signature, ) if args.command == "truffle": try: disassembler.analyze_truffle_project(args) except FileNotFoundError: print( "Build directory not found. Make sure that you start the analysis from the project root, " "and that 'truffle compile' has executed successfully.") sys.exit() address = load_code(disassembler, args) execute_command(disassembler=disassembler, address=address, parser=parser, args=args) except CriticalError as ce: exit_with_error(args.__dict__.get("outform", "text"), str(ce)) except Exception: exit_with_error(args.__dict__.get("outform", "text"), traceback.format_exc())