Skip to content

Commit c8932d4

Browse files
committed
use cvl2
1 parent 1c29d23 commit c8932d4

File tree

2 files changed

+20
-13
lines changed

2 files changed

+20
-13
lines changed

.github/workflows/certora.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,8 @@ jobs:
2525
uses: actions/setup-java@v3
2626
with: { java-version: "17", java-package: jre, distribution: semeru }
2727

28-
- name: Install certora cli
29-
run: pip install certora-cli
28+
- name: Install certora cli-beta
29+
run: pip install certora-cli-beta
3030

3131
- name: Install solc
3232
run: |

certora/specs/Safe.spec

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,39 @@
11
methods {
22
//
3-
getThreshold() returns (uint256) envfree
4-
disableModule(address,address)
5-
nonce() returns (uint256) envfree
3+
function getThreshold() external returns (uint256) envfree;
4+
function disableModule(address,address) external;
5+
function nonce() external returns (uint256) envfree;
66

77
// harnessed
8-
getModule(address) returns (address) envfree
8+
function getModule(address) external returns (address) envfree;
9+
10+
// optional
11+
function execTransactionFromModuleReturnData(address,uint256,bytes,SafeHarness.Operation) external returns (bool, bytes memory);
12+
function execTransactionFromModule(address,uint256,bytes,SafeHarness.Operation) external returns (bool);
13+
function execTransaction(address,uint256,bytes,SafeHarness.Operation,uint256,uint256,uint256,address,address,bytes) external returns (bool);
914
}
1015

1116
definition noHavoc(method f) returns bool =
12-
f.selector != execTransactionFromModuleReturnData(address,uint256,bytes,uint8).selector
13-
&& f.selector != execTransactionFromModule(address,uint256,bytes,uint8).selector
14-
&& f.selector != execTransaction(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,bytes).selector;
17+
f.selector != sig:execTransactionFromModuleReturnData(address,uint256,bytes,SafeHarness.Operation).selector
18+
&& f.selector != sig:execTransactionFromModule(address,uint256,bytes,SafeHarness.Operation).selector
19+
&& f.selector != sig:execTransaction(address,uint256,bytes,SafeHarness.Operation,uint256,uint256,uint256,address,address,bytes).selector;
1520

1621
definition reachableOnly(method f) returns bool =
17-
f.selector != setup(address[],uint256,address,bytes,address,address,uint256,address).selector
18-
&& f.selector != simulateAndRevert(address,bytes).selector;
22+
f.selector != sig:setup(address[],uint256,address,bytes,address,address,uint256,address).selector
23+
&& f.selector != sig:simulateAndRevert(address,bytes).selector;
1924

2025
/// Nonce must never decrease
21-
rule nonceMonotonicity(method f) {
26+
rule nonceMonotonicity(method f) filtered {
27+
f -> noHavoc(f) && reachableOnly(f)
28+
} {
2229
uint256 nonceBefore = nonce();
2330

2431
calldataarg args; env e;
2532
f(e, args);
2633

2734
uint256 nonceAfter = nonce();
2835

29-
assert nonceAfter == nonceBefore || nonceAfter == nonceBefore + 1;
36+
assert nonceAfter == nonceBefore || to_mathint(nonceAfter) == nonceBefore + 1;
3037
}
3138

3239

0 commit comments

Comments
 (0)