Skip to content

Commit 026889b

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 026889b

37 files changed

+2234
-271
lines changed
Lines changed: 19 additions & 115 deletions
Original file line numberDiff line numberDiff line change
@@ -1,141 +1,45 @@
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
11-
push:
12-
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
205
workflow_dispatch:
216

227
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
8+
certora_run_submission:
9+
runs-on: ubuntu-latest
10+
permissions:
11+
contents: read
12+
statuses: write
13+
pull-requests: write
14+
id-token: write
4015
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
16+
- name: Checkout repository
17+
uses: actions/checkout@v4
4718
with:
4819
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
64-
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
12120

122-
# Run Certora verification with the same configurations
123-
- uses: Certora/certora-run-action@56c6a98e84eee5cd3a135967a9a4bc06ef6d38cc
21+
- name: Submit verification jobs to Certora Prover
22+
uses: Certora/certora-run-action@v2
12423
with:
12524
# List of configuration files for different contracts to verify
12625
configurations: |-
26+
certora/confs/multichain/CrossChainRegistry.conf
27+
certora/confs/multichain/KeyRegistrar.conf
28+
certora/confs/multichain/OperatorTableUpdater.conf
29+
certora/confs/multichain/ECDSACertificateVerifier.conf
30+
certora/confs/multichain/BN254CertificateVerifier.conf
12731
certora/confs/core/AllocationManager.conf
32+
certora/confs/core/AllocationManagerOverslashing.conf
33+
certora/confs/core/AllocationManagerValidState.conf
12834
certora/confs/core/AllocationManagerSanity.conf
12935
certora/confs/core/DelegationManager.conf
13036
certora/confs/core/DelegationManagerValidState.conf
13137
certora/confs/core/StrategyManager.conf
13238
certora/confs/permissions/Pausable.conf
13339
certora/confs/pods/EigenPodManagerRules.conf
13440
certora/confs/strategies/StrategyBase.conf
135-
use-beta: true
13641
solc-versions: 0.8.27
137-
solc-remove-version-prefix: "0."
138-
job-name: "Eigenlayer Contracts"
42+
job-name: "Verified Rules"
13943
certora-key: ${{ secrets.CERTORAKEY }}
14044
env:
14145
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)