WhoZNext is an automated milestone and issue escrow release system built on Stellar Soroban. It lets repository maintainers lock a token budget against a GitHub milestone and automatically release micro-payouts to contributors when their issues are closed and merged — no manual reconciliation, no end-of-month delays.
The contract integrates with WaveGuard for maintainer access control. The frontend is a React + TypeScript application connecting to the deployed contract via the Stellar SDK and Freighter wallet.
Each sprint cycle will have a pool of scoped, bounty-tagged issues ready to pick up. Issues are sized for completion within one sprint. All work is merged to main via pull request with a linked issue.
Active targets:
- Frontend wallet edge cases — Freighter connection occasionally fails silently when the extension is locked. Needs detection and a user-facing error with a retry prompt.
- View call fallback —
fetchMilestoneInforeturns a raw error when no pool exists instead of gracefully returningnull. Affects the Overview tab on fresh deployments. - Balance display precision — Stroop-to-token conversion produces trailing zeros for whole-number amounts (e.g.
100.0000000instead of100). - Clawback confirmation state — After a successful clawback, the confirm button remains visible until page refresh.
Planned additions:
- Claim history table — Surface
get_claim_historydata in the frontend as a paginated table showing issue ID, developer address, amount, and timestamp. - Repo hash utility panel — A dedicated UI input that computes and copies the SHA-256 repo hash, so maintainers don't need to calculate it externally before calling
release_issue_bounty. - Pool expiry countdown — A live countdown timer on the Overview tab showing time remaining before the milestone expires and clawback becomes available.
- Multi-pool read mode — Allow the frontend to query any contract address by entering it manually, not just the one set in
.env. - Event log feed — Poll the Soroban RPC for
bounty_releasedandmilestone_pool_createdevents and display them as a live activity feed.
Needed:
- Deployment guide update —
docs/DEPLOYMENT.mdneeds a step-by-step walkthrough for deploying to testnet using the Soroban CLI, including how to fund the deployer account via Friendbot and verify the contract ID. - Frontend setup guide — A
frontend/README.mdcovering environment variable configuration, local dev setup, and how to point the app at a testnet contract. - WaveGuard integration tutorial — A practical walkthrough in
docs/WAVEGUARD_MAINTAINER.mdshowing how to deploy a WaveGuard instance, register a maintainer, and link it to a WhoZNext pool. - Contract method examples — Extend
docs/examples/with working CLI invocation examples for all three mutating contract methods.
Coverage gaps:
- Frontend component tests — No tests exist for the React components. Add Vitest + Testing Library unit tests covering form validation, wallet-disconnected state, and error display for each panel.
- RPC helper tests — Unit tests for
stroopsToDisplay,repoHashHex,isExpired, andshortAddressinsrc/lib/contract.ts. - Contract integration: clawback edge cases — Missing integration test for the scenario where a pool is partially claimed and then clawed back, verifying the exact transferred amount.
- CI frontend step — The GitHub Actions workflow does not run
tsc --noEmitorvite buildfor the frontend. Add afrontend-cijob to.github/workflows/ci.yml.
| Label | Typical Effort |
|---|---|
good first issue |
< 2 hours — isolated, self-contained |
bounty:small |
2–4 hours — single file or component |
bounty:medium |
4–8 hours — cross-cutting or new feature |
bounty:large |
8+ hours — architectural, requires design discussion |
- Browse open issues tagged
bounty:*orgood first issue. - Comment on the issue to claim it before starting work.
- Fork the repo, create a branch named
feat/<issue-number>-short-descriptionorfix/<issue-number>-short-description. - Open a draft PR early and link it to the issue.
- Ensure
cargo testandnpm run buildpass before requesting review. - Once merged, the bounty is released on-chain to your Stellar address.