ZecProof
Testnet

Selective disclosure for Zcash

Prove one payment.
Reveal nothing else.

Zcash lets you be paid privately. That same privacy makes it surprisingly hard to show that one particular invoice was settled — without handing someone the key to your entire wallet. ZecProof mints a receipt for exactly one payment, and anyone can check that receipt against testnet without seeing anything else you have ever received.

Request a payment

Create an invoice and share a QR. The invoice ID rides along in the shielded memo.

New invoice

Pay an invoice

Open a payment request, see exactly what it commits you to, and settle it.

Open a request

Verify a receipt

Check a receipt against testnet. No wallet, no keys, nothing to install.

Verify

Why this is hard

The problem

Receiving money privately on Zcash is easy: every shielded payment is encrypted, so nobody can see who paid you, how much, or when. That is the point of the network.

But the moment you need to prove a particular payment happened — to an auditor, a landlord, a client, or a court — the convenience becomes a trap. The standard approach is to hand over a viewing key, which decrypts your whole account: every invoice you have ever been paid, every balance, every year of history. You wanted to prove one invoice was settled, and you ended up disclosing everything.

ZecProof exists to make that trade-off disappear.

What ZecProof does

The solution

ZecProof practises selective disclosure: it proves that one specific invoice was paid, for one specific amount, with one specific reference — and it reveals nothing else about your wallet.

  • Commit first

    An invoice commits to its own ID, your address and the amount before anyone pays. That commitment is fixed and can't be repointed afterwards.

  • The memo carries the proof

    The payment request carries the invoice ID inside a standard shielded memo, so a payer's own wallet writes it into the transaction.

  • A receipt names one payment

    When the matching payment arrives, ZecProof mints a receipt that names that single transaction — never your balance, never your history.

  • Anyone can re-check it

    A verifier recomputes every check against testnet with no wallet, no keys, and nothing to install.

The full loop

How it works

  1. Request

    Choose an amount and a reference. ZecProof creates an invoice and shows you the exact shielded memo that will be written. It hands you a ZIP-321 QR and URI to share — and the commitment is locked in before a single coin moves.

  2. Pay

    Open the request to see every commitment: the address, the memo, the amount, the hash. Any ordinary wallet on testnet can pay it by pasting the address, the amount and the memo. Nothing is hidden from you before you commit.

  3. Detect and receipt

    The invoice watches for the payment. It matches on the invoice ID and the exact amount. On the first confirmation, ZecProof mints a receipt naming that transaction — exportable as JSON, a share link, or a QR.

  4. Verify

    Paste the receipt into the verifier. It runs five separate checks and reports each one: well-formed, unmodified, the commitment matches, the memo binds this invoice, and the transaction is really on testnet at the height claimed. Nothing is uploaded.

Built against the live network

The gap it bridges

This is not a demo against a fake ledger. ZecProof talks to the real Zcash testnet through a hand-built lightwalletd client. It was written by discovering how the network actually behaves, not by guessing:

  • A real chain check

    The verifier confirms a transaction exists on testnet at the right height, with no viewing key — the transaction ID is public, and only the amounts within it are shielded.

  • Real transport work

    The public testnet node speaks HTTP/2-only gRPC with no CORS headers, and reverses transaction IDs on the wire. ZecProof bridges these so a browser can reach the chain at all.

  • An honest reading of the ecosystem

    Testnet activated the NU7 upgrade days ago. ZecProof documents which wallets can parse those new transactions and which cannot — and never pretends a simulated payment is real.

Time and space

Where this goes next

ZecProof is a foundation, not a finished ceiling. It deliberately starts narrow — testnet only, a single receiving account, transaction-level disclosure — so the privacy guarantee is airtight before the scope widens.

  • Inclusive reading

    Today the payee side stays on the maintainable path the ecosystem supports. As wallet libraries catch up with the new shielded pool, ZecProof can bind receipts to whichever pool a payment lands in.

  • Multi-account disclosure

    The next step is letting a single account prove a payment across several addresses without exposing any of them beyond the one named by the receipt.

  • Standalone verifier

    A receipt should be checkable by anyone, anywhere — a future CLI or unhosted page so verification never depends on this app staying up.

  • Mainnet, when trust is proven

    The whole design is network-agnostic. Once the testnet behaviour is battle-tested, the same receipts, hashes and checks map onto mainnet without reshaping the product.

See the proof for yourself

The app starts in a clearly-labelled demo mode, so the entire loop can be walked in under a minute with no funds and no setup.