Thank you for helping build cross-chain intent infrastructure. This document explains how we work and what we look for in contributions.
- Spec-driven: Significant behavior changes should align with the MVP specification and Architecture, or the docs should be updated in the same PR.
- Small, reviewable PRs: Prefer focused changes over large refactors unless agreed in an issue first.
- Tests required: Contract changes must keep
forge testgreen; backend and frontend changes should preserve existing tests and add coverage for new logic. - No secrets: Never commit private keys, RPC API keys, or
.envfiles. Use.env.exampleonly. - Security: Report vulnerabilities privately — see SECURITY.md.
See the README Quickstart. Minimum checklist:
docker compose up -dfor Postgres / Redis / Anvil (optional forbackendVitest today, but recommended so/healthcan reportdatabase: trueand matches production-like setup).cd contracts && forge test(100/100 expected — seecontracts/README.md)cd backend && npm install && npm run lint && npm test(101/101 unit tests)cd backend && npm run test:e2e(4/4 E2E — spawns Anvil child processes; requiresforge buildfirst to populatecontracts/out/)cd frontend && npm install && npm run lint && npm run build
- Default branch:
main. - Workflow: short-lived
feature/<topic>orfix/<topic>branches; open a pull request intomain. - Commits: clear, imperative messages (e.g.
feat: add intent cancellation stub,fix: correct chain id in matcher test).
- Describes what changed and why (link related GitHub Issue if one exists).
- Keeps CI green (Foundry, backend, frontend jobs).
- Updates documentation when behavior or public APIs change.
- For Solidity: considers gas, reentrancy, and cross-chain state assumptions; does not silently weaken security without discussion.
- Does not introduce unlicensed or copyleft-incompatible vendored code without maintainer approval.
| Area | Path | Notes |
|---|---|---|
| On-chain | contracts/src/ |
Production logic; interfaces under contracts/src/interfaces/ · ChainPeerRegistry.sol for multi-chain EID + route config |
| Contract tests | contracts/test/ |
Foundry; extend coverage for new flows |
| Backend | backend/src/ |
API, indexer, matching; SQL under backend/database/ |
| Frontend | frontend/app/ |
Routes and API routes; shared UI under frontend/components/ |
- Solidity:
forge fmtwhere applicable; follow existing patterns and OpenZeppelin-style safety as dependencies are introduced. - TypeScript: respect
tsconfigstrictness; prefer explicit types on public exports. - React: client components only when needed (
'use client'); keep wallet logic in dedicated components/hooks.
Be respectful and assume good intent. Disagreement about architecture is expected; harassment is not.
Open an Issue on GitHub (enable Discussions on the repo if you want a lighter-weight Q&A channel). Planned workstreams and maintainer scripts are in docs/GITHUB_PROJECT_AND_ISSUES.md.