* feat: add --timing flag for phase-level performance breakdown
Add PhaseTimer utility for instrumenting Slither phases:
- New --timing CLI flag to enable timing collection
- Instruments parse_contracts, analyze_contracts, convert_to_slithir,
compute_dependency, compute_storage_layout, and detector runs
- Outputs sorted timing report showing total/count/avg per phase
Co-Authored-By: Claude Opus 4.5 <[email protected]>
* feat: add timing infrastructure and fix benchmark compatibility
Add phase-level timing support:
- New --timing flag for slither CLI to capture execution phases
- Timing data exported via --json-types timing
- Benchmark script updated to display phase breakdowns
Replace aave-v3-core with safe-smart-account in benchmarks:
- aave-v3-core requires Node 14/16/18, incompatible with Node 22+
- safe-smart-account uses modern Node.js (22.14.0 per .nvmrc)
Co-Authored-By: Claude Opus 4.5 <[email protected]>
---------
Co-authored-by: Claude Opus 4.5 <[email protected]>
* feat: add performance benchmark script
Add scripts/benchmark_perf.py for benchmarking Slither against real-world
smart contract projects (Uniswap v4, Compound Comet, Aave v3, etc.).
Features:
- Clone and setup benchmark projects with --setup
- Benchmark current checkout or compare across branches
- Support for git worktrees (--slither-path) for parallel benchmarking
- Baseline comparison (--baseline) with percentage deltas
- PR comment formatting (--pr) for CI integration
- JSON output for automation
Co-Authored-By: Claude Opus 4.5 <[email protected]>
* feat: add lock file to prevent benchmark contention
Multiple subagents running benchmarks in parallel now automatically
serialize via /tmp/slither-bench.lock. Use --no-lock to skip for
isolated environments.
Co-Authored-By: Claude Opus 4.5 <[email protected]>
* fix: remove hardcoded comparison branch
Default to just master for branch comparison.
Co-Authored-By: Claude Opus 4.5 <[email protected]>
---------
Co-authored-by: Claude Opus 4.5 <[email protected]>
Replace live Etherscan API calls with cached local contract sources.
The contracts are immutable on-chain, so testing against cached source
still validates the analysis logic.
This fixes intermittent CI failures from Etherscan API rate limits when
multiple jobs run in parallel. The Etherscan platform integration is
already tested by crytic-compile's own CI.
Co-authored-by: Claude Opus 4.5 <[email protected]>
* tool: support reinitializer in slither-check-upgradeability
* MissingCalls: don't account reinitializers
* tool: add detector for multiple new reinitializers
* fix: comments and pylint
Etherscan performs a 1/5s rate limit when using no API key, so this
adds a small random sleep to avoid the second test failing if it
executes fast enough.