mirror of
https://github.com/PR0M3TH3AN/Private-Proof-Of-Reserve-Cli.git
synced 2026-10-27 08:50:29 +00:00
5.5 KiB
5.5 KiB
Project Roadmap
This document outlines the current status of the Private Proof-of-Reserve CLI prototype and the recommended next steps.
Overall assessment
| Aspect | What’s strong already | Gaps / caveats | Priority fixes |
|---|---|---|---|
| Privacy | • Pedersen commitments hide individual UTXO values. • Bulletproof reveals only total – min ≥ 0.• Merkle root hides which UTXOs are included. |
• Still leaks count of UTXOs. • Proof JSON exposes the commitment list. |
• Consider batching commitments (e.g., hash-to-point of all UTXOs) to hide count. |
| Security / key handling | • PSBT round-trip keeps seeds on the hardware device. • Works for single-sig and (with spec) multisig. • No private data shown in CLI logs. |
• Ownership-proof step not implemented yet. • Snapshot is current UTXO set—no guarantee it matches the declared height. |
High: implement ownership-proof verification and snapshot-at-height. |
| Reproducible builds | • Cargo.lock committed again → deterministic CI.• Clean .gitignore. |
— | — |
| Extensibility | • CLI sub-command design is clean; easy to add build-psbt, attach-sigs.• Proof JSON is versioned. |
• Versioning/upgrade path not encoded yet (add "proof_format": 1). |
Medium. |
| Usability | • Works headless (cargo run) or with QR hardware.• Detailed README planned. |
• Animated QR in terminal may be slow on some shells. • Need progress bars for large UTXO sets. |
Low/Med. |
| Performance | • Pure Rust; no FFI headaches. • Commitment & Merkle root linear in UTXO count. |
• Range-proof verification still TODO (Bulletproofs verify cost ~O(n log n)).• For thousands of UTXOs, QR frames explode. |
Consider commitment aggregation. |
| Compliance / auditability | • Clear separation of cryptographic steps makes audit easier. | • Bulletproof gadget not audited; same for Merkle inclusion logic. | Engage external audit once code stabilizes. |
Where we are right now
| Area | Status | Notes |
|---|---|---|
| Compiles & unit-tests | ✅ | All code builds with --locked; the three sanity-tests pass. |
| CLI UX | ✅ | generate, verify, build-psbt, attach-sigs all run end-to-end (with a local Core node). |
| Pedersen & Bulletproof plumbing | ✅ (prototype) | Commitments + range-proof verify correctly. |
| UTXO gathering | ⚠️ | Uses listunspent → current UTXO set, not a historical snapshot at height. |
| Ownership proof | ⛔ | Currently just records the raw signature bytes; no validation logic. |
| Merkle inclusion | ⛔ | No membership paths; verifier re-hashes the full commitment list (trusts prover). |
| PSBT flow | ✅ (MVP) | Draft PSBT is built, QR chunking works, signatures merged back. |
| Security / audit trail | ⚠️ | No domain-separation tags in transcripts, no zeroization of secrets, no formal review. |
| Dependencies | ⚠️ | Bulletproofs 4.x, curve25519-dalek-ng 4.1: both a year behind upstream. |
| Test coverage | 🟡 | Only 3 unit tests; no property tests, no integration tests. |
| Docs / README | ✅ | High-level README, dev-setup instructions, and build badges present. |
Should we keep going with this architecture?
Yes. Offline signing via PSBT leverages a mature ecosystem, and Pedersen commitments plus Bulletproofs follow well-tested cryptographic designs. The remaining features for multisig, descriptor wallets and snapshot-at-height do not require an architectural overhaul.
Recommended next steps
| Priority | Task | Why it matters |
|---|---|---|
| 1 | Historical snapshot – replace listunspent with a deterministic view at block_height (e.g. gettxoutsetinfo → assumeUTXO or a pruned node halted at that height). |
Prevents a prover from “cheating” by spending after the snapshot. |
| 1 | Ownership gadget – decide on a signature-verification strategy (Schnorr in-circuit vs. OP_RETURN PSBT anchor) and implement verification logic. | Without it you only prove that someone had those UTXOs. |
| 1 | Inclusion proofs – emit Merkle branches, switch verifier to path-checking. | Makes the proof self-contained; verifier no longer has to trust the entire list. |
| 2 | Upgrade deps – Bulletproofs 5.0, dalek 4.1.4 (or switch to upstream non-ng). |
Brings in subtle 3.0 API and fixes small-scalar bugs. |
| 2 | Transcript domain separation – give each proof type its own label (b"por-range", etc.). |
Standard best practice to avoid cross-protocol attacks. |
| 2 | Zeroize secrets – wipe blinding factors & PSBT bytes after use (zeroize crate). |
Limits key-material leakage. |
| 3 | Property / fuzz tests – proptest that any random set of UTXOs passes round-trip. | Hardens code against edge cases. |
| 3 | CI matrix – run GitHub Actions on stable, beta, nightly; include cargo audit. |
Keeps supply-chain and MSRV healthy. |
| 3 | Multisig support – treat each PSBT input’s redeem script, gather all sigs, update ownership gadget. | Lets treasuries prove reserves without revealing co-signers. |
When these land the project should be a viable MVP for exchanges or treasury desks to trial on testnet.