certora-cli-beta 8.16.2__tar.gz → 8.17.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {certora_cli_beta-8.16.2/certora_cli_beta.egg-info → certora_cli_beta-8.17.0}/PKG-INFO +2 -2
- certora_cli_beta-8.17.0/README.md +1 -0
- {certora_cli_beta-8.16.2 → certora_cli_beta-8.17.0}/certora_cli/CertoraProver/certoraBuild.py +6 -1
- {certora_cli_beta-8.16.2 → certora_cli_beta-8.17.0}/certora_cli/CertoraProver/certoraContext.py +8 -0
- {certora_cli_beta-8.16.2 → certora_cli_beta-8.17.0}/certora_cli/CertoraProver/certoraContextAttributes.py +1 -1
- {certora_cli_beta-8.16.2 → certora_cli_beta-8.17.0}/certora_cli/Shared/certoraValidateFuncs.py +44 -24
- {certora_cli_beta-8.16.2 → certora_cli_beta-8.17.0/certora_cli_beta.egg-info}/PKG-INFO +2 -2
- {certora_cli_beta-8.16.2 → certora_cli_beta-8.17.0}/certora_jars/ASTExtraction.jar +0 -0
- certora_cli_beta-8.17.0/certora_jars/CERTORA-CLI-VERSION-METADATA.json +1 -0
- {certora_cli_beta-8.16.2 → certora_cli_beta-8.17.0}/certora_jars/Typechecker.jar +0 -0
- {certora_cli_beta-8.16.2 → certora_cli_beta-8.17.0}/setup.py +2 -2
- certora_cli_beta-8.16.2/README.md +0 -1
- certora_cli_beta-8.16.2/certora_jars/CERTORA-CLI-VERSION-METADATA.json +0 -1
- {certora_cli_beta-8.16.2 → certora_cli_beta-8.17.0}/LICENSE +0 -0
- {certora_cli_beta-8.16.2 → certora_cli_beta-8.17.0}/MANIFEST.in +0 -0
- {certora_cli_beta-8.16.2 → certora_cli_beta-8.17.0}/certora_bins/__init__.py +0 -0
- {certora_cli_beta-8.16.2 → certora_cli_beta-8.17.0}/certora_cli/CertoraProver/Compiler/CompilerCollector.py +0 -0
- {certora_cli_beta-8.16.2 → certora_cli_beta-8.17.0}/certora_cli/CertoraProver/Compiler/CompilerCollectorFactory.py +0 -0
- {certora_cli_beta-8.16.2 → certora_cli_beta-8.17.0}/certora_cli/CertoraProver/Compiler/CompilerCollectorSol.py +0 -0
- {certora_cli_beta-8.16.2 → certora_cli_beta-8.17.0}/certora_cli/CertoraProver/Compiler/CompilerCollectorSolBased.py +0 -0
- {certora_cli_beta-8.16.2 → certora_cli_beta-8.17.0}/certora_cli/CertoraProver/Compiler/CompilerCollectorVy.py +0 -0
- {certora_cli_beta-8.16.2 → certora_cli_beta-8.17.0}/certora_cli/CertoraProver/Compiler/CompilerCollectorYul.py +0 -0
- {certora_cli_beta-8.16.2 → certora_cli_beta-8.17.0}/certora_cli/CertoraProver/Compiler/__init__.py +0 -0
- {certora_cli_beta-8.16.2 → certora_cli_beta-8.17.0}/certora_cli/CertoraProver/__init__.py +0 -0
- {certora_cli_beta-8.16.2 → certora_cli_beta-8.17.0}/certora_cli/CertoraProver/castingInstrumenter.py +0 -0
- {certora_cli_beta-8.16.2 → certora_cli_beta-8.17.0}/certora_cli/CertoraProver/certoraApp.py +0 -0
- {certora_cli_beta-8.16.2 → certora_cli_beta-8.17.0}/certora_cli/CertoraProver/certoraBuildCacheManager.py +0 -0
- {certora_cli_beta-8.16.2 → certora_cli_beta-8.17.0}/certora_cli/CertoraProver/certoraBuildDataClasses.py +0 -0
- {certora_cli_beta-8.16.2 → certora_cli_beta-8.17.0}/certora_cli/CertoraProver/certoraBuildRust.py +0 -0
- {certora_cli_beta-8.16.2 → certora_cli_beta-8.17.0}/certora_cli/CertoraProver/certoraBuildSui.py +0 -0
- {certora_cli_beta-8.16.2 → certora_cli_beta-8.17.0}/certora_cli/CertoraProver/certoraCloudIO.py +0 -0
- {certora_cli_beta-8.16.2 → certora_cli_beta-8.17.0}/certora_cli/CertoraProver/certoraCollectConfigurationLayout.py +0 -0
- {certora_cli_beta-8.16.2 → certora_cli_beta-8.17.0}/certora_cli/CertoraProver/certoraCollectRunMetadata.py +0 -0
- {certora_cli_beta-8.16.2 → certora_cli_beta-8.17.0}/certora_cli/CertoraProver/certoraCompilerParameters.py +0 -0
- {certora_cli_beta-8.16.2 → certora_cli_beta-8.17.0}/certora_cli/CertoraProver/certoraConfigIO.py +0 -0
- {certora_cli_beta-8.16.2 → certora_cli_beta-8.17.0}/certora_cli/CertoraProver/certoraContextClass.py +0 -0
- {certora_cli_beta-8.16.2 → certora_cli_beta-8.17.0}/certora_cli/CertoraProver/certoraContextValidator.py +0 -0
- {certora_cli_beta-8.16.2 → certora_cli_beta-8.17.0}/certora_cli/CertoraProver/certoraContractFuncs.py +0 -0
- {certora_cli_beta-8.16.2 → certora_cli_beta-8.17.0}/certora_cli/CertoraProver/certoraExtensionInfo.py +0 -0
- {certora_cli_beta-8.16.2 → certora_cli_beta-8.17.0}/certora_cli/CertoraProver/certoraJobList.py +0 -0
- {certora_cli_beta-8.16.2 → certora_cli_beta-8.17.0}/certora_cli/CertoraProver/certoraMiniSpecParser.py +0 -0
- {certora_cli_beta-8.16.2 → certora_cli_beta-8.17.0}/certora_cli/CertoraProver/certoraNodeFilters.py +0 -0
- {certora_cli_beta-8.16.2 → certora_cli_beta-8.17.0}/certora_cli/CertoraProver/certoraOffsetConverter.py +0 -0
- {certora_cli_beta-8.16.2 → certora_cli_beta-8.17.0}/certora_cli/CertoraProver/certoraParseBuildScript.py +0 -0
- {certora_cli_beta-8.16.2 → certora_cli_beta-8.17.0}/certora_cli/CertoraProver/certoraProjectScanner.py +0 -0
- {certora_cli_beta-8.16.2 → certora_cli_beta-8.17.0}/certora_cli/CertoraProver/certoraSourceFinders.py +0 -0
- {certora_cli_beta-8.16.2 → certora_cli_beta-8.17.0}/certora_cli/CertoraProver/certoraType.py +0 -0
- {certora_cli_beta-8.16.2 → certora_cli_beta-8.17.0}/certora_cli/CertoraProver/certoraVerifyGenerator.py +0 -0
- {certora_cli_beta-8.16.2 → certora_cli_beta-8.17.0}/certora_cli/CertoraProver/erc7201.py +0 -0
- {certora_cli_beta-8.16.2 → certora_cli_beta-8.17.0}/certora_cli/CertoraProver/splitRules.py +0 -0
- {certora_cli_beta-8.16.2 → certora_cli_beta-8.17.0}/certora_cli/CertoraProver/storageExtension.py +0 -0
- {certora_cli_beta-8.16.2 → certora_cli_beta-8.17.0}/certora_cli/CertoraProver/uncheckedOverflowInstrumenter.py +0 -0
- {certora_cli_beta-8.16.2 → certora_cli_beta-8.17.0}/certora_cli/EquivalenceCheck/Eq_default.conf +0 -0
- {certora_cli_beta-8.16.2 → certora_cli_beta-8.17.0}/certora_cli/EquivalenceCheck/Eq_mc_no_out_template.spec +0 -0
- {certora_cli_beta-8.16.2 → certora_cli_beta-8.17.0}/certora_cli/EquivalenceCheck/Eq_mc_template.spec +0 -0
- {certora_cli_beta-8.16.2 → certora_cli_beta-8.17.0}/certora_cli/EquivalenceCheck/Eq_sanity.conf +0 -0
- {certora_cli_beta-8.16.2 → certora_cli_beta-8.17.0}/certora_cli/EquivalenceCheck/Eq_template.spec +0 -0
- {certora_cli_beta-8.16.2 → certora_cli_beta-8.17.0}/certora_cli/EquivalenceCheck/__init__.py +0 -0
- {certora_cli_beta-8.16.2 → certora_cli_beta-8.17.0}/certora_cli/EquivalenceCheck/equivCheck.py +0 -0
- {certora_cli_beta-8.16.2 → certora_cli_beta-8.17.0}/certora_cli/EquivalenceCheck/sanity.spec +0 -0
- {certora_cli_beta-8.16.2 → certora_cli_beta-8.17.0}/certora_cli/Mutate/__init__.py +0 -0
- {certora_cli_beta-8.16.2 → certora_cli_beta-8.17.0}/certora_cli/Mutate/mutateApp.py +0 -0
- {certora_cli_beta-8.16.2 → certora_cli_beta-8.17.0}/certora_cli/Mutate/mutateAttributes.py +0 -0
- {certora_cli_beta-8.16.2 → certora_cli_beta-8.17.0}/certora_cli/Mutate/mutateConstants.py +0 -0
- {certora_cli_beta-8.16.2 → certora_cli_beta-8.17.0}/certora_cli/Mutate/mutateUtil.py +0 -0
- {certora_cli_beta-8.16.2 → certora_cli_beta-8.17.0}/certora_cli/Mutate/mutateValidate.py +0 -0
- {certora_cli_beta-8.16.2 → certora_cli_beta-8.17.0}/certora_cli/Shared/ExpectedComparator.py +0 -0
- {certora_cli_beta-8.16.2 → certora_cli_beta-8.17.0}/certora_cli/Shared/__init__.py +0 -0
- {certora_cli_beta-8.16.2 → certora_cli_beta-8.17.0}/certora_cli/Shared/certoraAttrUtil.py +0 -0
- {certora_cli_beta-8.16.2 → certora_cli_beta-8.17.0}/certora_cli/Shared/certoraLogging.py +0 -0
- {certora_cli_beta-8.16.2 → certora_cli_beta-8.17.0}/certora_cli/Shared/certoraUtils.py +0 -0
- {certora_cli_beta-8.16.2 → certora_cli_beta-8.17.0}/certora_cli/Shared/proverCommon.py +0 -0
- {certora_cli_beta-8.16.2 → certora_cli_beta-8.17.0}/certora_cli/__init__.py +0 -0
- {certora_cli_beta-8.16.2 → certora_cli_beta-8.17.0}/certora_cli/certoraCVLFormatter.py +0 -0
- {certora_cli_beta-8.16.2 → certora_cli_beta-8.17.0}/certora_cli/certoraConcord.py +0 -0
- {certora_cli_beta-8.16.2 → certora_cli_beta-8.17.0}/certora_cli/certoraEVMProver.py +0 -0
- {certora_cli_beta-8.16.2 → certora_cli_beta-8.17.0}/certora_cli/certoraEqCheck.py +0 -0
- {certora_cli_beta-8.16.2 → certora_cli_beta-8.17.0}/certora_cli/certoraMutate.py +0 -0
- {certora_cli_beta-8.16.2 → certora_cli_beta-8.17.0}/certora_cli/certoraRanger.py +0 -0
- {certora_cli_beta-8.16.2 → certora_cli_beta-8.17.0}/certora_cli/certoraRun.py +0 -0
- {certora_cli_beta-8.16.2 → certora_cli_beta-8.17.0}/certora_cli/certoraSolanaProver.py +0 -0
- {certora_cli_beta-8.16.2 → certora_cli_beta-8.17.0}/certora_cli/certoraSorobanProver.py +0 -0
- {certora_cli_beta-8.16.2 → certora_cli_beta-8.17.0}/certora_cli/certoraSuiProver.py +0 -0
- {certora_cli_beta-8.16.2 → certora_cli_beta-8.17.0}/certora_cli/rustMutator.py +0 -0
- {certora_cli_beta-8.16.2 → certora_cli_beta-8.17.0}/certora_cli_beta.egg-info/SOURCES.txt +0 -0
- {certora_cli_beta-8.16.2 → certora_cli_beta-8.17.0}/certora_cli_beta.egg-info/dependency_links.txt +0 -0
- {certora_cli_beta-8.16.2 → certora_cli_beta-8.17.0}/certora_cli_beta.egg-info/entry_points.txt +0 -0
- {certora_cli_beta-8.16.2 → certora_cli_beta-8.17.0}/certora_cli_beta.egg-info/requires.txt +0 -0
- {certora_cli_beta-8.16.2 → certora_cli_beta-8.17.0}/certora_cli_beta.egg-info/top_level.txt +0 -0
- {certora_cli_beta-8.16.2 → certora_cli_beta-8.17.0}/certora_jars/__init__.py +0 -0
- {certora_cli_beta-8.16.2 → certora_cli_beta-8.17.0}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.2
|
|
2
2
|
Name: certora-cli-beta
|
|
3
|
-
Version: 8.
|
|
3
|
+
Version: 8.17.0
|
|
4
4
|
Summary: Runner for the Certora Prover
|
|
5
5
|
Home-page: https://pypi.org/project/certora-cli-beta
|
|
6
6
|
Author: Certora
|
|
@@ -38,4 +38,4 @@ Dynamic: requires-dist
|
|
|
38
38
|
Dynamic: requires-python
|
|
39
39
|
Dynamic: summary
|
|
40
40
|
|
|
41
|
-
Commit
|
|
41
|
+
Commit fb2c469. Build and Run scripts for executing the Certora Prover on Solidity smart contracts.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Commit fb2c469. Build and Run scripts for executing the Certora Prover on Solidity smart contracts.
|
{certora_cli_beta-8.16.2 → certora_cli_beta-8.17.0}/certora_cli/CertoraProver/certoraBuild.py
RENAMED
|
@@ -1980,7 +1980,12 @@ class CertoraBuildGenerator:
|
|
|
1980
1980
|
compiler_logger.debug(f"about to run in {compile_wd} the command: {collect_cmd}")
|
|
1981
1981
|
compiler_logger.debug(f"solc input = {json.dumps(input_for_solc, indent=4)}")
|
|
1982
1982
|
|
|
1983
|
-
|
|
1983
|
+
# test_condition gates this checkpoint to a specific contract file (the compile loop runs per-file).
|
|
1984
|
+
# Default 'True' fires for every file; otherwise it is treated as a filename suffix to match.
|
|
1985
|
+
# It is matched as a plain string (never evaluated).
|
|
1986
|
+
expected_file_suffix = self.context.test_condition
|
|
1987
|
+
if self.context.test == str(Util.TestValue.CHECK_SOLC_OPTIONS) and \
|
|
1988
|
+
(expected_file_suffix == 'True' or build_arg_contract_file.endswith(expected_file_suffix)):
|
|
1984
1989
|
raise Util.TestResultsReady({'standard_json_input': standard_json_input, 'main_path': main_path})
|
|
1985
1990
|
Util.run_compiler_cmd(collect_cmd, f"{sdc_name}.standard.json", wd=compile_wd,
|
|
1986
1991
|
compiler_input=standard_json_input)
|
{certora_cli_beta-8.16.2 → certora_cli_beta-8.17.0}/certora_cli/CertoraProver/certoraContext.py
RENAMED
|
@@ -313,6 +313,14 @@ def get_args(args_list: List[str], app: Type[App.CertoraApp]) -> CertoraContext:
|
|
|
313
313
|
# Setup defaults (defaults are not recorded in conf file)
|
|
314
314
|
context.expected_file = context.expected_file or "expected.json"
|
|
315
315
|
context.run_source = context.run_source or Vf.RunSources.COMMAND.name.upper()
|
|
316
|
+
if context.run_source.upper() \
|
|
317
|
+
in [Vf.RunSources.AUTO_PROVER.name.upper(), Vf.RunSources.STATIC_ANALYZER.name.upper()] \
|
|
318
|
+
and os.environ.get("CERTORA_PROVER_GROUP_ID") is not None:
|
|
319
|
+
|
|
320
|
+
context_logger.info("Running with run source auto_prover or static_analysis will override the group_id")
|
|
321
|
+
context_logger.info(f'group_id: {context.group_id}, override: {os.environ.get("CERTORA_PROVER_GROUP_ID")}')
|
|
322
|
+
context.group_id = os.environ.get("CERTORA_PROVER_GROUP_ID")
|
|
323
|
+
|
|
316
324
|
context.java_version = Util.get_java_version()
|
|
317
325
|
|
|
318
326
|
context_logger.debug("parsed args successfully.")
|
|
@@ -1706,7 +1706,7 @@ class BackendAttributes(AttrUtil.Attributes):
|
|
|
1706
1706
|
)
|
|
1707
1707
|
|
|
1708
1708
|
JOB_DEFINITION = AttrUtil.AttributeDefinition(
|
|
1709
|
-
|
|
1709
|
+
arg_type=AttrUtil.AttrArgType.STRING,
|
|
1710
1710
|
argparse_args={
|
|
1711
1711
|
'action': AttrUtil.UniqueStore
|
|
1712
1712
|
},
|
{certora_cli_beta-8.16.2 → certora_cli_beta-8.17.0}/certora_cli/Shared/certoraValidateFuncs.py
RENAMED
|
@@ -34,11 +34,9 @@ from uuid import UUID
|
|
|
34
34
|
scripts_dir_path = Path(__file__).parent.resolve() # containing directory
|
|
35
35
|
sys.path.insert(0, str(scripts_dir_path))
|
|
36
36
|
|
|
37
|
-
|
|
38
37
|
from Shared import certoraUtils as Util
|
|
39
38
|
from Mutate import mutateConstants as Constants
|
|
40
39
|
|
|
41
|
-
|
|
42
40
|
validation_logger = logging.getLogger("validation")
|
|
43
41
|
|
|
44
42
|
|
|
@@ -176,12 +174,15 @@ def validate_non_negative_integer(string: str) -> str:
|
|
|
176
174
|
raise Util.CertoraUserInputError(f'expected a non-negative integer, instead given {string}') from e
|
|
177
175
|
return string
|
|
178
176
|
|
|
177
|
+
|
|
179
178
|
def validate_manual_mutants(value: Any) -> Any:
|
|
180
179
|
return validate_mutant_attributes(value, Constants.MANUAL_MUTANTS)
|
|
181
180
|
|
|
181
|
+
|
|
182
182
|
def validate_universal_mutator_mutants(value: Any) -> Any:
|
|
183
183
|
return validate_mutant_attributes(value, Constants.UNIVERSAL_MUTATOR)
|
|
184
184
|
|
|
185
|
+
|
|
185
186
|
def validate_mutant_attributes(value: Any, attr_name: str) -> Any:
|
|
186
187
|
error_message = (f"Bad value. '{attr_name}' should be a list of dictionaries, each dictionary should"
|
|
187
188
|
f" have 2 entries: '{Constants.FILE_TO_MUTATE}' and '{Constants.MUTANTS_LOCATION}'. Got {value}")
|
|
@@ -268,6 +269,7 @@ def validate_optional_readable_file(filename: str) -> str:
|
|
|
268
269
|
def validate_spec_file(filename: str) -> str:
|
|
269
270
|
return validate_readable_file(filename, (".spec", ".cvl"))
|
|
270
271
|
|
|
272
|
+
|
|
271
273
|
def validate_soroban_extension(filename: str) -> str:
|
|
272
274
|
if not filename.lower().endswith(Util.SOROBAN_EXEC_EXTENSION):
|
|
273
275
|
raise Util.CertoraUserInputError(f"{filename} does not end with {Util.SOROBAN_EXEC_EXTENSION}")
|
|
@@ -435,8 +437,8 @@ def validate_contract_extension_attr(map: Any) -> Dict[str, List[Dict[str, Any]]
|
|
|
435
437
|
for extension in extensions:
|
|
436
438
|
if not isinstance(extension, dict) or \
|
|
437
439
|
"extension" not in extension or \
|
|
438
|
-
|
|
439
|
-
|
|
440
|
+
"exclude" not in extension or \
|
|
441
|
+
not isinstance(extension["exclude"], list) or \
|
|
440
442
|
len(extension) > 2:
|
|
441
443
|
raise Util.CertoraUserInputError(f'Each extension for {extended} must be of the form '
|
|
442
444
|
f'`{{ "extension": "ExtenderContractA", '
|
|
@@ -535,8 +537,9 @@ def validate_prototype_attr(string: str) -> str:
|
|
|
535
537
|
def validate_storage_extension_harness_attr(link: str) -> str:
|
|
536
538
|
contracts = link.split("=", 2)
|
|
537
539
|
if len(contracts) != 2:
|
|
538
|
-
raise Util.CertoraUserInputError(
|
|
539
|
-
|
|
540
|
+
raise Util.CertoraUserInputError(
|
|
541
|
+
f"Invalid storage extension harness format: '{link}'. Expected 'ContractA=ContractB'."
|
|
542
|
+
"specified as ContractA=ContractB")
|
|
540
543
|
validate_contract_name(contracts[0])
|
|
541
544
|
validate_contract_name(contracts[1])
|
|
542
545
|
if contracts[0] == contracts[1]:
|
|
@@ -571,6 +574,7 @@ def validate_equivalence_contracts(equiv_string: str) -> str:
|
|
|
571
574
|
)
|
|
572
575
|
return equiv_string
|
|
573
576
|
|
|
577
|
+
|
|
574
578
|
def validate_packages(package: str) -> str:
|
|
575
579
|
if not re.search("^[^=]+=[^=]+$", package):
|
|
576
580
|
raise Util.CertoraUserInputError("a package must have the form name=path")
|
|
@@ -684,7 +688,8 @@ def validate_address(value: str) -> str:
|
|
|
684
688
|
def validate_boolean_map(args: Dict[str, bool], attr_name: str) -> None:
|
|
685
689
|
attr_map_name = attr_name + "_map"
|
|
686
690
|
if not isinstance(args, dict):
|
|
687
|
-
raise Util.CertoraUserInputError(
|
|
691
|
+
raise Util.CertoraUserInputError(
|
|
692
|
+
f"'{attr_map_name}' should be stored as a map (type was {type(args).__name__})")
|
|
688
693
|
|
|
689
694
|
for contract, value in args.items():
|
|
690
695
|
if not isinstance(value, bool):
|
|
@@ -698,14 +703,18 @@ def validate_boolean_map(args: Dict[str, bool], attr_name: str) -> None:
|
|
|
698
703
|
if first:
|
|
699
704
|
validation_logger.warning(f"all {attr_map_name} values are set to True '{attr_name}' can be used instead")
|
|
700
705
|
else:
|
|
701
|
-
validation_logger.warning(
|
|
706
|
+
validation_logger.warning(
|
|
707
|
+
f"all {attr_map_name} values are set to False, this flag/attribute can be omitted")
|
|
708
|
+
|
|
702
709
|
|
|
703
710
|
def validate_solc_via_ir_map(args: Dict[str, bool]) -> None:
|
|
704
711
|
validate_boolean_map(args, 'solc_via_ir')
|
|
705
712
|
|
|
713
|
+
|
|
706
714
|
def validate_vyper_venom_map(args: Dict[str, bool]) -> None:
|
|
707
715
|
validate_boolean_map(args, 'vyper_venom')
|
|
708
716
|
|
|
717
|
+
|
|
709
718
|
def validate_solc_evm_version_map(args: Dict[str, str]) -> None:
|
|
710
719
|
if not isinstance(args, dict):
|
|
711
720
|
raise Util.CertoraUserInputError("'solc_evm_version_map' should be stored as a map "
|
|
@@ -723,6 +732,7 @@ def validate_solc_evm_version_map(args: Dict[str, str]) -> None:
|
|
|
723
732
|
validation_logger.warning(f"All EVM versions in --solc_evm_version_map are the same."
|
|
724
733
|
f" --solc_evm_version {first} can be used instead")
|
|
725
734
|
|
|
735
|
+
|
|
726
736
|
def validate_solc_optimize_map(args: Dict[str, str]) -> None:
|
|
727
737
|
if not isinstance(args, dict):
|
|
728
738
|
raise Util.CertoraUserInputError("'solc_optimize_map' should be stored as a map "
|
|
@@ -775,7 +785,8 @@ def validate_vyper_custom_std_json_in_map(args: Dict[str, str]) -> None:
|
|
|
775
785
|
:raises CertoraUserInputError if the format is wrong
|
|
776
786
|
"""
|
|
777
787
|
if not isinstance(args, dict):
|
|
778
|
-
raise Util.CertoraUserInputError(
|
|
788
|
+
raise Util.CertoraUserInputError(
|
|
789
|
+
f"vyper custom std json in should be stored as a map (type was {type(args).__name__})")
|
|
779
790
|
|
|
780
791
|
for source_file, json_file in args.items():
|
|
781
792
|
if not Util.is_vyper_file(source_file):
|
|
@@ -808,10 +819,12 @@ def validate_git_hash(git_hash: str) -> str:
|
|
|
808
819
|
raise Util.CertoraUserInputError("Git hash must consist of between 1 and 40 characters")
|
|
809
820
|
return git_hash
|
|
810
821
|
|
|
822
|
+
|
|
811
823
|
def validate_check_method_flag(method: str) -> str:
|
|
812
824
|
if '.' in method:
|
|
813
|
-
raise Util.CertoraUserInputError(
|
|
814
|
-
|
|
825
|
+
raise Util.CertoraUserInputError(
|
|
826
|
+
f"Malformed `check_mathod` argument '{method}': checked method cannot contain a dot. Use only the method name without the contract prefix."
|
|
827
|
+
"the contract part is not allowed in `--check_method`")
|
|
815
828
|
if ' ' in method:
|
|
816
829
|
raise Util.CertoraUserInputError(f"Malformed method '{method}' in `--check_method`: remove all whitespace")
|
|
817
830
|
|
|
@@ -819,10 +832,12 @@ def validate_check_method_flag(method: str) -> str:
|
|
|
819
832
|
raise Util.CertoraUserInputError(f"Malformed method '{method}' in `--check_method`: unmatched parenthesis")
|
|
820
833
|
return method
|
|
821
834
|
|
|
835
|
+
|
|
822
836
|
def validate_evm_method_flag(method: str) -> str:
|
|
823
837
|
contract_and_method = method.split('.')
|
|
824
838
|
if len(contract_and_method) > 2:
|
|
825
|
-
raise Util.CertoraUserInputError(
|
|
839
|
+
raise Util.CertoraUserInputError(
|
|
840
|
+
f"Malformed method '{method}' in `--method` list: a method should be of the form `[ContractName.]functionABISignature(...)`")
|
|
826
841
|
elif (len(contract_and_method) == 2):
|
|
827
842
|
contract = contract_and_method[0]
|
|
828
843
|
validate_contract_name(contract)
|
|
@@ -838,9 +853,11 @@ def validate_evm_method_flag(method: str) -> str:
|
|
|
838
853
|
|
|
839
854
|
return method
|
|
840
855
|
|
|
856
|
+
|
|
841
857
|
def validate_move_method_flag(method: str) -> str:
|
|
842
858
|
return validate_move_function_name(method)
|
|
843
859
|
|
|
860
|
+
|
|
844
861
|
def __validate_matching_parens(s: str) -> bool:
|
|
845
862
|
stack = []
|
|
846
863
|
matching_pairs = {")": "(", "]": "["}
|
|
@@ -875,30 +892,36 @@ def __validate_solidity_id(string: str, object: str) -> str:
|
|
|
875
892
|
def validate_contract_name(contract_name: str) -> str:
|
|
876
893
|
return __validate_solidity_id(contract_name, "contract")
|
|
877
894
|
|
|
895
|
+
|
|
878
896
|
def validate_rule_pattern_string(rule_str: str) -> str:
|
|
879
897
|
if not re.match(r"^[a-zA-Z0-9_$*]+$", rule_str):
|
|
880
898
|
raise Util.CertoraUserInputError(f"invalid rule pattern \"{rule_str}\": rule patterns must contain only "
|
|
881
899
|
"letters, digits, dollar signs, underscores, or asterisks")
|
|
882
900
|
return rule_str
|
|
883
901
|
|
|
902
|
+
|
|
884
903
|
def validate_evm_rule_name(rule_str: str) -> str:
|
|
885
904
|
if ("*" in rule_str):
|
|
886
905
|
return validate_rule_pattern_string(rule_str)
|
|
887
906
|
else:
|
|
888
907
|
return __validate_solidity_id(rule_str, "rule")
|
|
889
908
|
|
|
909
|
+
|
|
890
910
|
def validate_move_rule_pattern_string(rule_str: str) -> str:
|
|
891
911
|
if not re.match(r"^([a-zA-Z0-9_$*]|::)+$", rule_str):
|
|
892
912
|
raise Util.CertoraUserInputError(f"invalid rule pattern \"{rule_str}\": rule patterns must contain only "
|
|
893
913
|
"letters, digits, dollar signs, underscores, asterisks, or double colons")
|
|
894
914
|
return rule_str
|
|
895
915
|
|
|
916
|
+
|
|
896
917
|
def validate_move_function_name(name: str) -> str:
|
|
897
|
-
if not re.match(r"^(0x[0-9a-fA-F]+|([a-zA-Z_][a-zA-Z0-9_]*))::[a-zA-Z_][a-zA-Z0-9_]*::[a-zA-Z_][a-zA-Z0-9_]*$",
|
|
918
|
+
if not re.match(r"^(0x[0-9a-fA-F]+|([a-zA-Z_][a-zA-Z0-9_]*))::[a-zA-Z_][a-zA-Z0-9_]*::[a-zA-Z_][a-zA-Z0-9_]*$",
|
|
919
|
+
name):
|
|
898
920
|
raise Util.CertoraUserInputError(f"invalid Move function name \"{name}\": must be a fully-qualified Move "
|
|
899
921
|
"function name")
|
|
900
922
|
return name
|
|
901
923
|
|
|
924
|
+
|
|
902
925
|
def validate_move_rule_name(rule_str: str) -> str:
|
|
903
926
|
if ("*" in rule_str):
|
|
904
927
|
return validate_move_rule_pattern_string(rule_str)
|
|
@@ -910,7 +933,6 @@ MAX_MSG_LEN: int = 256
|
|
|
910
933
|
|
|
911
934
|
|
|
912
935
|
def validate_msg(msg: str) -> str:
|
|
913
|
-
|
|
914
936
|
if len(msg) > MAX_MSG_LEN:
|
|
915
937
|
msg = (msg[:MAX_MSG_LEN - 3] + "...")
|
|
916
938
|
validation_logger.warning(f"'msg' can't accept strings longer than {MAX_MSG_LEN} chars, string was truncated")
|
|
@@ -952,7 +974,14 @@ def validate_run_source(string: str) -> str:
|
|
|
952
974
|
We allow the user to insert the run source in any casing they want
|
|
953
975
|
(e.g., we accept command, Command, COMMAND and CoMmAnD, but always send COMMAND)
|
|
954
976
|
"""
|
|
955
|
-
|
|
977
|
+
output = __validate_enum_value(string, RunSources).upper()
|
|
978
|
+
# output should either be correct or we raised an exception in __validate_enum_value
|
|
979
|
+
|
|
980
|
+
if string.upper() in [RunSources.AUTO_PROVER.name.upper(), RunSources.STATIC_ANALYZER.name.upper()] \
|
|
981
|
+
and os.environ.get("CERTORA_PROVER_GROUP_ID") is not None:
|
|
982
|
+
validate_uuid(os.environ.get("CERTORA_PROVER_GROUP_ID") or '')
|
|
983
|
+
|
|
984
|
+
return output
|
|
956
985
|
|
|
957
986
|
|
|
958
987
|
def validate_multi_example_value(value: str) -> str:
|
|
@@ -997,15 +1026,6 @@ def validate_prover_version(value: str) -> str:
|
|
|
997
1026
|
return value
|
|
998
1027
|
|
|
999
1028
|
|
|
1000
|
-
def validate_job_definition(value: str) -> str:
|
|
1001
|
-
"""
|
|
1002
|
-
A job definition may consist only of letters, numbers and underscores
|
|
1003
|
-
"""
|
|
1004
|
-
if not re.match(r"^\w+$", value):
|
|
1005
|
-
raise Util.CertoraUserInputError(f"illegal 'job_definition' argument {value}, job definition may consist only "
|
|
1006
|
-
"of letters, numbers and underscores")
|
|
1007
|
-
return value
|
|
1008
|
-
|
|
1009
1029
|
def validate_false(value: str) -> str:
|
|
1010
1030
|
"""
|
|
1011
1031
|
This is used when there's a jar flag with a default value of true that we want to set to
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.2
|
|
2
2
|
Name: certora-cli-beta
|
|
3
|
-
Version: 8.
|
|
3
|
+
Version: 8.17.0
|
|
4
4
|
Summary: Runner for the Certora Prover
|
|
5
5
|
Home-page: https://pypi.org/project/certora-cli-beta
|
|
6
6
|
Author: Certora
|
|
@@ -38,4 +38,4 @@ Dynamic: requires-dist
|
|
|
38
38
|
Dynamic: requires-python
|
|
39
39
|
Dynamic: summary
|
|
40
40
|
|
|
41
|
-
Commit
|
|
41
|
+
Commit fb2c469. Build and Run scripts for executing the Certora Prover on Solidity smart contracts.
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"name": "certora-cli-beta", "tag": "8.17.0", "branch": "", "commit": "fb2c469", "timestamp": "20260629.14.2.550326", "version": "8.17.0"}
|
|
Binary file
|
|
@@ -3,11 +3,11 @@ import setuptools
|
|
|
3
3
|
|
|
4
4
|
setuptools.setup(
|
|
5
5
|
name="certora-cli-beta",
|
|
6
|
-
version="8.
|
|
6
|
+
version="8.17.0",
|
|
7
7
|
author="Certora",
|
|
8
8
|
author_email="support@certora.com",
|
|
9
9
|
description="Runner for the Certora Prover",
|
|
10
|
-
long_description="Commit
|
|
10
|
+
long_description="Commit fb2c469. Build and Run scripts for executing the Certora Prover on Solidity smart contracts.",
|
|
11
11
|
long_description_content_type="text/markdown",
|
|
12
12
|
url="https://pypi.org/project/certora-cli-beta",
|
|
13
13
|
packages=setuptools.find_packages(),
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
Commit 94b86f7. Build and Run scripts for executing the Certora Prover on Solidity smart contracts.
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"name": "certora-cli-beta", "tag": "8.16.2", "branch": "", "commit": "94b86f7", "timestamp": "20260625.10.50.595039", "version": "8.16.2"}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{certora_cli_beta-8.16.2 → certora_cli_beta-8.17.0}/certora_cli/CertoraProver/Compiler/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{certora_cli_beta-8.16.2 → certora_cli_beta-8.17.0}/certora_cli/CertoraProver/castingInstrumenter.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{certora_cli_beta-8.16.2 → certora_cli_beta-8.17.0}/certora_cli/CertoraProver/certoraBuildRust.py
RENAMED
|
File without changes
|
{certora_cli_beta-8.16.2 → certora_cli_beta-8.17.0}/certora_cli/CertoraProver/certoraBuildSui.py
RENAMED
|
File without changes
|
{certora_cli_beta-8.16.2 → certora_cli_beta-8.17.0}/certora_cli/CertoraProver/certoraCloudIO.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{certora_cli_beta-8.16.2 → certora_cli_beta-8.17.0}/certora_cli/CertoraProver/certoraConfigIO.py
RENAMED
|
File without changes
|
{certora_cli_beta-8.16.2 → certora_cli_beta-8.17.0}/certora_cli/CertoraProver/certoraContextClass.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{certora_cli_beta-8.16.2 → certora_cli_beta-8.17.0}/certora_cli/CertoraProver/certoraJobList.py
RENAMED
|
File without changes
|
|
File without changes
|
{certora_cli_beta-8.16.2 → certora_cli_beta-8.17.0}/certora_cli/CertoraProver/certoraNodeFilters.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{certora_cli_beta-8.16.2 → certora_cli_beta-8.17.0}/certora_cli/CertoraProver/certoraType.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{certora_cli_beta-8.16.2 → certora_cli_beta-8.17.0}/certora_cli/CertoraProver/storageExtension.py
RENAMED
|
File without changes
|
|
File without changes
|
{certora_cli_beta-8.16.2 → certora_cli_beta-8.17.0}/certora_cli/EquivalenceCheck/Eq_default.conf
RENAMED
|
File without changes
|
|
File without changes
|
{certora_cli_beta-8.16.2 → certora_cli_beta-8.17.0}/certora_cli/EquivalenceCheck/Eq_mc_template.spec
RENAMED
|
File without changes
|
{certora_cli_beta-8.16.2 → certora_cli_beta-8.17.0}/certora_cli/EquivalenceCheck/Eq_sanity.conf
RENAMED
|
File without changes
|
{certora_cli_beta-8.16.2 → certora_cli_beta-8.17.0}/certora_cli/EquivalenceCheck/Eq_template.spec
RENAMED
|
File without changes
|
{certora_cli_beta-8.16.2 → certora_cli_beta-8.17.0}/certora_cli/EquivalenceCheck/__init__.py
RENAMED
|
File without changes
|
{certora_cli_beta-8.16.2 → certora_cli_beta-8.17.0}/certora_cli/EquivalenceCheck/equivCheck.py
RENAMED
|
File without changes
|
{certora_cli_beta-8.16.2 → certora_cli_beta-8.17.0}/certora_cli/EquivalenceCheck/sanity.spec
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{certora_cli_beta-8.16.2 → certora_cli_beta-8.17.0}/certora_cli/Shared/ExpectedComparator.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{certora_cli_beta-8.16.2 → certora_cli_beta-8.17.0}/certora_cli_beta.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
{certora_cli_beta-8.16.2 → certora_cli_beta-8.17.0}/certora_cli_beta.egg-info/entry_points.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|