Contributing to Writz
Writz is open source. Contributions — bug reports, code improvements, documentation, and security research — are welcome. This page explains how to contribute effectively.Ways to Contribute
Bug reports: If you find a bug in any of the contracts, circuits, relayer, or bitcoin-script toolkit, open a GitHub issue with a minimal reproduction. Include the test case if possible. Code contributions: See the open issues taggedgood first issue or help wanted on GitHub. All contributions require tests. The CI must pass before merge.
Documentation: Spotted something unclear, incorrect, or missing? Open a PR directly against the docs/ directory.
Security research: See the Bug Bounty page for responsible disclosure guidelines and rewards.
ZK ceremony participation: The Groth16 trusted setup ceremony requires independent participants. If you’re interested in participating, contact us. No technical background required — participants just need to run a script and discard their randomness.
Development Setup
Code Standards
Rust / Soroban Contracts
- Run
cargo fmtandcargo clippybefore committing - Every public function must have a test
- Use
#[contractevent]for all events — no deprecatedEventsAPI - Per-entry persistent storage only — no growing
VecorMapin instance storage - Manage TTL: every write to persistent storage must set TTL thresholds
- No
unwrap()on user inputs — return errors viaResultor panic with descriptive messages
TypeScript (Relayer + Bitcoin Script)
- Run
npm run lintbefore committing - Every function must have a test covering the happy path and at least one error case
- No
anytypes — explicit type annotations required - Use the
Result<T, E>pattern for operations that can fail
Circom Circuits
- Every constraint must be intentional — document why it exists
- All public inputs must be explicitly marked
<== signal (public) - Test proof generation AND proof verification — not just compilation
- Test with both valid and invalid inputs — verify that invalid inputs are rejected
Pull Request Process
- Fork the repository and create a feature branch (
feature/your-feature) - Make your changes with tests
- Run
cargo test(contracts),npm test(relayer, bitcoin-script, circuits) — all must pass - Open a PR with a clear description of what changed and why
- A maintainer will review within 5 business days
Open Items
The following areas are actively looking for contributors:| Area | Description | Skill needed |
|---|---|---|
| Frontend (app.writz.io) | React/Next.js frontend for PrivateLend | React, TypeScript, Stellar Wallets Kit |
| WASM prover integration | Integrate circom WASM prover in browser | TypeScript, snarkjs |
| Phase 2 ceremony tooling | Scripts for Powers of Tau Phase 2 ceremony | snarkjs, cryptography |
| Taproot migration | Upgrade P2WSH to P2TR for Phase 2 | Bitcoin Script, bitcoinjs-lib |
| SDK npm package | writz-sdk TypeScript package for SPV proof assembly | TypeScript, npm |
| Oracle integration | Integrate RedStone + Pyth SEP-40 adapters | Rust, Soroban |