Thanks for your interest in contributing! This guide explains how to set up your environment, propose changes, and follow the project’s engineering standards.
- Fork the repo and clone your fork
- Install dependencies at the repo root:
yarn install
- Contracts (Foundry):
cd packages/foundry cp .env.example .env # Fill env values (USDC, PERMIT2, etc.) yarn deploy --reset forge test
- Frontend (Next.js):
cd packages/nextjs cp .env.example .env.local yarn dev
- Use GitHub Issues for bug reports and feature requests
- Include reproduction steps, logs, and environment info
- For features, describe UX, API, and acceptance criteria
- Branch naming:
feat/<scope>-<short>,fix/<scope>-<short>,chore/<scope>-<short> - Conventional Commits examples:
feat: add aave v3 strategy adapterfix: prevent deposit when pauseddocs: update readme env keys
- PR title follows Conventional Commits
- Keep PRs focused
- Include:
- What & Why
- Screenshots for UI changes
- Manual test notes (steps/results)
- Checklist:
- Contracts:
forge test - Frontend:
yarn lint+yarn typecheck - No console.log in production paths
- Env keys documented
- Contracts:
- Prefer clarity over cleverness; early returns; explicit error handling
- ^0.8.x, OpenZeppelin where possible
- CEI pattern; ReentrancyGuard for external calls
- Events on state changes; custom errors for gas efficiency
- Natspec on public/external functions
- Strict TypeScript; avoid
any - Functional components with hooks
- Keep components small; extract presentation where helpful
- Use Wagmi/Viem; Tailwind for styles
- Contracts: unit tests (Foundry); add invariants for critical math
- Frontend: component tests/smoke tests for critical flows
- Manual QA checklist:
- Create vault → visible on dashboard
- Deposit/Withdraw → balances update
- Admin controls (pause, allowlist, caps)
- Set strategy / invest / divest works
- Don’t open public issues for vulnerabilities
- Privately disclose with steps and impact
Thank you for contributing! 🙌