Thanks for picking this up. Quick orientation before you start:
frontend/— React/TS/Vitebackend/— Express/TS APIcontracts/— Soroban contracts (Rust)
Each has its own README with setup and run instructions. Start there for your area — this file only covers things common to all three.
Read the root README's Status section. It lists exactly what's real versus placeholder right now. Several open issues are about replacing a placeholder — the comment at that placeholder's definition usually explains what it fakes and why, which is the fastest way to understand the scope of the fix.
- Comment on the issue you want before starting, so two people don't build the same thing.
- Fork, branch, implement.
- Run the relevant test suite before opening a PR:
contracts/:cargo test(both contracts have real test coverage — match that bar for new contract code)backend//frontend/:npx tsc --noEmitat minimum; there's no automated test suite yet for either (that's an open issue itself) — if your change is hard to verify by hand, a smoke test is welcome.
- Open a PR describing what changed and, for anything touching the contracts or backend's Soroban integration, how you verified it (unit test, or a testnet call with the tx hash).
- No comments explaining what code does — only why, when it's non-obvious (a workaround, a constraint, a footgun). The existing code is a good reference for the level of comment density expected.
- Don't add abstractions or config options for hypothetical future needs. If a placeholder needs replacing, replace it — don't wrap it in a feature flag.
- If you're touching a Soroban contract, prefer extending its existing test
file over adding a new one; see
contracts/*/src/test.rsfor the style (deploy in asetup()helper, one behavior per test, explicit "no mock_all_auths" tests where auth-gating is the thing being proven).
Two known gaps — encryption (placeholder AES/base64) and auth (placeholder header, no signature verification) — are already tracked as issues, not secret. If you find a new security issue, please don't open a public issue for it; reach out to a maintainer directly first.