Skip to content

Commit 12b09d4

Browse files
Release 8.5.1 (#450)
* Add constructor preserved block documentation (#445) Adds documentation for document Certora/EVMVerifier#8117 * Update changelog for version 8.5.1 (#449) --------- Co-authored-by: christiane-certora <christiane@certora.com>
1 parent 853c786 commit 12b09d4

File tree

2 files changed

+20
-5
lines changed

2 files changed

+20
-5
lines changed

docs/cvl/invariants.md

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ preserved_block ::= "preserved"
4444
4545
method_signature ::= [ contract_name "." ] id "(" [ evm_type [ id ] { "," evm_type [ id ] } ] ")"
4646
| "fallback" "(" ")"
47+
| "constructor" "(" ")"
4748
4849
contract_name ::= id
4950
| "_"
@@ -227,18 +228,22 @@ If an invariant has multiple preserved blocks with the same method signature
227228
where one signature is more specific and the other is more general (as in
228229
the `_.method` case), then the more specific preserved block will apply.
229230

230-
If a preserved block specifies a method signature, the signature must either be `fallback()` or
231+
If a preserved block specifies a method signature, the signature must either be `fallback()`, `constructor()` or
231232
match one of the contract methods, and the preserved block only applies when
232233
checking preservation of that contract method. The `fallback()` preserved block
233234
applies only to the `fallback()` function that should be defined in the contract.
234235
The arguments of the method are in scope within the preserved block.
236+
The `constructor()` preserved block applies on the base step of the invariant check
237+
and the arguments of the constructor are not captured in the preserved block.
235238

236239
### Generic preserved blocks
237-
If there is no method signature, the preserved block is a default block that is
238-
used for all methods that don't have a specific preserved block, including the
239-
`fallback()` method. If an invariant has both a default preserved block and a
240+
A method block with no method signature is called the generic preserved block.
241+
The generic preserved block is used for all methods that don't have a specific preserved block,
242+
including the `fallback()` method. Note, the generic preserved block is not applied
243+
for the induction base step, for the induction base step use `preserved constructor()` instead.
244+
If an invariant has both a generic preserved block and a
240245
specific preserved block for a method, the specific preserved block is used;
241-
the default preserved block will not be executed.
246+
the generic preserved block will not be executed.
242247

243248
### Binding the environment
244249
The `with` declaration is used to give a name to the {term}`environment` used

docs/prover/changelog/prover_changelog.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,16 @@ Prover Release Notes
55
```{contents}
66
```
77

8+
8.5.1 (November 25, 2025)
9+
-------------------------
10+
### CVLM
11+
- [feat] Added new Certora Sui Prover (CLI command: `certoraSuiProver`) for Sui smart contract specifications written in the new Certora Verification Language for Move (CVLM).
12+
13+
### CVL
14+
- [feat] Added support for new `preserved constructor()` block for stating assumptions before constructor code is executed when checking the base step of an invariant.
15+
- [feat] Improved VSCode extension's CVL formatting related to unintended line breaks, aggressive empty-line removal, and unnecessary changes to parentheses.
16+
17+
818
8.3.0 (October 5, 2025)
919
-----------------------
1020
### Rule Report

0 commit comments

Comments
 (0)