Skip to content

Commit 93abc44

Browse files
committed
Multichain setup
Fix path to base conf Fix paths Run CI on PRs against eigenlayer/multichain Link to PauserRegistry in OperatorTableUpdater Link OperatorTableUpdater to BN254CertificateVerifier Remove unneeded external wildcard summary for a library with only internal functions Use Johannes' branch Refactor the AI specs Summarize hashToG1, add disale assumeFPStrictlyMonotonic Refactor AI rules from KeyRegistrar Remove unnecessary summarization from BN254 Summarize ECDSA _parseSignatures Switch to master to get all latest fixes Disable FP monotonicity assumption for now Switch to eric's fix branch, enable FP monotonicity assumption Switch to master since eric's branch is merged Try running without master initial changes KeyRegistrar specs CI setup multichain rules Clean the base conf Keep confs as real jsons More cleanup on confs - Remove solc key from confs since everything uses solc-0.8.27 - Unify indentations (4 spaces) - Unify empty lists (inline) Remove the empty certora workflow CI setup path fix fix compilation error strategyManagerHarness CI failures fixed StrategyManager rule adjusted to code Trigger CI for PRs on eigenlayer/multichain certora prover workflow for local branch CI setup CI rules updated acc. to code final adaptations multichain rules added allocation managers rules from distro project smt timeout increased on timeout timeout args changed overslashing rules
1 parent 0fb74c2 commit 93abc44

37 files changed

+2236
-270
lines changed
Lines changed: 21 additions & 114 deletions
Original file line numberDiff line numberDiff line change
@@ -1,141 +1,48 @@
1-
name: Certora
2-
31
on:
4-
# Run when PRs from feat/* branches are merged into dev
52
pull_request:
6-
types: [closed]
73
branches:
84
- main
9-
10-
# Run on any pushes to certora/* branches
115
push:
126
branches:
13-
- 'certora/**'
14-
15-
# Biweekly schedule (1st and 15th of each month at midnight UTC)
16-
schedule:
17-
- cron: '0 0 1,15 * *'
18-
19-
# Manual trigger
7+
- certora/multichain-specs
208
workflow_dispatch:
219

2210
jobs:
23-
# First job: Compile the contracts for Certora verification
24-
compile:
25-
name: Compile
26-
# Run if it meets one of these conditions:
27-
# 1. It's a merged PR from a feat/* branch to dev
28-
# 2. It's a push to a certora/* branch
29-
# 3. It's a scheduled run
30-
# 4. It's a manually triggered run
31-
if: >
32-
(github.event_name == 'pull_request' &&
33-
github.event.pull_request.merged == true &&
34-
startsWith(github.head_ref, 'feat/')) ||
35-
(github.event_name == 'push' &&
36-
startsWith(github.ref, 'refs/heads/certora/')) ||
37-
github.event_name == 'schedule' ||
38-
github.event_name == 'workflow_dispatch'
39-
runs-on: protocol-x64-16core
11+
certora_run_submission:
12+
runs-on: ubuntu-latest
13+
permissions:
14+
contents: read
15+
statuses: write
16+
pull-requests: write
17+
id-token: write
4018
steps:
41-
- uses: step-security/harden-runner@ec9f2d5744a09debf3a187a3f4f675c53b671911
42-
with:
43-
egress-policy: audit
44-
45-
# Checkout the repository with submodules
46-
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
47-
with:
48-
submodules: recursive
49-
# Use dev branch for scheduled runs, otherwise use the branch that triggered the workflow
50-
ref: ${{ github.event_name == 'schedule' && 'dev' || github.ref }}
51-
52-
# Install the Foundry toolchain
53-
- name: Install Foundry
54-
uses: foundry-rs/foundry-toolchain@82dee4ba654bd2146511f85f0d013af94670c4de
55-
with:
56-
version: stable
57-
58-
# Install dependencies using Forge
59-
- name: Install forge dependencies
60-
run: forge install
61-
62-
# Run Certora compilation step only
63-
- uses: Certora/certora-run-action@56c6a98e84eee5cd3a135967a9a4bc06ef6d38cc
19+
- name: Checkout repository
20+
uses: actions/checkout@v4
6421
with:
65-
# List of configuration files for different contracts to verify
66-
configurations: |-
67-
certora/confs/core/AllocationManager.conf
68-
certora/confs/core/AllocationManagerSanity.conf
69-
certora/confs/core/DelegationManager.conf
70-
certora/confs/core/DelegationManagerValidState.conf
71-
certora/confs/core/StrategyManager.conf
72-
certora/confs/permissions/Pausable.conf
73-
certora/confs/pods/EigenPodManagerRules.conf
74-
certora/confs/strategies/StrategyBase.conf
75-
use-beta: true
76-
solc-versions: 0.8.27
77-
solc-remove-version-prefix: "0."
78-
job-name: "Eigenlayer Contracts"
79-
certora-key: ${{ secrets.CERTORAKEY }}
80-
# Only compile, don't run verification yet
81-
compilation-steps-only: true
82-
env:
83-
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
84-
85-
# Second job: Run the actual verification after compilation succeeds
86-
verify:
87-
name: Verify
88-
runs-on: protocol-x64-16core
89-
# This job depends on the compile job
90-
needs: compile
91-
# Same conditions as the compile job
92-
if: >
93-
(github.event_name == 'pull_request' &&
94-
github.event.pull_request.merged == true &&
95-
startsWith(github.head_ref, 'feat/')) ||
96-
(github.event_name == 'push' &&
97-
startsWith(github.ref, 'refs/heads/certora/')) ||
98-
github.event_name == 'schedule' ||
99-
github.event_name == 'workflow_dispatch'
100-
steps:
101-
- uses: step-security/harden-runner@ec9f2d5744a09debf3a187a3f4f675c53b671911
102-
with:
103-
egress-policy: audit
104-
105-
# Checkout the repository with submodules
106-
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
107-
with:
108-
submodules: recursive
109-
# Use dev branch for scheduled runs, otherwise use the branch that triggered the workflow
110-
ref: ${{ github.event_name == 'schedule' && 'dev' || github.ref }}
111-
112-
# Install the Foundry toolchain.
113-
- name: Install Foundry
114-
uses: foundry-rs/foundry-toolchain@82dee4ba654bd2146511f85f0d013af94670c4de
115-
with:
116-
version: stable
117-
118-
# Install dependencies using Forge
119-
- name: Install forge dependencies
120-
run: forge install
22+
submodules: true
12123

122-
# Run Certora verification with the same configurations
123-
- uses: Certora/certora-run-action@56c6a98e84eee5cd3a135967a9a4bc06ef6d38cc
24+
- name: Submit verification jobs to Certora Prover
25+
uses: Certora/certora-run-action@v2
12426
with:
12527
# List of configuration files for different contracts to verify
12628
configurations: |-
29+
certora/confs/multichain/CrossChainRegistry.conf
30+
certora/confs/multichain/KeyRegistrar.conf
31+
certora/confs/multichain/OperatorTableUpdater.conf
32+
certora/confs/multichain/ECDSACertificateVerifier.conf
33+
certora/confs/multichain/BN254CertificateVerifier.conf
12734
certora/confs/core/AllocationManager.conf
35+
certora/confs/core/AllocationManagerOverslashing.conf
36+
certora/confs/core/AllocationManagerValidState.conf
12837
certora/confs/core/AllocationManagerSanity.conf
12938
certora/confs/core/DelegationManager.conf
13039
certora/confs/core/DelegationManagerValidState.conf
13140
certora/confs/core/StrategyManager.conf
13241
certora/confs/permissions/Pausable.conf
13342
certora/confs/pods/EigenPodManagerRules.conf
13443
certora/confs/strategies/StrategyBase.conf
135-
use-beta: true
13644
solc-versions: 0.8.27
137-
solc-remove-version-prefix: "0."
138-
job-name: "Eigenlayer Contracts"
45+
job-name: "Verified Rules"
13946
certora-key: ${{ secrets.CERTORAKEY }}
14047
env:
14148
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

.github/workflows/certora.yml

Lines changed: 0 additions & 62 deletions
This file was deleted.
Lines changed: 54 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -1,45 +1,56 @@
11
{
2-
"assert_autofinder_success": true,
3-
"files": [
4-
"src/contracts/core/AllocationManager.sol",
5-
"src/contracts/permissions/PauserRegistry.sol",
6-
"src/contracts/permissions/PermissionController.sol",
7-
"src/contracts/core/DelegationManager.sol",
8-
"src/contracts/pods/EigenPodManager.sol",
9-
"src/contracts/core/StrategyManager.sol",
10-
"src/contracts/strategies/StrategyBase.sol",
11-
"certora/mocks/CertoraAVSRegistrar.sol",
12-
"lib/openzeppelin-contracts-v4.9.0/contracts/token/ERC20/ERC20.sol",
13-
"src/contracts/libraries/OperatorSetLib.sol"
2+
"assert_autofinder_success": true,
3+
// "build_cache": true,
4+
"files": [
5+
"certora/harnesses/AllocationManagerHarness.sol",
6+
"src/contracts/permissions/PauserRegistry.sol",
7+
"src/contracts/permissions/PermissionController.sol",
8+
"src/contracts/core/DelegationManager.sol",
9+
"src/contracts/pods/EigenPodManager.sol",
10+
"src/contracts/core/StrategyManager.sol",
11+
"src/contracts/strategies/StrategyBase.sol",
12+
"certora/mocks/CertoraAVSRegistrar.sol",
13+
"lib/openzeppelin-contracts-v4.9.0/contracts/token/ERC20/ERC20.sol",
14+
"src/contracts/libraries/OperatorSetLib.sol",
15+
"certora/harnesses/ShortStringsUpgradeableHarness.sol"
16+
],
17+
"java_args": [],
18+
"link": [
19+
"AllocationManagerHarness:pauserRegistry=PauserRegistry",
20+
"DelegationManager:permissionController=PermissionController",
21+
"DelegationManager:allocationManager=AllocationManagerHarness",
22+
"AllocationManagerHarness:permissionController=PermissionController",
23+
"DelegationManager:strategyManager=StrategyManager",
24+
"AllocationManagerHarness:delegation=DelegationManager",
25+
"EigenPodManager:delegationManager=DelegationManager",
26+
"DelegationManager:eigenPodManager=EigenPodManager"
27+
],
28+
"loop_iter": "1",
29+
"msg": "AllocationManager",
30+
"optimistic_fallback": true,
31+
"optimistic_loop": true,
32+
"packages": [
33+
"@openzeppelin-upgrades=lib/openzeppelin-contracts-upgradeable-v4.9.0",
34+
"@openzeppelin=lib/openzeppelin-contracts-v4.9.0"
35+
],
36+
"parametric_contracts": [
37+
"AllocationManagerHarness"
38+
],
39+
"rule": [
40+
"pendingDiffStateTransitions",
41+
"pendingDiffStateTransitionModifyAllocations",
42+
"redistributionRecipientCannotBeDeadAddress"
1443
],
15-
"java_args": [
16-
],
17-
"link": [
18-
"AllocationManager:pauserRegistry=PauserRegistry",
19-
"DelegationManager:permissionController=PermissionController",
20-
"DelegationManager:allocationManager=AllocationManager",
21-
"AllocationManager:permissionController=PermissionController",
22-
"DelegationManager:strategyManager=StrategyManager",
23-
"AllocationManager:delegation=DelegationManager",
24-
"EigenPodManager:delegationManager=DelegationManager",
25-
"DelegationManager:eigenPodManager=EigenPodManager"
26-
],
27-
"loop_iter": "1",
28-
"optimistic_fallback": true,
29-
"optimistic_loop": true,
30-
"packages": [
31-
"@openzeppelin-upgrades=lib/openzeppelin-contracts-upgradeable-v4.9.0",
32-
"@openzeppelin=lib/openzeppelin-contracts-v4.9.0"
33-
],
34-
"parametric_contracts": [
35-
"AllocationManager"
36-
],
37-
"process": "emv",
38-
"prover_args": [
39-
" -recursionErrorAsAssert false -recursionEntryLimit 3"
40-
],
41-
"solc": "solc8.27",
42-
"solc_optimize": "1",
43-
"verify": "AllocationManager:certora/specs/core/AllocationManagerRules.spec",
44-
"server": "production",
45-
}
44+
"process": "emv",
45+
"prover_args": [
46+
"-recursionErrorAsAssert false -recursionEntryLimit 3",
47+
"-splitParallel true",
48+
"-dontStopAtFirstSplitTimeout true"
49+
],
50+
"rule_sanity": "basic",
51+
"server": "production",
52+
// "solc_via_ir": true,
53+
"solc_optimize": "1",
54+
"verify": "AllocationManagerHarness:certora/specs/core/AllocationManagerRules.spec",
55+
"wait_for_results": "none"
56+
}
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
{
2+
// "build_cache": true,
3+
"files": [
4+
"certora/harnesses/AllocationManagerHarness.sol",
5+
"src/contracts/permissions/PauserRegistry.sol",
6+
"src/contracts/permissions/PermissionController.sol",
7+
"src/contracts/core/DelegationManager.sol",
8+
"src/contracts/pods/EigenPodManager.sol",
9+
"src/contracts/core/StrategyManager.sol",
10+
"src/contracts/strategies/StrategyBase.sol",
11+
"certora/mocks/CertoraAVSRegistrar.sol",
12+
"lib/openzeppelin-contracts-v4.9.0/contracts/token/ERC20/ERC20.sol",
13+
"src/contracts/libraries/OperatorSetLib.sol",
14+
"certora/harnesses/ShortStringsUpgradeableHarness.sol"
15+
],
16+
"java_args": [],
17+
"link": [
18+
"AllocationManagerHarness:pauserRegistry=PauserRegistry",
19+
"DelegationManager:permissionController=PermissionController",
20+
"DelegationManager:allocationManager=AllocationManagerHarness",
21+
"AllocationManagerHarness:permissionController=PermissionController",
22+
"DelegationManager:strategyManager=StrategyManager",
23+
"AllocationManagerHarness:delegation=DelegationManager",
24+
"EigenPodManager:delegationManager=DelegationManager",
25+
"DelegationManager:eigenPodManager=EigenPodManager"
26+
],
27+
"loop_iter": "1",
28+
"msg": "AllocationManager No Overslashing",
29+
"optimistic_fallback": true,
30+
"optimistic_loop": true,
31+
"packages": [
32+
"@openzeppelin-upgrades=lib/openzeppelin-contracts-upgradeable-v4.9.0",
33+
"@openzeppelin=lib/openzeppelin-contracts-v4.9.0"
34+
],
35+
"parametric_contracts": [
36+
"AllocationManagerHarness"
37+
],
38+
"rule": [
39+
"noOverslashingOfShares",
40+
"noOverslashingOfOperatorShares",
41+
"overslashingOfSharesAtMostOne",
42+
],
43+
"process": "emv",
44+
"prover_args": [
45+
"-recursionErrorAsAssert",
46+
"false",
47+
"-recursionEntryLimit",
48+
"3",
49+
"-dontStopAtFirstSplitTimeout",
50+
"true",
51+
"-split",
52+
"false"
53+
],
54+
"smt_timeout": "7200",
55+
"rule_sanity": "basic",
56+
"server": "production",
57+
"solc_via_ir": true,
58+
"solc_optimize": "1",
59+
"disable_solc_optimizers": ["cse" , "peephole"],
60+
"verify": "AllocationManagerHarness:certora/specs/core/AllocationManagerRules.spec",
61+
"wait_for_results": "none"
62+
}

0 commit comments

Comments
 (0)