Fix issue with source mapping (#1526)

* Fix issue with source mapping

* Fix issues with deployedBytecode

* Add typing
pull/1532/head
Nikhil Parasaram 3 years ago committed by GitHub
parent 128aea5dd4
commit 579480b477
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 36
      mythril/solidity/soliditycontract.py

@ -132,28 +132,34 @@ class SolidityContract(EVMContract):
super().__init__(code, creation_code, name=name)
@staticmethod
def get_sources(indices_data: Dict, source_data: Dict) -> None:
"""
Get source indices mapping
"""
if "generatedSources" not in source_data:
return
sources = source_data["generatedSources"]
for source in sources:
full_contract_src_maps = SolidityContract.get_full_contract_src_maps(
source["ast"]
)
indices_data[source["id"]] = SolidityFile(
source["name"], source["contents"], full_contract_src_maps
)
@staticmethod
def get_solc_indices(data: Dict) -> Dict:
"""
Returns solc file indices
"""
indices = {}
has_sources = True
indices: Dict = {}
for contract_data in data["contracts"].values():
for source_data in contract_data.values():
if "generatedSources" not in source_data["evm"]["deployedBytecode"]:
has_sources = False
break
sources = source_data["evm"]["deployedBytecode"]["generatedSources"]
for source in sources:
full_contract_src_maps = SolidityContract.get_full_contract_src_maps(
source["ast"]
)
indices[source["id"]] = SolidityFile(
source["name"], source["contents"], full_contract_src_maps
)
if has_sources is False:
break
SolidityContract.get_sources(indices, source_data["evm"]["bytecode"])
SolidityContract.get_sources(
indices, source_data["evm"]["deployedBytecode"]
)
for source in data["sources"].values():
full_contract_src_maps = SolidityContract.get_full_contract_src_maps(
source["ast"]

Loading…
Cancel
Save