def _load_from_compile_legacy2(crytic_compile: "CryticCompile", loaded_json: Dict) -> None: """Load from old (old) export Args: crytic_compile (CryticCompile): CryticCompile object to populate loaded_json (Dict): Json representation of the CryticCompile object """ for key, compilation_unit_json in loaded_json["compilation_units"].items(): compilation_unit = CompilationUnit(crytic_compile, key) compilation_unit.compiler_version = CompilerVersion( compiler=compilation_unit_json["compiler"]["compiler"], version=compilation_unit_json["compiler"]["version"], optimized=compilation_unit_json["compiler"]["optimized"], ) for contract_name, contract in compilation_unit_json["contracts"].items(): compilation_unit.contracts_names.add(contract_name) filename = Filename( absolute=contract["filenames"]["absolute"], relative=contract["filenames"]["relative"], short=contract["filenames"]["short"], used=contract["filenames"]["used"], ) compilation_unit.filename_to_contracts[filename].add(contract_name) compilation_unit.abis[contract_name] = contract["abi"] compilation_unit.bytecodes_init[contract_name] = contract["bin"] compilation_unit.bytecodes_runtime[contract_name] = contract["bin-runtime"] compilation_unit.srcmaps_init[contract_name] = contract["srcmap"].split(";") compilation_unit.srcmaps_runtime[contract_name] = contract["srcmap-runtime"].split(";") compilation_unit.libraries[contract_name] = contract["libraries"] userdoc = contract.get("userdoc", {}) devdoc = contract.get("devdoc", {}) compilation_unit.natspec[contract_name] = Natspec(userdoc, devdoc) if contract["is_dependency"]: crytic_compile.dependencies.add(filename.absolute) crytic_compile.dependencies.add(filename.relative) crytic_compile.dependencies.add(filename.short) crytic_compile.dependencies.add(filename.used) compilation_unit.asts = compilation_unit_json["asts"] if "filenames" in compilation_unit_json: compilation_unit.filenames = { _convert_dict_to_filename(filename) for filename in compilation_unit_json["filenames"] } else: # For legay code, we recover the filenames from the contracts list # This is not perfect, as a filename might not be associated to any contract for contract_name, contract in compilation_unit_json["contracts"].items(): filename = _convert_dict_to_filename(contract["filenames"]) compilation_unit.filenames.add(filename)
def _load_from_compile_current(crytic_compile: "CryticCompile", loaded_json: Dict) -> None: for key, compilation_unit_json in loaded_json["compilation_units"].items(): compilation_unit = CompilationUnit(crytic_compile, key) compilation_unit.compiler_version = CompilerVersion( compiler=compilation_unit_json["compiler"]["compiler"], version=compilation_unit_json["compiler"]["version"], optimized=compilation_unit_json["compiler"]["optimized"], ) for contracts_data in compilation_unit_json["contracts"].values(): for contract_name, contract in contracts_data.items(): compilation_unit.contracts_names.add(contract_name) filename = Filename( absolute=contract["filenames"]["absolute"], relative=contract["filenames"]["relative"], short=contract["filenames"]["short"], used=contract["filenames"]["used"], ) compilation_unit.filename_to_contracts[filename].add(contract_name) compilation_unit.abis[contract_name] = contract["abi"] compilation_unit.bytecodes_init[contract_name] = contract["bin"] compilation_unit.bytecodes_runtime[contract_name] = contract["bin-runtime"] compilation_unit.srcmaps_init[contract_name] = contract["srcmap"].split(";") compilation_unit.srcmaps_runtime[contract_name] = contract["srcmap-runtime"].split( ";" ) compilation_unit.libraries[contract_name] = contract["libraries"] userdoc = contract.get("userdoc", {}) devdoc = contract.get("devdoc", {}) compilation_unit.natspec[contract_name] = Natspec(userdoc, devdoc) if contract["is_dependency"]: crytic_compile.dependencies.add(filename.absolute) crytic_compile.dependencies.add(filename.relative) crytic_compile.dependencies.add(filename.short) crytic_compile.dependencies.add(filename.used) compilation_unit.asts = compilation_unit_json["asts"] compilation_unit.filenames = { _convert_dict_to_filename(filename) for filename in compilation_unit_json["filenames"] }