Skip to content

Commit 80b74fa

Browse files
authored
fix: address Certora audit findings for Slashing UX Improvements (#1693)
**Motivation:** Address findings from the Certora audit of EigenLayer Slashing UX Improvements. This branch consolidates fixes for low-severity findings (L-01) and informational findings (I-01 through I-05) across AllocationManager and ProtocolRegistry contracts. **Modifications:** ### AllocationManager Fixes **L-01: State inconsistency fixes** - Update `slasher` field immediately when `instantEffectBlock=true` to prevent stale storage (#1687) - Update `delay` and `isSet` fields immediately for newly registered operators to ensure storage consistency (#1688) **I-01: Re-proposing same pending slasher is now a no-op** (#1689) - Added check in `_updateSlasher()` to skip processing if the proposed slasher is already pending - Prevents accidentally restarting the delay countdown **I-02: Add NatSpec documentation for getSlasher/getPendingSlasher** (#1689) - Document that these functions return `address(0)`/`0` for non-existent operator sets **I-03: Add separate SLASHER_CONFIGURATION_DELAY constant** (#1689) - New immutable allows independent configuration of slasher delay in future upgrades - Currently set to same value as `ALLOCATION_CONFIGURATION_DELAY` **I-05: Add gas warning documentation for migrateSlashers** (#1689) - Document O(appointees) gas cost per operator set - Warn about potential block gas limit issues with large appointee sets ### ProtocolRegistry Fixes **I-01: ship() lacks validation** (#1690) - Added array length validation for addresses, configs, and names - Added zero address validation with new `ArrayLengthMismatch()` and `InputAddressZero()` errors **I-02: Orphaned configs on name overwrite** (#1690) - Delete old address's `DeploymentConfig` when re-shipping a name with a new address - Added `DeploymentConfigDeleted(address)` event **I-03: configure() for unshipped addresses** (#1690) - Updated `configure` to require a name parameter - Added validation that address must be a shipped deployment **I-04: Fix misleading NatSpec** (#1690) - Clarified `ship()` behavior when re-shipping names - Updated `configure()` NatSpec for address requirements **I-05: Document pauseAll blocking** (#1690) - Added warning that `pauseAll()` reverts if ANY pausable deployment fails ### Other Changes - v1.9.0 upgrade script fixes for testnet deploy (#1677) - Added Claude skills for development workflow (#1686) **Result:** - Audit fixes complete
2 parents a861d3d + 3b66baa commit 80b74fa

File tree

33 files changed

+2437
-98
lines changed

33 files changed

+2437
-98
lines changed
Lines changed: 216 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,216 @@
1+
---
2+
name: audit-extractor
3+
description: Extract findings from PDF audit reports and convert them to a markdown checklist. Use when the user asks to process an audit report, extract audit findings, or create an audit action items list. (project)
4+
allowed-tools: Read, Write
5+
---
6+
7+
# Audit Extractor
8+
9+
Extract findings from PDF security audit reports and convert them to a structured markdown checklist for tracking remediation.
10+
11+
## Overview
12+
13+
This skill processes PDF audit reports (from firms like Certora, Sigma Prime, Cantina, etc.) and extracts:
14+
- Finding ID (e.g., C-01, H-01, M-01, L-01, I-01)
15+
- Title/Description
16+
- Severity (Critical, High, Medium, Low, Informational)
17+
- Status (Fixed, Partially fixed, Awaiting Fix, Acknowledged, Disregarded, Pending)
18+
- Impact and Likelihood (when available)
19+
- Detailed descriptions and recommendations
20+
21+
## How to Extract Findings
22+
23+
### Step 1: Read the PDF directly
24+
25+
Use the Read tool to read the PDF file. Claude can natively read and understand PDF documents:
26+
27+
```
28+
Read the PDF file at: <pdf_path>
29+
```
30+
31+
### Step 2: Parse the audit content
32+
33+
After reading the PDF, manually extract findings by looking for:
34+
35+
1. **Summary/Findings Table** - Usually contains:
36+
- Finding IDs (patterns like C-01, H-01, M-01, L-01, I-01)
37+
- Titles
38+
- Severity levels
39+
- Status
40+
41+
2. **Detailed Finding Sections** - Usually organized by PR or category, containing:
42+
- Full descriptions
43+
- Code snippets
44+
- Exploit scenarios
45+
- Recommendations
46+
- Customer response / Fix review status
47+
48+
3. **Severity Information** - Look for:
49+
- Impact (High, Medium, Low)
50+
- Likelihood (High, Medium, Low)
51+
52+
### Step 3: Generate the markdown output
53+
54+
Create a markdown file with the following structure:
55+
56+
```markdown
57+
# Audit Findings: [Audit Name]
58+
59+
**Auditor:** [Auditor Name]
60+
**Date:** [Date]
61+
**Status:** [Draft/Final]
62+
**Total findings:** [Count]
63+
64+
## Summary
65+
66+
| Severity | Discovered | Confirmed | Fixed |
67+
|----------|------------|-----------|-------|
68+
| Critical | X | | |
69+
| High | X | | |
70+
| Medium | X | | |
71+
| Low | X | | |
72+
| Informational | X | | |
73+
| **Total** | **X** | | |
74+
75+
## Action Required (X items pending)
76+
77+
- [ ] **M-01** (Medium): [Title]
78+
- [ ] **L-01** (Low): [Title]
79+
80+
---
81+
82+
## All Findings
83+
84+
### ([PR/Category Name])
85+
86+
#### [ID]. [Title]
87+
| Severity | Impact | Likelihood | Status |
88+
|----------|--------|------------|--------|
89+
| [Severity] | [Impact] | [Likelihood] | [Status] |
90+
91+
**Files:** `[filename.sol]`
92+
93+
**Description:** [Full description]
94+
95+
**Recommendation:** [Recommendation text]
96+
97+
---
98+
```
99+
100+
### Step 4: Save the output
101+
102+
Use the Write tool to save the markdown file:
103+
- Save to `audits/[Audit-Name]-Findings.md`
104+
105+
## Output Format Guidelines
106+
107+
### Severity Levels
108+
- **Critical** - Direct loss of funds or complete protocol compromise
109+
- **High** - Significant impact on protocol security or functionality
110+
- **Medium** - Moderate impact, potential for exploitation under certain conditions
111+
- **Low** - Minor issues, best practice violations
112+
- **Informational** - Code quality, gas optimizations, documentation
113+
114+
### Status Values
115+
- **Fixed** - Issue has been resolved
116+
- **Partially fixed** - Issue has been partially addressed
117+
- **Awaiting Fix** - Issue acknowledged, fix pending
118+
- **Acknowledged** - Issue acknowledged, may not be fixed
119+
- **Pending** - Awaiting customer response
120+
- **Disregarded** - Issue will not be fixed (by design)
121+
122+
### Checklist Rules
123+
- Use `[ ]` for unresolved items (Pending, Awaiting Fix, Partially fixed)
124+
- Use `[x]` for resolved items (Fixed, Acknowledged, Disregarded)
125+
126+
## Audit Files Location
127+
128+
Audit reports are typically stored in: `audits/`
129+
130+
## Example Extraction
131+
132+
Given a PDF with findings like:
133+
134+
```
135+
M-01 MigrateSlashers may assign incompatible slasher | Medium | Pending
136+
L-01 Instant slasher setting leaves stale field | Low | Pending
137+
I-01 getSlasher is implemented twice | Informational | Pending
138+
```
139+
140+
Generate:
141+
142+
```markdown
143+
# Audit Findings: EigenLayer - Slashing UX Improvements
144+
145+
**Auditor:** Certora
146+
**Date:** December 2025
147+
**Total findings:** 3
148+
149+
## Summary
150+
151+
| Severity | Count |
152+
|----------|-------|
153+
| Medium | 1 |
154+
| Low | 1 |
155+
| Informational | 1 |
156+
157+
## Action Required (2 items)
158+
159+
- [ ] **M-01** (Medium): MigrateSlashers may assign incompatible slasher
160+
- [ ] **L-01** (Low): Instant slasher setting leaves stale field
161+
162+
## All Findings
163+
164+
### Medium (1)
165+
166+
#### M-01. MigrateSlashers may assign an incompatible slasher address
167+
| Severity | Impact | Likelihood | Status |
168+
|----------|--------|------------|--------|
169+
| Medium | High | Low | Pending |
170+
171+
**Description:** [Full description from PDF]
172+
173+
**Recommendation:** [Recommendation from PDF]
174+
175+
---
176+
177+
### Low (1)
178+
179+
#### L-01. Instant slasher setting leaves stale slasher field in storage
180+
| Severity | Impact | Likelihood | Status |
181+
|----------|--------|------------|--------|
182+
| Low | Low | Low | Pending |
183+
184+
**Description:** [Full description from PDF]
185+
186+
**Recommendation:** [Recommendation from PDF]
187+
188+
---
189+
190+
### Informational (1)
191+
192+
#### I-01. getSlasher is implemented twice
193+
| Severity | Status |
194+
|----------|--------|
195+
| Informational | Pending |
196+
197+
**Description:** [Full description from PDF]
198+
199+
**Recommendation:** [Recommendation from PDF]
200+
```
201+
202+
## Troubleshooting
203+
204+
### PDF won't read
205+
- Ensure the file path is correct and the file exists
206+
- Check if the PDF is password protected (not supported)
207+
208+
### Missing findings
209+
- Some PDFs have findings spread across multiple sections
210+
- Check the Table of Contents for finding locations
211+
- Look for "Detailed Findings" or similar sections
212+
213+
### Inconsistent formatting
214+
- Different audit firms use different formats
215+
- Adapt the markdown structure to match the source format
216+
- Preserve all relevant information even if structure differs

0 commit comments

Comments
 (0)