certora-cli-beta-mirror 8.6.2__py3-none-any.whl → 8.7.0__py3-none-any.whl

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 (23) hide show
  1. certora_cli/CertoraProver/Compiler/CompilerCollector.py +9 -8
  2. certora_cli/CertoraProver/Compiler/CompilerCollectorVy.py +126 -73
  3. certora_cli/CertoraProver/castingInstrumenter.py +23 -16
  4. certora_cli/CertoraProver/certoraApp.py +8 -0
  5. certora_cli/CertoraProver/certoraBuild.py +106 -32
  6. certora_cli/CertoraProver/certoraCloudIO.py +2 -27
  7. certora_cli/CertoraProver/certoraCollectRunMetadata.py +12 -5
  8. certora_cli/CertoraProver/certoraContextAttributes.py +31 -1
  9. certora_cli/CertoraProver/certoraContextValidator.py +8 -1
  10. certora_cli/CertoraProver/certoraContractFuncs.py +1 -1
  11. certora_cli/CertoraProver/certoraOffsetConverter.py +54 -0
  12. certora_cli/CertoraProver/certoraSourceFinders.py +7 -7
  13. certora_cli/CertoraProver/uncheckedOverflowInstrumenter.py +152 -0
  14. certora_cli/Shared/certoraValidateFuncs.py +31 -0
  15. {certora_cli_beta_mirror-8.6.2.dist-info → certora_cli_beta_mirror-8.7.0.dist-info}/METADATA +2 -2
  16. {certora_cli_beta_mirror-8.6.2.dist-info → certora_cli_beta_mirror-8.7.0.dist-info}/RECORD +23 -21
  17. certora_jars/ASTExtraction.jar +0 -0
  18. certora_jars/CERTORA-CLI-VERSION-METADATA.json +1 -1
  19. certora_jars/Typechecker.jar +0 -0
  20. {certora_cli_beta_mirror-8.6.2.dist-info → certora_cli_beta_mirror-8.7.0.dist-info}/LICENSE +0 -0
  21. {certora_cli_beta_mirror-8.6.2.dist-info → certora_cli_beta_mirror-8.7.0.dist-info}/WHEEL +0 -0
  22. {certora_cli_beta_mirror-8.6.2.dist-info → certora_cli_beta_mirror-8.7.0.dist-info}/entry_points.txt +0 -0
  23. {certora_cli_beta_mirror-8.6.2.dist-info → certora_cli_beta_mirror-8.7.0.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,152 @@
1
+ # The Certora Prover
2
+ # Copyright (C) 2025 Certora Ltd.
3
+ #
4
+ # This program is free software: you can redistribute it and/or modify
5
+ # it under the terms of the GNU General Public License as published by
6
+ # the Free Software Foundation, version 3 of the License.
7
+ #
8
+ # This program is distributed in the hope that it will be useful,
9
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
10
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11
+ # GNU General Public License for more details.
12
+ #
13
+ # You should have received a copy of the GNU General Public License
14
+ # along with this program. If not, see <https://www.gnu.org/licenses/>.
15
+ from typing import Any
16
+
17
+ from CertoraProver.Compiler.CompilerCollectorSol import CompilerCollectorSol
18
+ from CertoraProver.castingInstrumenter import encode_type, iter_all_nodes_under
19
+ from CertoraProver.certoraBuildDataClasses import SDC, Instrumentation, Replace, InsertBefore, InsertAfter
20
+ from CertoraProver.certoraOffsetConverter import OffsetConverter
21
+ from CertoraProver.certoraSourceFinders import find_char
22
+ from Shared import certoraUtils as Util
23
+
24
+
25
+ def is_unchecked_block(node: Any) -> bool:
26
+ return isinstance(node, dict) and node.get('nodeType') == 'UncheckedBlock'
27
+
28
+
29
+ def is_possibly_overflowing_op(node: Any) -> bool:
30
+ return isinstance(node, dict) and node.get('operator') in {"*", "+", "-"}
31
+
32
+
33
+ def find_unchecked(ast: dict[int, Any]) -> list[dict]:
34
+ function_nodes = [node for node in ast.values() if node.get('nodeType') == 'FunctionDefinition']
35
+ result = []
36
+ for func in function_nodes:
37
+ for node in iter_all_nodes_under(func, is_unchecked_block):
38
+ if is_possibly_overflowing_op(node):
39
+ result.append(node)
40
+ return result
41
+
42
+
43
+ def func_name(counter: int) -> str:
44
+ return f"op_{counter}"
45
+
46
+
47
+ def char_at(filepath: str, offset: int) -> str:
48
+ with open(filepath, 'r') as f:
49
+ f.seek(offset)
50
+ return f.read(1)
51
+
52
+
53
+ def instrumentations(filename: str, lib_name: str, op: dict, counter: int) -> dict[int, Instrumentation]:
54
+ start_offset, src_len, file = op["src"].split(":")
55
+ left = op["leftExpression"]
56
+ operator = op["operator"]
57
+ result: dict[int, Instrumentation] = {}
58
+
59
+ start_offset_left, src_len_left, _ = left["src"].split(":")
60
+ where = find_char(filename, int(start_offset_left) + int(src_len_left), operator)
61
+ if where is None:
62
+ raise Exception(f"Could not find {start_offset_left}:{src_len_left} in {filename}")
63
+ result[where] = Instrumentation(expected=bytes(operator, 'utf-8'),
64
+ to_ins=",",
65
+ mut=Replace(1))
66
+ before = int(start_offset_left)
67
+ result[before] = Instrumentation(expected=bytes(char_at(filename, before), 'utf-8'),
68
+ to_ins=f"{lib_name}.{func_name(counter)}(",
69
+ mut=InsertBefore())
70
+ after = int(start_offset) + int(src_len)
71
+ result[after] = Instrumentation(expected=bytes(char_at(filename, after), 'utf-8'),
72
+ to_ins=")",
73
+ mut=InsertBefore())
74
+ return result
75
+
76
+
77
+ def generate_overflow_function(offset_converter: OffsetConverter, assembly_prefix: str, op: dict, counter: int) -> str:
78
+ res_type = op["typeDescriptions"]["typeString"]
79
+ function_head = f"function {func_name(counter)}({res_type} x, {res_type} y) internal pure returns ({res_type})"
80
+ start_offset, _, _ = op["src"].split(":")
81
+ _, left_length, _ = op["leftExpression"]["src"].split(":")
82
+ line, column = offset_converter.offset_to_line_column(int(start_offset) + int(left_length))
83
+ encoded = ("0xffffff6e4604afefe123321beef1b04fffffffffffffffffff"
84
+ f"{'%0.5x' % line}{'%0.5x' % column}{'%0.4x' % encode_type(res_type)}")
85
+ return f"""
86
+ {function_head} {{
87
+ unchecked {{
88
+ {res_type} z = x {op['operator']} y;
89
+ {assembly_prefix} {{
90
+ mstore({encoded}, z)
91
+ }}
92
+ return z;
93
+ }}
94
+ }}
95
+ """
96
+
97
+
98
+ def add_instrumentation(inst_dict: dict[int, Instrumentation], k: int, v: Instrumentation) -> None:
99
+ if k in inst_dict:
100
+ old = inst_dict[k]
101
+ if isinstance(old.mut, InsertBefore) and isinstance(v.mut, InsertBefore):
102
+ inst_dict[k] = Instrumentation(expected=old.expected, mut=InsertBefore(),
103
+ to_ins=old.to_ins + v.to_ins)
104
+ elif isinstance(old.mut, InsertAfter) and isinstance(v.mut, InsertAfter):
105
+ inst_dict[k] = Instrumentation(expected=old.expected, mut=InsertAfter(),
106
+ to_ins=old.to_ins + v.to_ins)
107
+ elif isinstance(old.mut, Replace) and isinstance(v.mut, InsertBefore):
108
+ inst_dict[k] = Instrumentation(expected=old.expected, mut=old.mut,
109
+ to_ins=v.to_ins + old.to_ins)
110
+ elif isinstance(old.mut, InsertBefore) and isinstance(v.mut, Replace):
111
+ inst_dict[k] = Instrumentation(expected=old.expected, mut=v.mut,
112
+ to_ins=old.to_ins + v.to_ins)
113
+ else:
114
+ print(f"GOT A PROBLEM at {k} :::: {old} {v}")
115
+ # should warn here.
116
+ inst_dict[k] = v
117
+ else:
118
+ inst_dict[k] = v
119
+
120
+
121
+ def generate_overflow_instrumentation(asts: dict[str, dict[str, dict[int, Any]]], contract_file: str, sdc: SDC,
122
+ offset_converters: dict[str, OffsetConverter]) \
123
+ -> tuple[dict[str, dict[int, Instrumentation]], dict[str, tuple[str, list[str]]]]:
124
+ """
125
+ Generates the instrumentation for uncheckedOverflow builtin rule.
126
+ It replaces each of the possibly overflowing operations: `*, +, -`, with a function call to a new function
127
+ we add in a library in the same file. This function does the exact same operation, but adds an mload instruction
128
+ encoding the location of the operation and the expected resulting type.
129
+ """
130
+ overflow_instrumentation: dict[str, dict[int, Instrumentation]] = dict()
131
+ op_funcs: dict[str, tuple[str, list[str]]] = dict()
132
+ if not isinstance(sdc.compiler_collector, CompilerCollectorSol):
133
+ raise Exception(f"Encountered a compiler collector that is not solc for file {contract_file}"
134
+ " when trying to add casting instrumentation")
135
+ assembly_prefix = sdc.compiler_collector.gen_memory_safe_assembly_prefix()
136
+ counter = 0
137
+
138
+ original_files = sorted({Util.convert_path_for_solc_import(c.original_file) for c in sdc.contracts})
139
+ for file_count, solfile in enumerate(original_files, start=1):
140
+ main_ast = asts[contract_file]
141
+ libname, per_file_funcs = op_funcs.setdefault(solfile, (f"CertoraOverflowLib{file_count}", []))
142
+ curr_file_ast = main_ast.get(solfile, dict())
143
+ per_file_inst = overflow_instrumentation.setdefault(solfile, dict())
144
+
145
+ for op in find_unchecked(curr_file_ast):
146
+ counter += 1
147
+ for k, v in instrumentations(contract_file, libname, op, counter).items():
148
+ add_instrumentation(per_file_inst, k, v)
149
+ new_func = generate_overflow_function(offset_converters[solfile], assembly_prefix, op, counter)
150
+ per_file_funcs.append(new_func)
151
+
152
+ return overflow_instrumentation, op_funcs
@@ -92,6 +92,7 @@ class RunSources(Util.NoValEnum):
92
92
  BENCHMARK = auto()
93
93
  LIGHT_TEST = auto()
94
94
  REPORT = auto()
95
+ TIMEOUTER = auto()
95
96
 
96
97
 
97
98
  class WaitForResultOptions(Util.NoValEnum):
@@ -751,6 +752,36 @@ def validate_compiler_map(args: Dict[str, str]) -> None:
751
752
  "solc/vyper attribute can be used instead")
752
753
 
753
754
 
755
+ def validate_vyper_custom_std_json_in_map(args: Dict[str, str]) -> None:
756
+ """
757
+ Checks that the argument is a dictionary of the form
758
+ <vy_file_1>=<stdjson_in_file_1>,<vy_file_2>=<stdjson_in_file_2>,...
759
+ and that all vyper files are valid: they were found
760
+
761
+ :param args: argument of --vyper_custom_std_json_in
762
+ :raises CertoraUserInputError if the format is wrong
763
+ """
764
+ if not isinstance(args, dict):
765
+ raise Util.CertoraUserInputError(f"vyper custom std json in should be stored as a map (type was {type(args).__name__})")
766
+
767
+ for source_file, json_file in args.items():
768
+ if not Util.is_vyper_file(source_file):
769
+ raise Util.CertoraUserInputError(f"{source_file} does not end with {Util.VY_EXT}")
770
+ source_file_path = Path(source_file)
771
+ if not source_file_path.exists():
772
+ raise Util.CertoraUserInputError(f"Source vyper file {source_file} does not exist")
773
+
774
+ if not Path(json_file).exists():
775
+ raise Util.CertoraUserInputError(f"Custom standard-json input file {json_file} does not exist")
776
+
777
+ values = args.values()
778
+ first = list(values)[0]
779
+
780
+ if all(x == first for x in values):
781
+ validation_logger.warning("All vyper files will be compiled with the same standard-json in. "
782
+ "Usually different standard-json in files are needed")
783
+
784
+
754
785
  def validate_git_hash(git_hash: str) -> str:
755
786
  """
756
787
  Validates that correct input was inserted as a git commit hash. It must be between 1 and 40 hexadecimal digits.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: certora-cli-beta-mirror
3
- Version: 8.6.2
3
+ Version: 8.7.0
4
4
  Summary: Runner for the Certora Prover
5
5
  Home-page: https://pypi.org/project/certora-cli-beta-mirror
6
6
  Author: Certora
@@ -38,4 +38,4 @@ Dynamic: requires-dist
38
38
  Dynamic: requires-python
39
39
  Dynamic: summary
40
40
 
41
- Commit 5e8518f. Build and Run scripts for executing the Certora Prover on Solidity smart contracts.
41
+ Commit 70ed750. Build and Run scripts for executing the Certora Prover on Solidity smart contracts.
@@ -12,40 +12,42 @@ certora_cli/certoraSorobanProver.py,sha256=SYJKz5Sw-N0bJrSa1njRCE53R9_PMz7IWLhfa
12
12
  certora_cli/certoraSuiProver.py,sha256=gRs-iihB35ZSEIQ5-hJN-wLgrHZlcfmpk76Wr6vza74,2827
13
13
  certora_cli/rustMutator.py,sha256=j1YdY5HOWQcRNbz7TOxp5c79J0YaaYHtWZ6m2mSTeGc,14865
14
14
  certora_cli/CertoraProver/__init__.py,sha256=QHNr-PJQAoyuPgTkO7gg23GRchiWSXglWNG7yLSQZvs,849
15
- certora_cli/CertoraProver/castingInstrumenter.py,sha256=4FDjQjnN9s8I3B9J-_G9rug9Jf3LnWnAuRngr50oTH4,7898
16
- certora_cli/CertoraProver/certoraApp.py,sha256=RKJ2Krb_CzbRUvczbdE6FhUDrFcvrR8j0JS8MNWXX7s,1469
17
- certora_cli/CertoraProver/certoraBuild.py,sha256=h6lGjUyTcC0EnRCK1DXD26Qez4DEphpFjx_IoQRiuO8,231608
15
+ certora_cli/CertoraProver/castingInstrumenter.py,sha256=maG3J0G2Bb8uT3_xA-AOo0gpBKmwhRJcEqvORD4JwNI,8412
16
+ certora_cli/CertoraProver/certoraApp.py,sha256=7pkQnUYMzP9V-Yo0jszNV9Y9aB760Q6hMZtlcXuuRp8,1660
17
+ certora_cli/CertoraProver/certoraBuild.py,sha256=Nc7EUrxI9w1qTAhmryZ93oIuCLx4X_8UGj22C5mQHPk,235997
18
18
  certora_cli/CertoraProver/certoraBuildCacheManager.py,sha256=DnVd7w92xjmg0DIrMgoJnCvaU0yCz7ySy0M4RiHEXEM,13648
19
19
  certora_cli/CertoraProver/certoraBuildDataClasses.py,sha256=RGeoZCS4OztfbEUak0Oq02wIPgrmAOwLBad6-_XvX8c,14936
20
20
  certora_cli/CertoraProver/certoraBuildRust.py,sha256=ZPbNp4ttRmzcKhFsgHSiHDRExNPaLOzgxTRqu23o1D0,6061
21
21
  certora_cli/CertoraProver/certoraBuildSui.py,sha256=zMXD2XnC4oqRDzPcBvSZmVquL3UG5paBZkfUT3JPbYY,4180
22
- certora_cli/CertoraProver/certoraCloudIO.py,sha256=ElRVD-c69aSURtgobuxbEfg6rPzQDSTqtTZJmeT_SYU,54430
22
+ certora_cli/CertoraProver/certoraCloudIO.py,sha256=nvB1x5237waj3iDnLcLYO5RlmEKGqFpDXWNOcxAgOQw,53701
23
23
  certora_cli/CertoraProver/certoraCollectConfigurationLayout.py,sha256=2EXMMaQcjAhWIvVxDeyYatR1RZtRhVwJl1GUvudJLdc,14076
24
- certora_cli/CertoraProver/certoraCollectRunMetadata.py,sha256=SonKgq2l6_8o6xySbinEinEd32Ufrk3VB0Roq-CmwoM,13718
24
+ certora_cli/CertoraProver/certoraCollectRunMetadata.py,sha256=wjP6m8W2rBka15vcj4P6tPkD0fVf-u62NylVqrOwCo8,14138
25
25
  certora_cli/CertoraProver/certoraCompilerParameters.py,sha256=v-MIt4sDJSQ7vpEFmCt9XBkKBhdBbZuZA4PWNErJwcU,1807
26
26
  certora_cli/CertoraProver/certoraConfigIO.py,sha256=-1EhJYsiheYvyCgOOWrRCQBjqtqNXrpMKJYRq5cKJ0Y,8171
27
27
  certora_cli/CertoraProver/certoraContext.py,sha256=ezdLmR-tSDLTtokhTyS9DacnB3W64Ke_6e714Vuug3c,29196
28
- certora_cli/CertoraProver/certoraContextAttributes.py,sha256=3NCjyNAkEI9ZVQD1BsNBoyHDeAYSbWWBN1gKkj-PqsA,73180
28
+ certora_cli/CertoraProver/certoraContextAttributes.py,sha256=3LDHlGcSm44CkuuAmp9xk7juF3-aYyGpKi6kaFRmIP4,74469
29
29
  certora_cli/CertoraProver/certoraContextClass.py,sha256=d7HDqM72K7YnswR7kEcAHGwkFNrTqRz5-_0m7cl2Mso,900
30
- certora_cli/CertoraProver/certoraContextValidator.py,sha256=II5xHZH5j2LIZ7XP08uybzAZ-HcW778qXcS7qhMAyv8,46901
31
- certora_cli/CertoraProver/certoraContractFuncs.py,sha256=IKe4xbDh0yFoYVCuLeAxnGg9h59rQCla3Qpy0GwS3HE,8236
30
+ certora_cli/CertoraProver/certoraContextValidator.py,sha256=_dIga4q2r2_q4Nk9T9dolfHfRbeKpMpJRZx0KR0zdI0,47415
31
+ certora_cli/CertoraProver/certoraContractFuncs.py,sha256=1CAA7Y9OEmdV-8Qlwk3SxEuOPBd15cd4T5lSv4NPYY8,8245
32
32
  certora_cli/CertoraProver/certoraExtensionInfo.py,sha256=YlShzdoqJQgXXj3r0TJ3fir1KntIR99Rk8JN5qii2lk,2026
33
33
  certora_cli/CertoraProver/certoraJobList.py,sha256=FBIYgJ60I0Ok7vchfTbcuJJbiXgnfAhrONoVeZoHti4,11464
34
34
  certora_cli/CertoraProver/certoraMiniSpecParser.py,sha256=NjjMwf5Rav3YWpoOJh4PZ-QOS8exC2cg4yIBSbZA6l0,9660
35
35
  certora_cli/CertoraProver/certoraNodeFilters.py,sha256=5Uk2mixZKeis_JVd3HkLgoEVklkAYBXAZiNHRlXOIfY,2830
36
+ certora_cli/CertoraProver/certoraOffsetConverter.py,sha256=Z3ENmJQJpbBhb_Jyb9s-z27f4bV9ABzXrDweBySRWjs,2103
36
37
  certora_cli/CertoraProver/certoraParseBuildScript.py,sha256=l7KQA1poEjmbmuYbMskz0jOQg6cW0lM3vk5ruAGPjPI,4863
37
38
  certora_cli/CertoraProver/certoraProjectScanner.py,sha256=jT7FeWzcy8o83LrZRwsg_L4x6im6Fm_0LZFKVbKr3Jk,6862
38
- certora_cli/CertoraProver/certoraSourceFinders.py,sha256=qwJtwrQq3NUNYmdmn1UmANN4lmJFIUh4M-St2x1FJ2Y,19038
39
+ certora_cli/CertoraProver/certoraSourceFinders.py,sha256=UwM4ROH-QML1mD0eF_dKRZysL__CxwM-6mxhRFsXCfg,19037
39
40
  certora_cli/CertoraProver/certoraType.py,sha256=inwaLkMVwtJnwkyQhDJs-wRxoyytu2Xa_BJ5MdGlZqY,29737
40
41
  certora_cli/CertoraProver/certoraVerifyGenerator.py,sha256=YMuzGj2RNOnADOx8UnV2ys1ptw_-2mermgC9ZLMWceo,11052
41
42
  certora_cli/CertoraProver/erc7201.py,sha256=BME5kBZsDx6lgqLn7EE91I1cEOZtsnZ8BlRVF62eEBE,1660
42
43
  certora_cli/CertoraProver/splitRules.py,sha256=dNhy05ShB_-rWYTnJH5m-Xc5A4HGStAvwLRs1BTu1GA,7627
43
44
  certora_cli/CertoraProver/storageExtension.py,sha256=nrCrbH8ne-yCYSDFzh3J9A7Q6h96WxhEfLbfxGSUCSc,14363
44
- certora_cli/CertoraProver/Compiler/CompilerCollector.py,sha256=cr-PIl7LY9VfNs4s4H3-EnSnomPiCgXudfwP9-KenMk,6740
45
+ certora_cli/CertoraProver/uncheckedOverflowInstrumenter.py,sha256=0zgpQR0b08tdllI2kVwWMEIcsjer0b0L10FFEvTaKm0,7446
46
+ certora_cli/CertoraProver/Compiler/CompilerCollector.py,sha256=JX-52BQgildY2WNlDW8yBM6o6ND4cN5Ih_1t4KTHuvc,6849
45
47
  certora_cli/CertoraProver/Compiler/CompilerCollectorFactory.py,sha256=drMPTUz9cabxqIu2ngGp0x1ZZ_Jqqn-Db2qql97PTaw,8544
46
48
  certora_cli/CertoraProver/Compiler/CompilerCollectorSol.py,sha256=7nAY2FLMUlGJn4f_YoZMqpa3rf7THqhJVjLwTaChcBc,5027
47
49
  certora_cli/CertoraProver/Compiler/CompilerCollectorSolBased.py,sha256=UasYWyu8Of6R84vXsqRNGpscYcFQghmSIY_dyaAWDYA,1350
48
- certora_cli/CertoraProver/Compiler/CompilerCollectorVy.py,sha256=kPzB_qbSbIFNmJd2cQ89ULwvgiGs7OdI9N_w9raaM4Y,69981
50
+ certora_cli/CertoraProver/Compiler/CompilerCollectorVy.py,sha256=F7BoSVE8SzKh0uID6Vqs_osPRvKK1vqsxavmpalyVUo,72953
49
51
  certora_cli/CertoraProver/Compiler/CompilerCollectorYul.py,sha256=ZTyWIMtaf4gLPRM3_jjq58Gb0r5LE_giajz6sssIi0Y,5299
50
52
  certora_cli/CertoraProver/Compiler/__init__.py,sha256=tEFAmNyx9WL0kzpp_-4s7b6pLvxHmBWz6pQAq0yeROM,789
51
53
  certora_cli/EquivalenceCheck/Eq_default.conf,sha256=J-tMFzIuQa1NcklOh-wv2bpnikfAxFogpRFOl3qoSwM,164
@@ -67,15 +69,15 @@ certora_cli/Shared/__init__.py,sha256=s0dhvolFtsS4sRNzPVhC_rlw8mm194rCZ0WhOxInY4
67
69
  certora_cli/Shared/certoraAttrUtil.py,sha256=Nw8ban5Axp6c6dT-KJfCD9i9tKnGk1DbvRDDNH3--DU,8574
68
70
  certora_cli/Shared/certoraLogging.py,sha256=cV2UQMhQ5j8crGXgeq9CEamI-Lk4HgdiA3HCrP-kSR4,14013
69
71
  certora_cli/Shared/certoraUtils.py,sha256=WEvgDMqTeqC61Q0cW1inbTmGVEgFYawjq8H2vv26bmI,60574
70
- certora_cli/Shared/certoraValidateFuncs.py,sha256=gCM-YP0Tpngpasd2AWxhu90UNz1wtls3WqJYp18n_Q8,43503
72
+ certora_cli/Shared/certoraValidateFuncs.py,sha256=7m1cZVVeN1UaGdPtvjxDJBlDQF0Oq3gIkSexQsHKxuU,44893
71
73
  certora_cli/Shared/proverCommon.py,sha256=DUB-uEKjOkZ-8qil6xukPqfTynpigXW-gcrm0_kRUZY,11383
72
- certora_jars/ASTExtraction.jar,sha256=o6nysKr3ftkw-UG-IPCa463zpi_XEYtY4dEQDXCDH5Y,22006118
73
- certora_jars/CERTORA-CLI-VERSION-METADATA.json,sha256=GLjiP1oxvbWRQ9coVScFfvh1iYJyHeN99cPid_KVxO4,143
74
- certora_jars/Typechecker.jar,sha256=3xOSCr6SzICqcb0ihnvzdedOjuS8e5m3IZRRWV8Rx8s,21968230
74
+ certora_jars/ASTExtraction.jar,sha256=8iuLcI3Qm-SktYtxxqbMlssniudegphVMZz9VEEwMHQ,22265115
75
+ certora_jars/CERTORA-CLI-VERSION-METADATA.json,sha256=YXjQoHr6lx4JGa-7B4sW5gyDOiZkhpov1BtFTzi2R6U,143
76
+ certora_jars/Typechecker.jar,sha256=FrV3Zlx8zA5vqP2k7NGy4BvK1oj9RGqu0jVIjwvIbmE,22227227
75
77
  certora_jars/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
76
- certora_cli_beta_mirror-8.6.2.dist-info/LICENSE,sha256=UGKSKIJSetF8m906JLKqNLkUS2CL60XfQdNvxBvpQXo,620
77
- certora_cli_beta_mirror-8.6.2.dist-info/METADATA,sha256=yt3Imd5EU6GWsc2FFWTm0m1RGSHSWQIWj3iwdBS9boA,1254
78
- certora_cli_beta_mirror-8.6.2.dist-info/WHEEL,sha256=jB7zZ3N9hIM9adW7qlTAyycLYW9npaWKLRzaoVcLKcM,91
79
- certora_cli_beta_mirror-8.6.2.dist-info/entry_points.txt,sha256=YXGQmR4tGdYD9lLdG_TEJkmVNrRauCtCDE88HwvO2Jo,569
80
- certora_cli_beta_mirror-8.6.2.dist-info/top_level.txt,sha256=8C77w3JLanY0-NW45vpJsjRssyCqVP-qmPiN9FjWiX4,38
81
- certora_cli_beta_mirror-8.6.2.dist-info/RECORD,,
78
+ certora_cli_beta_mirror-8.7.0.dist-info/LICENSE,sha256=UGKSKIJSetF8m906JLKqNLkUS2CL60XfQdNvxBvpQXo,620
79
+ certora_cli_beta_mirror-8.7.0.dist-info/METADATA,sha256=5uP-R_JenEwKwuLYnpFbDchACvJ4W8gjK2MIOuC2cbQ,1254
80
+ certora_cli_beta_mirror-8.7.0.dist-info/WHEEL,sha256=jB7zZ3N9hIM9adW7qlTAyycLYW9npaWKLRzaoVcLKcM,91
81
+ certora_cli_beta_mirror-8.7.0.dist-info/entry_points.txt,sha256=YXGQmR4tGdYD9lLdG_TEJkmVNrRauCtCDE88HwvO2Jo,569
82
+ certora_cli_beta_mirror-8.7.0.dist-info/top_level.txt,sha256=8C77w3JLanY0-NW45vpJsjRssyCqVP-qmPiN9FjWiX4,38
83
+ certora_cli_beta_mirror-8.7.0.dist-info/RECORD,,
Binary file
@@ -1 +1 @@
1
- {"name": "certora-cli-beta-mirror", "tag": "8.6.2", "branch": "", "commit": "5e8518f", "timestamp": "20251215.5.17.070907", "version": "8.6.2"}
1
+ {"name": "certora-cli-beta-mirror", "tag": "8.7.0", "branch": "", "commit": "70ed750", "timestamp": "20260121.6.14.752745", "version": "8.7.0"}
Binary file