certora-cli-beta-mirror 8.6.3__py3-none-any.whl → 8.8.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.
- certora_cli/CertoraProver/Compiler/CompilerCollector.py +9 -8
- certora_cli/CertoraProver/Compiler/CompilerCollectorVy.py +126 -73
- certora_cli/CertoraProver/castingInstrumenter.py +23 -16
- certora_cli/CertoraProver/certoraBuild.py +111 -34
- certora_cli/CertoraProver/certoraContextAttributes.py +57 -1
- certora_cli/CertoraProver/certoraContextValidator.py +8 -1
- certora_cli/CertoraProver/certoraContractFuncs.py +1 -1
- certora_cli/CertoraProver/certoraOffsetConverter.py +54 -0
- certora_cli/CertoraProver/certoraSourceFinders.py +7 -7
- certora_cli/CertoraProver/uncheckedOverflowInstrumenter.py +152 -0
- certora_cli/Shared/certoraValidateFuncs.py +31 -0
- {certora_cli_beta_mirror-8.6.3.dist-info → certora_cli_beta_mirror-8.8.0.dist-info}/METADATA +2 -2
- {certora_cli_beta_mirror-8.6.3.dist-info → certora_cli_beta_mirror-8.8.0.dist-info}/RECORD +20 -18
- certora_jars/ASTExtraction.jar +0 -0
- certora_jars/CERTORA-CLI-VERSION-METADATA.json +1 -1
- certora_jars/Typechecker.jar +0 -0
- {certora_cli_beta_mirror-8.6.3.dist-info → certora_cli_beta_mirror-8.8.0.dist-info}/LICENSE +0 -0
- {certora_cli_beta_mirror-8.6.3.dist-info → certora_cli_beta_mirror-8.8.0.dist-info}/WHEEL +0 -0
- {certora_cli_beta_mirror-8.6.3.dist-info → certora_cli_beta_mirror-8.8.0.dist-info}/entry_points.txt +0 -0
- {certora_cli_beta_mirror-8.6.3.dist-info → certora_cli_beta_mirror-8.8.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.
|
{certora_cli_beta_mirror-8.6.3.dist-info → certora_cli_beta_mirror-8.8.0.dist-info}/METADATA
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.2
|
|
2
2
|
Name: certora-cli-beta-mirror
|
|
3
|
-
Version: 8.
|
|
3
|
+
Version: 8.8.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
|
|
41
|
+
Commit 2cf089d. Build and Run scripts for executing the Certora Prover on Solidity smart contracts.
|
|
@@ -12,9 +12,9 @@ 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=
|
|
15
|
+
certora_cli/CertoraProver/castingInstrumenter.py,sha256=maG3J0G2Bb8uT3_xA-AOo0gpBKmwhRJcEqvORD4JwNI,8412
|
|
16
16
|
certora_cli/CertoraProver/certoraApp.py,sha256=7pkQnUYMzP9V-Yo0jszNV9Y9aB760Q6hMZtlcXuuRp8,1660
|
|
17
|
-
certora_cli/CertoraProver/certoraBuild.py,sha256=
|
|
17
|
+
certora_cli/CertoraProver/certoraBuild.py,sha256=eR35uOEWF3zw8O95-28gqnixgPMNzn6MBuE2-8VC3jU,236152
|
|
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
|
|
@@ -25,27 +25,29 @@ certora_cli/CertoraProver/certoraCollectRunMetadata.py,sha256=wjP6m8W2rBka15vcj4
|
|
|
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=
|
|
28
|
+
certora_cli/CertoraProver/certoraContextAttributes.py,sha256=8dqlsKAwe3qcjnVLI2zRk4sIN-l5ICR3yFhzljVAAG8,75649
|
|
29
29
|
certora_cli/CertoraProver/certoraContextClass.py,sha256=d7HDqM72K7YnswR7kEcAHGwkFNrTqRz5-_0m7cl2Mso,900
|
|
30
|
-
certora_cli/CertoraProver/certoraContextValidator.py,sha256=
|
|
31
|
-
certora_cli/CertoraProver/certoraContractFuncs.py,sha256=
|
|
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=
|
|
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/
|
|
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=
|
|
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=
|
|
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=
|
|
73
|
-
certora_jars/CERTORA-CLI-VERSION-METADATA.json,sha256=
|
|
74
|
-
certora_jars/Typechecker.jar,sha256=
|
|
74
|
+
certora_jars/ASTExtraction.jar,sha256=1VB1tRT5q5cgcN1fdnvMQVd5a0zhOhylkw118hU-wSI,22249062
|
|
75
|
+
certora_jars/CERTORA-CLI-VERSION-METADATA.json,sha256=SdNMLPejAMnUasABM6lQEHAmlDxuPLmhvR10Wvu-liQ,144
|
|
76
|
+
certora_jars/Typechecker.jar,sha256=PWub0uzszl8cMKGX7ymSNUUB30v85sBsrCf7BCdKIxA,22211174
|
|
75
77
|
certora_jars/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
76
|
-
certora_cli_beta_mirror-8.
|
|
77
|
-
certora_cli_beta_mirror-8.
|
|
78
|
-
certora_cli_beta_mirror-8.
|
|
79
|
-
certora_cli_beta_mirror-8.
|
|
80
|
-
certora_cli_beta_mirror-8.
|
|
81
|
-
certora_cli_beta_mirror-8.
|
|
78
|
+
certora_cli_beta_mirror-8.8.0.dist-info/LICENSE,sha256=UGKSKIJSetF8m906JLKqNLkUS2CL60XfQdNvxBvpQXo,620
|
|
79
|
+
certora_cli_beta_mirror-8.8.0.dist-info/METADATA,sha256=dWNDZeGK0fCa2IM6ueE6dtYNpX41e52L3lP-ugQir7Q,1254
|
|
80
|
+
certora_cli_beta_mirror-8.8.0.dist-info/WHEEL,sha256=jB7zZ3N9hIM9adW7qlTAyycLYW9npaWKLRzaoVcLKcM,91
|
|
81
|
+
certora_cli_beta_mirror-8.8.0.dist-info/entry_points.txt,sha256=YXGQmR4tGdYD9lLdG_TEJkmVNrRauCtCDE88HwvO2Jo,569
|
|
82
|
+
certora_cli_beta_mirror-8.8.0.dist-info/top_level.txt,sha256=8C77w3JLanY0-NW45vpJsjRssyCqVP-qmPiN9FjWiX4,38
|
|
83
|
+
certora_cli_beta_mirror-8.8.0.dist-info/RECORD,,
|
certora_jars/ASTExtraction.jar
CHANGED
|
Binary file
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"name": "certora-cli-beta-mirror", "tag": "8.
|
|
1
|
+
{"name": "certora-cli-beta-mirror", "tag": "8.8.0", "branch": "", "commit": "2cf089d", "timestamp": "20260202.13.36.178104", "version": "8.8.0"}
|
certora_jars/Typechecker.jar
CHANGED
|
Binary file
|
|
File without changes
|
|
File without changes
|
{certora_cli_beta_mirror-8.6.3.dist-info → certora_cli_beta_mirror-8.8.0.dist-info}/entry_points.txt
RENAMED
|
File without changes
|
{certora_cli_beta_mirror-8.6.3.dist-info → certora_cli_beta_mirror-8.8.0.dist-info}/top_level.txt
RENAMED
|
File without changes
|