Thanks for your interest in contributing. This document covers how to set up the development environment, the project conventions, and the pull request process.
nullius/
├── circuits/ Circom ZK circuit + trusted setup scripts
├── contracts/ Soroban smart contracts (Rust)
│ ├── groth16_verifier/
│ ├── reputation_registry/
│ └── payment_gate/
├── sdk/ TypeScript client library
├── frontend/ React + Vite web app
└── scripts/ Deployment and testing utilities
| Tool | Version | Notes |
|---|---|---|
| Rust | stable | rustup target add wasm32-unknown-unknown |
| Node.js | ≥ 20 | |
| stellar-cli | latest | cargo install --locked stellar-cli --features opt |
| Circom | 2.x | npm install -g circom |
| snarkjs | latest | npm install -g snarkjs |
git clone https://github.com/your-org/nullius
cd nullius
npm installcargo test --allFor a specific contract:
cargo test -p payment-gate
cargo test -p reputation-registry
cargo test -p groth16-verifiernpm run dev
# Opens http://localhost:5173
# Connect Freighter wallet set to TestnetThe frontend requires compiled circuit artifacts (circuits/build/) and a
sdk/src/contract_ids.json from a deployment. Without them the UI will show
placeholder states — this is expected during development.
Rust
- Format with
cargo fmt - No Clippy warnings:
cargo clippy --all-targets -- -D warnings - All public functions must have doc comments (
///)
TypeScript / React
- Follow the existing ESLint + TypeScript strict config
- Component files use PascalCase; hooks use
useprefix - No
anytypes without a comment explaining why
-
cargo fmt+cargo clippypass with no warnings -
cargo test --allpasses - New contract logic has at least one unit test
- TypeScript compiles with
tsc --noEmit - PR description explains what and why, not just what
If you modify circuits/reputation_score.circom:
- Re-run
npm run circuit:compileandnpm run circuit:setup - Re-run
npm run vk:allto regenerate the Rust VK bytes - Re-run
npm run contracts:buildto rebuild the verifier - Update tests if the public signal layout changed
Please open a GitHub Issue with:
- Steps to reproduce
- Expected vs actual behaviour
- Relevant logs or error messages
By contributing you agree your work will be released under the MIT License.