Thank you for your interest in contributing to SolidityGuard! This guide will help you get started.
# Clone the repo
git clone https://github.com/alt-research/SolidityGuard.git
cd SolidityGuard
# Run scanner tests
python3 -m pytest .claude/skills/solidity-guard/scripts/test_scanners.py -v
# Run CTF benchmarks
python3 .claude/skills/solidity-guard/scripts/ctf_benchmark.py --all
# Frontend
cd apps/web/frontend && npm install && npm run dev
# Backend
cd apps/web/backend && pip install -e . && uvicorn solidityguard_api.main:app --reload
# Desktop
cd apps/desktop && npm install && npm run tauri dev- Add the detector in
.claude/skills/solidity-guard/scripts/solidity_guard.pyinsidescan_patterns() - Add a test case in
test_scanners.py - Verify it passes:
python3 -m pytest test_scanners.py -v - Run the CTF benchmark to ensure no regressions:
python3 ctf_benchmark.py --all
Add to knowledge-base/exploits/ with the format:
# Incident Name ($XXM Loss)
## Summary
Brief description.
## Root Cause
ETH-XXX: Pattern name
## Attack Steps
1. Step one
2. Step two
## Remediation
How to prevent this.If you find a false positive in the scanner:
- Create a minimal
.solfile that triggers the false positive - Add a test case showing the expected behavior
- Fix the detector logic
- Verify the CTF benchmark still passes at 100%
We integrate with Slither, Aderyn, Mythril, Echidna, Medusa, Foundry, Halmos, and Certora. To improve an integration:
- Check the relevant runner in
.claude/skills/solidity-guard/scripts/ - Test with real contracts
- Ensure finding deduplication works across tools
- Fork the repository
- Create a feature branch:
git checkout -b feature/my-improvement - Make your changes
- Ensure all tests pass:
python3 -m pytest .claude/skills/solidity-guard/scripts/test_scanners.py -v python3 -m pytest apps/web/backend/ -v cd apps/web/frontend && npx tsc --noEmit
- Submit a PR with a clear description
- Python: Follow existing style, use type hints where practical
- TypeScript/React: Follow existing patterns, Tailwind for styling
- Rust: Standard Rust formatting (
cargo fmt) - Commit messages: Concise, imperative mood (e.g., "Add ETH-105 pattern detector")
- New vulnerability pattern detectors (ETH-105+)
- Exploit case studies (anonymized)
- Tool integrations and runner improvements
- False positive reduction
- Documentation improvements
- Frontend UI/UX improvements
- Desktop app features
Open an issue or reach out at maintainers@altresear.ch.