Skip to content
Open
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion crytic_compile/compilation_unit.py
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ def __init__(self, crytic_compile: "CryticCompile", unique_id: str):

# compiler.compiler
self._compiler_version: CompilerVersion = CompilerVersion(
compiler="N/A", version="N/A", optimized=False
compiler="N/A", version="N/A", optimized=False, via_ir=False
)

# if the compilation unit comes from etherscan-like service and is a proxy,
Expand Down
5 changes: 4 additions & 1 deletion crytic_compile/compiler/compiler.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,20 +18,23 @@ def __init__(
version: str | None,
optimized: bool | None,
optimize_runs: int | None = None,
via_ir: bool | None = None,
) -> None:
"""
Initialize a compier version object
Initialize a compiler version object

Args:
compiler (str): compiler (in most of the case use "solc")
version (str): compiler version
optimized (Optional[bool]): true if optimization are enabled
optimize_runs (Optional[int]): optimize runs number
via_ir: (Optional[bool]): true if --via-ir is used
"""
self.compiler: str = compiler
self.version: str | None = version
self.optimized: bool | None = optimized
self.optimize_runs: int | None = optimize_runs
self.via_ir: bool | None = via_ir

def look_for_installed_version(self) -> None:
"""
Expand Down
1 change: 1 addition & 0 deletions crytic_compile/platform/etherscan.py
Original file line number Diff line number Diff line change
Expand Up @@ -468,6 +468,7 @@ def compile(self, crytic_compile: "CryticCompile", **kwargs: str) -> None:
version=compiler_version,
optimized=optimization_used,
optimize_runs=optimize_runs,
via_ir=via_ir_enabled if via_ir_enabled else False,
)
compilation_unit.compiler_version.look_for_installed_version()

Expand Down
3 changes: 2 additions & 1 deletion crytic_compile/platform/hardhat.py
Original file line number Diff line number Diff line change
Expand Up @@ -85,9 +85,10 @@ def hardhat_like_parsing(
if "optimizer" in input_json["settings"]
else False
)
via_ir = input_json["settings"]["viaIR"] if "viaIR" in input_json["settings"] else False

compilation_unit.compiler_version = CompilerVersion(
compiler=compiler, version=version_from_config, optimized=optimized
compiler=compiler, version=version_from_config, optimized=optimized, via_ir=via_ir
)

skip_filename = compilation_unit.compiler_version.version in [
Expand Down
19 changes: 18 additions & 1 deletion crytic_compile/platform/solc.py
Original file line number Diff line number Diff line change
Expand Up @@ -413,6 +413,20 @@ def is_optimized(solc_arguments: str | None) -> bool:
return False


def is_via_ir(solc_arguments: str | None) -> bool:
"""Check if --via-ir is used

Args:
solc_arguments (Optional[str]): Solc arguments to check

Returns:
bool: True if --via-ir is used
"""
if solc_arguments:
return "--via-ir" in solc_arguments or "--experimental-via-ir" in solc_arguments
return False


def _build_options(compiler_version: CompilerVersion, force_legacy_json: bool) -> str:
"""
Build the solc command line options
Expand Down Expand Up @@ -491,7 +505,10 @@ def _run_solc(
raise InvalidCompilation(f"{filename} is not the expected format '.sol'")

compilation_unit.compiler_version = CompilerVersion(
compiler="solc", version=get_version(solc, env), optimized=is_optimized(solc_arguments)
compiler="solc",
version=get_version(solc, env),
optimized=is_optimized(solc_arguments),
via_ir=is_via_ir(solc_arguments),
)

compiler_version = compilation_unit.compiler_version
Expand Down
2 changes: 2 additions & 0 deletions crytic_compile/platform/solc_standard_json.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
Solc,
get_version,
is_optimized,
is_via_ir,
relative_to_short,
)
from crytic_compile.platform.types import Type
Expand Down Expand Up @@ -473,6 +474,7 @@ def compile(self, crytic_compile: "CryticCompile", **kwargs: Any) -> None:
optimized=is_optimized(solc_arguments)
or self.to_dict().get("settings", {}).get("optimizer", {}).get("enabled", False),
optimize_runs=self.to_dict().get("settings", {}).get("optimizer", {}).get("runs", None),
via_ir=is_via_ir(solc_arguments),
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

should this also account for viaIR in the settings dict?

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yes added

)

add_optimization(
Expand Down
2 changes: 2 additions & 0 deletions crytic_compile/platform/sourcify.py
Original file line number Diff line number Diff line change
Expand Up @@ -288,6 +288,7 @@ def compile(self, crytic_compile: "CryticCompile", **kwargs: str) -> None:
optimizer = settings.get("optimizer", {})
optimization_used = optimizer.get("enabled", False)
remappings = _sanitize_remappings(settings.get("remappings", []), working_dir) or None
via_ir = settings.get("viaIR")

# Create and configure compilation unit
compilation_unit = CompilationUnit(crytic_compile, compilation.get("name", "Contract"))
Expand All @@ -296,6 +297,7 @@ def compile(self, crytic_compile: "CryticCompile", **kwargs: str) -> None:
version=compiler_version,
optimized=optimization_used,
optimize_runs=optimizer.get("runs") if optimization_used else None,
via_ir=via_ir,
)
compilation_unit.compiler_version.look_for_installed_version()

Expand Down
2 changes: 1 addition & 1 deletion crytic_compile/platform/vyper.py
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ def compile(self, crytic_compile: "CryticCompile", **kwargs: str) -> None:
if compiler_version != "0.3.7":
LOGGER.info("Vyper != 0.3.7 support is a best effort and might fail")
compilation_unit.compiler_version = CompilerVersion(
compiler="vyper", version=compiler_version, optimized=False
compiler="vyper", version=compiler_version, optimized=False, via_ir=False
)

for source_file, contract_info in compilation_artifacts["contracts"].items():
Expand Down
Loading