certora-cli 8.20.0__tar.gz → 8.20.2__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.
Files changed (94) hide show
  1. {certora_cli-8.20.0/certora_cli.egg-info → certora_cli-8.20.2}/PKG-INFO +2 -2
  2. certora_cli-8.20.2/README.md +1 -0
  3. {certora_cli-8.20.0 → certora_cli-8.20.2}/certora_cli/CertoraProver/Compiler/CompilerCollector.py +14 -0
  4. {certora_cli-8.20.0 → certora_cli-8.20.2}/certora_cli/CertoraProver/Compiler/CompilerCollectorFactory.py +39 -19
  5. {certora_cli-8.20.0 → certora_cli-8.20.2}/certora_cli/CertoraProver/certoraBuild.py +21 -2
  6. {certora_cli-8.20.0 → certora_cli-8.20.2}/certora_cli/CertoraProver/certoraBuildDataClasses.py +4 -0
  7. {certora_cli-8.20.0 → certora_cli-8.20.2/certora_cli.egg-info}/PKG-INFO +2 -2
  8. {certora_cli-8.20.0 → certora_cli-8.20.2}/certora_jars/ASTExtraction.jar +0 -0
  9. certora_cli-8.20.2/certora_jars/CERTORA-CLI-VERSION-METADATA.json +1 -0
  10. {certora_cli-8.20.0 → certora_cli-8.20.2}/certora_jars/Typechecker.jar +0 -0
  11. {certora_cli-8.20.0 → certora_cli-8.20.2}/setup.py +2 -2
  12. certora_cli-8.20.0/README.md +0 -1
  13. certora_cli-8.20.0/certora_jars/CERTORA-CLI-VERSION-METADATA.json +0 -1
  14. {certora_cli-8.20.0 → certora_cli-8.20.2}/LICENSE +0 -0
  15. {certora_cli-8.20.0 → certora_cli-8.20.2}/MANIFEST.in +0 -0
  16. {certora_cli-8.20.0 → certora_cli-8.20.2}/certora_bins/__init__.py +0 -0
  17. {certora_cli-8.20.0 → certora_cli-8.20.2}/certora_cli/CertoraProver/Compiler/CompilerCollectorSol.py +0 -0
  18. {certora_cli-8.20.0 → certora_cli-8.20.2}/certora_cli/CertoraProver/Compiler/CompilerCollectorSolBased.py +0 -0
  19. {certora_cli-8.20.0 → certora_cli-8.20.2}/certora_cli/CertoraProver/Compiler/CompilerCollectorVy.py +0 -0
  20. {certora_cli-8.20.0 → certora_cli-8.20.2}/certora_cli/CertoraProver/Compiler/CompilerCollectorYul.py +0 -0
  21. {certora_cli-8.20.0 → certora_cli-8.20.2}/certora_cli/CertoraProver/Compiler/__init__.py +0 -0
  22. {certora_cli-8.20.0 → certora_cli-8.20.2}/certora_cli/CertoraProver/__init__.py +0 -0
  23. {certora_cli-8.20.0 → certora_cli-8.20.2}/certora_cli/CertoraProver/castingInstrumenter.py +0 -0
  24. {certora_cli-8.20.0 → certora_cli-8.20.2}/certora_cli/CertoraProver/certoraApp.py +0 -0
  25. {certora_cli-8.20.0 → certora_cli-8.20.2}/certora_cli/CertoraProver/certoraBuildCacheManager.py +0 -0
  26. {certora_cli-8.20.0 → certora_cli-8.20.2}/certora_cli/CertoraProver/certoraBuildRust.py +0 -0
  27. {certora_cli-8.20.0 → certora_cli-8.20.2}/certora_cli/CertoraProver/certoraBuildSui.py +0 -0
  28. {certora_cli-8.20.0 → certora_cli-8.20.2}/certora_cli/CertoraProver/certoraCloudIO.py +0 -0
  29. {certora_cli-8.20.0 → certora_cli-8.20.2}/certora_cli/CertoraProver/certoraCollectConfigurationLayout.py +0 -0
  30. {certora_cli-8.20.0 → certora_cli-8.20.2}/certora_cli/CertoraProver/certoraCollectRunMetadata.py +0 -0
  31. {certora_cli-8.20.0 → certora_cli-8.20.2}/certora_cli/CertoraProver/certoraCompilerParameters.py +0 -0
  32. {certora_cli-8.20.0 → certora_cli-8.20.2}/certora_cli/CertoraProver/certoraConfigIO.py +0 -0
  33. {certora_cli-8.20.0 → certora_cli-8.20.2}/certora_cli/CertoraProver/certoraContext.py +0 -0
  34. {certora_cli-8.20.0 → certora_cli-8.20.2}/certora_cli/CertoraProver/certoraContextAttributes.py +0 -0
  35. {certora_cli-8.20.0 → certora_cli-8.20.2}/certora_cli/CertoraProver/certoraContextClass.py +0 -0
  36. {certora_cli-8.20.0 → certora_cli-8.20.2}/certora_cli/CertoraProver/certoraContextValidator.py +0 -0
  37. {certora_cli-8.20.0 → certora_cli-8.20.2}/certora_cli/CertoraProver/certoraContractFuncs.py +0 -0
  38. {certora_cli-8.20.0 → certora_cli-8.20.2}/certora_cli/CertoraProver/certoraExtensionInfo.py +0 -0
  39. {certora_cli-8.20.0 → certora_cli-8.20.2}/certora_cli/CertoraProver/certoraJobList.py +0 -0
  40. {certora_cli-8.20.0 → certora_cli-8.20.2}/certora_cli/CertoraProver/certoraMiniSpecParser.py +0 -0
  41. {certora_cli-8.20.0 → certora_cli-8.20.2}/certora_cli/CertoraProver/certoraNodeFilters.py +0 -0
  42. {certora_cli-8.20.0 → certora_cli-8.20.2}/certora_cli/CertoraProver/certoraOffsetConverter.py +0 -0
  43. {certora_cli-8.20.0 → certora_cli-8.20.2}/certora_cli/CertoraProver/certoraParseBuildScript.py +0 -0
  44. {certora_cli-8.20.0 → certora_cli-8.20.2}/certora_cli/CertoraProver/certoraProjectScanner.py +0 -0
  45. {certora_cli-8.20.0 → certora_cli-8.20.2}/certora_cli/CertoraProver/certoraSourceFinders.py +0 -0
  46. {certora_cli-8.20.0 → certora_cli-8.20.2}/certora_cli/CertoraProver/certoraType.py +0 -0
  47. {certora_cli-8.20.0 → certora_cli-8.20.2}/certora_cli/CertoraProver/certoraVerifyGenerator.py +0 -0
  48. {certora_cli-8.20.0 → certora_cli-8.20.2}/certora_cli/CertoraProver/erc7201.py +0 -0
  49. {certora_cli-8.20.0 → certora_cli-8.20.2}/certora_cli/CertoraProver/splitRules.py +0 -0
  50. {certora_cli-8.20.0 → certora_cli-8.20.2}/certora_cli/CertoraProver/storageExtension.py +0 -0
  51. {certora_cli-8.20.0 → certora_cli-8.20.2}/certora_cli/CertoraProver/test_certoraCloudIO.py +0 -0
  52. {certora_cli-8.20.0 → certora_cli-8.20.2}/certora_cli/CertoraProver/uncheckedOverflowInstrumenter.py +0 -0
  53. {certora_cli-8.20.0 → certora_cli-8.20.2}/certora_cli/EquivalenceCheck/Eq_default.conf +0 -0
  54. {certora_cli-8.20.0 → certora_cli-8.20.2}/certora_cli/EquivalenceCheck/Eq_mc_no_out_template.spec +0 -0
  55. {certora_cli-8.20.0 → certora_cli-8.20.2}/certora_cli/EquivalenceCheck/Eq_mc_template.spec +0 -0
  56. {certora_cli-8.20.0 → certora_cli-8.20.2}/certora_cli/EquivalenceCheck/Eq_sanity.conf +0 -0
  57. {certora_cli-8.20.0 → certora_cli-8.20.2}/certora_cli/EquivalenceCheck/Eq_template.spec +0 -0
  58. {certora_cli-8.20.0 → certora_cli-8.20.2}/certora_cli/EquivalenceCheck/__init__.py +0 -0
  59. {certora_cli-8.20.0 → certora_cli-8.20.2}/certora_cli/EquivalenceCheck/equivCheck.py +0 -0
  60. {certora_cli-8.20.0 → certora_cli-8.20.2}/certora_cli/EquivalenceCheck/sanity.spec +0 -0
  61. {certora_cli-8.20.0 → certora_cli-8.20.2}/certora_cli/Mutate/__init__.py +0 -0
  62. {certora_cli-8.20.0 → certora_cli-8.20.2}/certora_cli/Mutate/mutateApp.py +0 -0
  63. {certora_cli-8.20.0 → certora_cli-8.20.2}/certora_cli/Mutate/mutateAttributes.py +0 -0
  64. {certora_cli-8.20.0 → certora_cli-8.20.2}/certora_cli/Mutate/mutateConstants.py +0 -0
  65. {certora_cli-8.20.0 → certora_cli-8.20.2}/certora_cli/Mutate/mutateUtil.py +0 -0
  66. {certora_cli-8.20.0 → certora_cli-8.20.2}/certora_cli/Mutate/mutateValidate.py +0 -0
  67. {certora_cli-8.20.0 → certora_cli-8.20.2}/certora_cli/Mutate/test_mutateApp.py +0 -0
  68. {certora_cli-8.20.0 → certora_cli-8.20.2}/certora_cli/Shared/ExpectedComparator.py +0 -0
  69. {certora_cli-8.20.0 → certora_cli-8.20.2}/certora_cli/Shared/__init__.py +0 -0
  70. {certora_cli-8.20.0 → certora_cli-8.20.2}/certora_cli/Shared/certoraAttrUtil.py +0 -0
  71. {certora_cli-8.20.0 → certora_cli-8.20.2}/certora_cli/Shared/certoraLogging.py +0 -0
  72. {certora_cli-8.20.0 → certora_cli-8.20.2}/certora_cli/Shared/certoraUtils.py +0 -0
  73. {certora_cli-8.20.0 → certora_cli-8.20.2}/certora_cli/Shared/certoraValidateFuncs.py +0 -0
  74. {certora_cli-8.20.0 → certora_cli-8.20.2}/certora_cli/Shared/proverCommon.py +0 -0
  75. {certora_cli-8.20.0 → certora_cli-8.20.2}/certora_cli/Shared/test_proverCommon.py +0 -0
  76. {certora_cli-8.20.0 → certora_cli-8.20.2}/certora_cli/__init__.py +0 -0
  77. {certora_cli-8.20.0 → certora_cli-8.20.2}/certora_cli/certoraCVLFormatter.py +0 -0
  78. {certora_cli-8.20.0 → certora_cli-8.20.2}/certora_cli/certoraConcord.py +0 -0
  79. {certora_cli-8.20.0 → certora_cli-8.20.2}/certora_cli/certoraEVMProver.py +0 -0
  80. {certora_cli-8.20.0 → certora_cli-8.20.2}/certora_cli/certoraEqCheck.py +0 -0
  81. {certora_cli-8.20.0 → certora_cli-8.20.2}/certora_cli/certoraMutate.py +0 -0
  82. {certora_cli-8.20.0 → certora_cli-8.20.2}/certora_cli/certoraRanger.py +0 -0
  83. {certora_cli-8.20.0 → certora_cli-8.20.2}/certora_cli/certoraRun.py +0 -0
  84. {certora_cli-8.20.0 → certora_cli-8.20.2}/certora_cli/certoraSolanaProver.py +0 -0
  85. {certora_cli-8.20.0 → certora_cli-8.20.2}/certora_cli/certoraSorobanProver.py +0 -0
  86. {certora_cli-8.20.0 → certora_cli-8.20.2}/certora_cli/certoraSuiProver.py +0 -0
  87. {certora_cli-8.20.0 → certora_cli-8.20.2}/certora_cli/rustMutator.py +0 -0
  88. {certora_cli-8.20.0 → certora_cli-8.20.2}/certora_cli.egg-info/SOURCES.txt +0 -0
  89. {certora_cli-8.20.0 → certora_cli-8.20.2}/certora_cli.egg-info/dependency_links.txt +0 -0
  90. {certora_cli-8.20.0 → certora_cli-8.20.2}/certora_cli.egg-info/entry_points.txt +0 -0
  91. {certora_cli-8.20.0 → certora_cli-8.20.2}/certora_cli.egg-info/requires.txt +0 -0
  92. {certora_cli-8.20.0 → certora_cli-8.20.2}/certora_cli.egg-info/top_level.txt +0 -0
  93. {certora_cli-8.20.0 → certora_cli-8.20.2}/certora_jars/__init__.py +0 -0
  94. {certora_cli-8.20.0 → certora_cli-8.20.2}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: certora-cli
3
- Version: 8.20.0
3
+ Version: 8.20.2
4
4
  Summary: Runner for the Certora Prover
5
5
  Home-page: https://pypi.org/project/certora-cli
6
6
  Author: Certora
@@ -38,4 +38,4 @@ Dynamic: requires-dist
38
38
  Dynamic: requires-python
39
39
  Dynamic: summary
40
40
 
41
- Commit f567630. Build and Run scripts for executing the Certora Prover on Solidity smart contracts.
41
+ Commit f5f7778. Build and Run scripts for executing the Certora Prover on Solidity smart contracts.
@@ -0,0 +1 @@
1
+ Commit f5f7778. Build and Run scripts for executing the Certora Prover on Solidity smart contracts.
@@ -190,6 +190,20 @@ class CompilerCollector(ABC):
190
190
  def compiler_version(self) -> CompilerVersion:
191
191
  pass
192
192
 
193
+ # Full version identifier from the compiler's `--version` output
194
+ # (e.g. solc '0.8.34+commit.80d5c536.Darwin.appleclang'), recording the exact
195
+ # compiler build. None when it could not be extracted. Set by the factory after
196
+ # construction so subclass constructors need not change.
197
+ _compiler_version_full: Optional[str] = None
198
+
199
+ @property
200
+ def compiler_version_full(self) -> Optional[str]:
201
+ return self._compiler_version_full
202
+
203
+ @compiler_version_full.setter
204
+ def compiler_version_full(self, value: Optional[str]) -> None:
205
+ self._compiler_version_full = value
206
+
193
207
  def normalize_file_compiler_path_name(self, file_abs_path: str) -> str:
194
208
  """
195
209
  Normalizes the absolute path name [file_abs_path] of a file, given to the compiler.
@@ -18,7 +18,7 @@ import os
18
18
  from Shared import certoraUtils as Util
19
19
  from pathlib import Path
20
20
  from functools import lru_cache
21
- from typing import Set, Callable
21
+ from typing import Set, Callable, Tuple, Optional
22
22
  import re
23
23
  import logging
24
24
  from CertoraProver.Compiler.CompilerCollector import CompilerLang, CompilerCollector
@@ -94,44 +94,48 @@ class CompilerCollectorFactory:
94
94
  @param path: path of the file to create [CompilerCollector] for
95
95
  """
96
96
  if str(path).endswith(".vy"):
97
- version = self.__get_vyper_version(path)
98
- return CompilerCollectorVy(version)
97
+ version, full_version = self.__get_vyper_version(path)
98
+ collector: CompilerCollector = CompilerCollectorVy(version)
99
99
  elif str(path).endswith(".sol"):
100
- version = self.__get_solc_version(path)
101
-
102
- return CompilerCollectorSol(version, CompilerLangSol(), not self.context.no_memory_safe_autofinders)
100
+ version, full_version = self.__get_solc_version(path)
101
+ collector = CompilerCollectorSol(version, CompilerLangSol(), not self.context.no_memory_safe_autofinders)
103
102
  elif str(path).endswith(".yul"):
104
- version = self.__get_solc_version(path)
105
- return CompilerCollectorYul(version, CompilerLangYul())
103
+ version, full_version = self.__get_solc_version(path)
104
+ collector = CompilerCollectorYul(version, CompilerLangYul())
106
105
  else:
107
106
  raise RuntimeError(f'expected {path} to represent a Solidity, Yul, or Vyper file')
108
107
 
109
- def __get_vyper_version(self, contract_file_path: Path) -> Util.CompilerVersion:
108
+ collector.compiler_version_full = full_version
109
+ return collector
110
+
111
+ def __get_vyper_version(self, contract_file_path: Path) -> Tuple[Util.CompilerVersion, Optional[str]]:
110
112
  """
111
113
  @param contract_file_path: the contract that we are working on
112
- @return: the running Vyper version
114
+ @return: the running Vyper version (triplet, full identifier)
113
115
  """
114
116
  vyper_exec_to_run = get_relevant_compiler(contract_file_path, self.context)
115
- version = self.__get_compiler_exe_version(vyper_exec_to_run, self.__version_string_handler_vyper)
116
- return version
117
+ return self.__get_compiler_exe_version(vyper_exec_to_run, self.__version_string_handler_vyper)
117
118
 
118
- def __get_solc_version(self, contract_file_path: Path) -> Util.CompilerVersion:
119
+ def __get_solc_version(self, contract_file_path: Path) -> Tuple[Util.CompilerVersion, Optional[str]]:
119
120
  """
120
121
  @param contract_file_path: the contract that we are working on
121
- @return: the running solc version
122
+ @return: the running solc version (triplet, full identifier)
122
123
  """
123
124
  compiler_logger.debug(f"visiting contract file {contract_file_path}")
124
125
  solc_path = get_relevant_compiler(contract_file_path, self.context)
125
- version = self.__get_compiler_exe_version(solc_path, self.__version_string_handler_solc)
126
- return version
126
+ return self.__get_compiler_exe_version(solc_path, self.__version_string_handler_solc)
127
127
 
128
128
  @lru_cache(maxsize=32)
129
129
  def __get_compiler_exe_version(self, compiler_name: str,
130
130
  version_string_handler:
131
- Callable[[str], Util.CompilerVersion]) -> Util.CompilerVersion:
131
+ Callable[[str], Util.CompilerVersion]) -> Tuple[Util.CompilerVersion, Optional[str]]:
132
132
  """
133
133
  @param compiler_name: name of the solc we want to run on this contract
134
- @return: the running compiler version
134
+ @return: a tuple of (the running compiler version triplet, the full version
135
+ identifier string from `--version` such as
136
+ '0.8.34+commit.80d5c536.Darwin.appleclang', or None if it could not
137
+ be extracted). The triplet is used for behavioural checks; the full
138
+ identifier records the exact compiler build for reproducibility.
135
139
  """
136
140
  out_name = f"version_check_{Path(compiler_name).name}"
137
141
  stdout_path = get_certora_config_dir() / f'{out_name}.stdout'
@@ -146,7 +150,23 @@ class CompilerCollectorFactory:
146
150
 
147
151
  with stdout_path.open() as r:
148
152
  version_string = r.read(-1)
149
- return version_string_handler(version_string)
153
+ return version_string_handler(version_string), self.__extract_full_version(version_string)
154
+
155
+ @staticmethod
156
+ def __extract_full_version(version_string: str) -> Optional[str]:
157
+ """
158
+ Extracts the full version identifier from a compiler's `--version` output.
159
+ solc prints a `Version: <id>` line (e.g. 'Version: 0.8.34+commit.80d5c536.Darwin.appleclang');
160
+ vyper prints the bare identifier. Returns the identifier token, or None if not found.
161
+ """
162
+ version_matches = re.findall(r'^Version:\s*(\S+)', version_string, re.MULTILINE)
163
+ if version_matches:
164
+ return version_matches[0]
165
+ for line in version_string.splitlines():
166
+ line = line.strip()
167
+ if line:
168
+ return line
169
+ return None
150
170
 
151
171
  @staticmethod
152
172
  def __version_string_handler_vyper(version_string: str) -> Util.CompilerVersion:
@@ -468,6 +468,25 @@ def convert_pathname_to_posix(json_dict: Dict[str, Any], entry: str, compiler_co
468
468
  json_dict[entry] = json_dict_posix_paths
469
469
 
470
470
 
471
+ def relative_import_path(importer_dir: Path, target: str) -> str:
472
+ """
473
+ The path under which a Solidity file in [importer_dir] imports [target].
474
+ solc resolves an import starting with `./` or `../` against the importing file's directory.
475
+ """
476
+ rel = Util.as_posix(os.path.relpath(Util.abs_posix_path(target), Util.abs_posix_path(importer_dir)))
477
+ return rel if rel.startswith("../") else f"./{rel}"
478
+
479
+
480
+ def harness_import_path(importer_dir: Path, target: str) -> str:
481
+ """
482
+ The path under which a harness in [importer_dir] imports [target], a solc source unit name from the main build.
483
+ A name that does not start with `./` or `../` is imported as is, so solc gives the file the same name as in the
484
+ main build and loads it once even if the harness also reaches it through other imports. A name that does would be
485
+ resolved against the harness's directory, so it is rewritten relative to it.
486
+ """
487
+ return relative_import_path(importer_dir, target) if target.startswith(("./", "../")) else target
488
+
489
+
471
490
  class CertoraBuildGenerator:
472
491
  # 12,14,04,06,00,04,10 is 0xce4604a aka certora.
473
492
  CONSTRUCTOR_STRING = "constructor"
@@ -3115,7 +3134,7 @@ class CertoraBuildGenerator:
3115
3134
  # Note we import and don't inline the file's contents since that's how the
3116
3135
  # original file is accessed also in the actual code, and compiling it
3117
3136
  # directly can cause issues.
3118
- tmp_file.write(f"import \"{original_file}\";\n\n")
3137
+ tmp_file.write(f"import \"{harness_import_path(file_dir, original_file)}\";\n\n")
3119
3138
  rel_path = os.path.relpath(tmp_file.name, Path.cwd())
3120
3139
  tmp_abs_path = Util.abs_posix_path(tmp_file.name)
3121
3140
  # Add the temp file to all map attributes so that map lookups
@@ -3179,7 +3198,7 @@ class CertoraBuildGenerator:
3179
3198
  current_content = tmp_file.read()
3180
3199
 
3181
3200
  # Prepare modified content with target import at the beginning
3182
- rel_target_path = os.path.relpath(target_file, Path.cwd())
3201
+ rel_target_path = harness_import_path(file_dir, target_file)
3183
3202
  modified_content = f'import "{rel_target_path}";\n{current_content}'
3184
3203
 
3185
3204
  # Write modified content
@@ -194,6 +194,10 @@ class ContractInSDC:
194
194
  "solidityTypes": [x.as_dict() for x in self.types],
195
195
  "compilerName": "" if not self.compiler_collector else self.compiler_collector.compiler_name,
196
196
  "compilerVersion": self.compiler_version,
197
+ # Full compiler build identifier from `--version` (e.g.
198
+ # '0.8.34+commit.80d5c536.Darwin.appleclang'); additive alongside the
199
+ # triplet-only compilerVersion above. None if unavailable.
200
+ "compilerVersionFull": None if not self.compiler_collector else self.compiler_collector.compiler_version_full,
197
201
  "compilerParameters": None if not self.compiler_parameters else self.compiler_parameters.as_dict(),
198
202
  "sourceBytes": None if self.source_bytes is None else self.source_bytes.as_dict(),
199
203
  "extensionContracts": [e.as_dict() for e in self.extension_contracts],
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: certora-cli
3
- Version: 8.20.0
3
+ Version: 8.20.2
4
4
  Summary: Runner for the Certora Prover
5
5
  Home-page: https://pypi.org/project/certora-cli
6
6
  Author: Certora
@@ -38,4 +38,4 @@ Dynamic: requires-dist
38
38
  Dynamic: requires-python
39
39
  Dynamic: summary
40
40
 
41
- Commit f567630. Build and Run scripts for executing the Certora Prover on Solidity smart contracts.
41
+ Commit f5f7778. Build and Run scripts for executing the Certora Prover on Solidity smart contracts.
@@ -0,0 +1 @@
1
+ {"name": "certora-cli", "tag": "8.20.2", "branch": "", "commit": "f5f7778", "timestamp": "20261016.20.56.176000", "version": "8.20.2"}
@@ -3,11 +3,11 @@ import setuptools
3
3
 
4
4
  setuptools.setup(
5
5
  name="certora-cli",
6
- version="8.20.0",
6
+ version="8.20.2",
7
7
  author="Certora",
8
8
  author_email="support@certora.com",
9
9
  description="Runner for the Certora Prover",
10
- long_description="Commit f567630. Build and Run scripts for executing the Certora Prover on Solidity smart contracts.",
10
+ long_description="Commit f5f7778. 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",
13
13
  packages=setuptools.find_packages(),
@@ -1 +0,0 @@
1
- Commit f567630. Build and Run scripts for executing the Certora Prover on Solidity smart contracts.
@@ -1 +0,0 @@
1
- {"name": "certora-cli", "tag": "8.20.0", "branch": "", "commit": "f567630", "timestamp": "20261015.12.30.517651", "version": "8.20.0"}
File without changes
File without changes
File without changes