@@ -372,16 +372,19 @@ def compile(self, crytic_compile: "CryticCompile", **kwargs: str) -> None:
372
372
working_dir : Optional [str ] = None
373
373
remappings : Optional [List [str ]] = None
374
374
375
+ dict_source_code : Optional [Dict ] = None
375
376
try :
376
377
# etherscan might return an object with two curly braces, {{ content }}
377
378
dict_source_code = json .loads (source_code [1 :- 1 ])
379
+ assert isinstance (dict_source_code , dict )
378
380
filenames , working_dir , remappings = _handle_multiple_files (
379
381
dict_source_code , addr , prefix , contract_name , export_dir
380
382
)
381
383
except JSONDecodeError :
382
384
try :
383
385
# or etherscan might return an object with single curly braces, { content }
384
386
dict_source_code = json .loads (source_code )
387
+ assert isinstance (dict_source_code , dict )
385
388
filenames , working_dir , remappings = _handle_multiple_files (
386
389
dict_source_code , addr , prefix , contract_name , export_dir
387
390
)
@@ -390,6 +393,11 @@ def compile(self, crytic_compile: "CryticCompile", **kwargs: str) -> None:
390
393
_handle_single_file (source_code , addr , prefix , contract_name , export_dir )
391
394
]
392
395
396
+ # viaIR is not exposed on the top level JSON offered by etherscan, so we need to inspect the settings
397
+ via_ir_enabled : Optional [bool ] = None
398
+ if isinstance (dict_source_code , dict ):
399
+ via_ir_enabled = dict_source_code .get ("settings" , {}).get ("viaIR" , None )
400
+
393
401
compilation_unit = CompilationUnit (crytic_compile , contract_name )
394
402
395
403
compilation_unit .compiler_version = CompilerVersion (
@@ -413,6 +421,7 @@ def compile(self, crytic_compile: "CryticCompile", **kwargs: str) -> None:
413
421
working_dir = working_dir ,
414
422
remappings = remappings ,
415
423
evm_version = evm_version ,
424
+ via_ir = via_ir_enabled ,
416
425
)
417
426
418
427
def clean (self , ** _kwargs : str ) -> None :
0 commit comments