diff --git a/crytic_compile/platform/etherscan.py b/crytic_compile/platform/etherscan.py index a8f54b4..6e4ae87 100644 --- a/crytic_compile/platform/etherscan.py +++ b/crytic_compile/platform/etherscan.py @@ -424,6 +424,28 @@ def compile(self, crytic_compile: "CryticCompile", **kwargs: str) -> None: via_ir=via_ir_enabled, ) + metadata_config = { + "solc_remaps": remappings if remappings else {}, + "solc_solcs_select": compiler_version, + "solc_args": " ".join( + filter( + None, + [ + "--via-ir" if via_ir_enabled else "", + "--optimize --optimize-runs " + str(optimize_runs) if optimize_runs else "", + "--evm-version " + evm_version if evm_version else "", + ], + ) + ), + } + + with open( + os.path.join(working_dir if working_dir else export_dir, "crytic_compile.config.json"), + "w", + encoding="utf-8", + ) as f: + json.dump(metadata_config, f) + def clean(self, **_kwargs: str) -> None: pass @@ -474,7 +496,9 @@ def _convert_version(version: str) -> str: Returns: str: converted version """ - return version[1 : version.find("+")] + if "+" in version: + return version[1 : version.find("+")] + return version[1:] def _sanitize_remappings( diff --git a/scripts/ci_test_etherscan.sh b/scripts/ci_test_etherscan.sh index 7adcef2..d4ddc5a 100755 --- a/scripts/ci_test_etherscan.sh +++ b/scripts/ci_test_etherscan.sh @@ -99,3 +99,34 @@ then exit 255 fi echo "::endgroup::" + +# From crytic/crytic-compile#544 +echo "::group::Etherscan #8" +crytic-compile 0x9AB6b21cDF116f611110b048987E58894786C244 --etherscan-apikey "$GITHUB_ETHERSCAN" + +if [ $? -ne 0 ] +then + echo "Etherscan #8 test failed" + exit 255 +fi + +dir_name=$(find crytic-export/etherscan-contracts/ -type d -name "*0x9AB6b21cDF116f611110b048987E58894786C244*" -print -quit) +cd "$dir_name" || { echo "Failed to change directory"; exit 255; } + +if [ ! -f crytic_compile.config.json ]; then + echo "crytic_compile.config.json does not exist" + exit 255 +fi + +# TODO: Globbing at crytic_compile.py:720 to run with '.' +crytic-compile 'contracts/InterestRates/InterestRatePositionManager.f.sol' --config-file crytic_compile.config.json + +if [ $? -ne 0 ] +then + echo "crytic-compile command failed" + exit 255 +fi + +cd ../../../ + +echo "::endgroup::" \ No newline at end of file diff --git a/setup.py b/setup.py index 4be13f0..d3e0cfc 100644 --- a/setup.py +++ b/setup.py @@ -11,7 +11,7 @@ description="Util to facilitate smart contracts compilation.", url="https://github.com/crytic/crytic-compile", author="Trail of Bits", - version="0.3.4", + version="0.3.6", packages=find_packages(), # Python 3.12.0 on Windows suffers from https://github.com/python/cpython/issues/109590 # breaking some of our integrations. The issue is fixed in 3.12.1