Skip to content
VOUCHVOUCHDocs

Getting started

Quick start

Check a real Zcash testnet proof three ways: in the browser, with the CLI, and on Solana devnet. Then make a proof of your own with the demo ledger. No wallet and no ZEC needed.

On this page

#In the browser

  1. Open the verifier

    Go to /verify. The verifier is the same Rust code as the CLI, compiled to WASM and run in a Web Worker; it checks the proof in your tab and sends it nowhere.

  2. Pick “A real Zcash testnet proof”

    It holds at least 1 TAZ, from a real testnet wallet as of block 4,410,000, valid until 26 January 2027. The six checks run in order and the verdict is Valid, with a note that TAZ has no monetary value.

  3. Read what it reveals

    Under the verdict, the page lists what the proof shows (the claim, the block, the audience, the expiry) and what it does not (the balance, which notes, how many, any address).

  4. Break it

    Try the tampered, forged, expired, revoked and re-addressed presets. Each is refused at the check that catches it, and says why. The dormancy presets show “unmoved since” passing and failing.

#With the CLI

Download pof-verify from the latest release (Linux x86-64, macOS on Apple silicon, Windows; a SHA-256 beside every archive), then fetch the public anchor table, the revocation list and the proof:

Shell
curl -fL https://github.com/SATISH-JALAN/Vouch/releases/latest/download/vouch-linux-x86_64.tar.gz | tar xz
curl -s https://vouch-zcash.vercel.app/api/anchors     > anchors.json
curl -s https://vouch-zcash.vercel.app/api/revocations > revocations.json
curl -sO https://vouch-zcash.vercel.app/proofs/testnet-valid.pof

pof-verify check testnet-valid.pof --audience vouch:testnet-demo \
           --anchors anchors.json --revocations revocations.json
Output
Valid · 1.00000000 TAZ at least · anchor 4410000 (testnet)
NOTE: Zcash testnet. A real proof over real testnet notes, but TAZ has no monetary value: it says nothing about mainnet funds.
  format     pass     POF1 · version 1 · 11,884 bytes · checksum ok
  expiry     pass     Valid until 2027-01-26 19:07 UTC — 107 days left.
  revocation pass     Tag 704960c1… is not on the revocation list (2 revoked).
  audience   pass     blake2b("vouch:testnet-demo") matches the audience field.
  anchor     pass     Block 4,410,000 (testnet): note-commitment root and nullifier-set root both match.
  proof      pass     Halo2 proof and spend-authorisation signature verify for this exact statement.

The exit code is the verdict: 0 valid, 1 invalid, 2 expired, 3 malformed, 4 could not run. Ask as someone else and it is refused before any cryptography runs:

Shell
pof-verify check testnet-valid.pof --audience someone-else --anchors anchors.json
# Invalid · made for a different verifier          (exit 1)

The dormancy proof adds one requirement, the block the notes must be unmoved since:

Shell
curl -sO https://vouch-zcash.vercel.app/proofs/testnet-dormant.pof
pof-verify check testnet-dormant.pof --audience vouch:testnet-demo --anchors anchors.json --dormant-since 4410000
# Valid · 1.00000000 TAZ at least · anchor 4459000 (testnet) · unmoved since block 4410000

#Make a proof without ZEC

The demo ledger is a published, synthetic Ironwood tree with five real notes under a real key: 4,018.2 ZEC. Proofs against it are real proofs; their anchor is labelled demo everywhere. Build a request at /request (or use the one below), then:

Shell
git clone https://github.com/SATISH-JALAN/Vouch && cd Vouch/backend
cargo run --release -p pof-prove -- demo prove --world ../fixtures/demo-world.json \
      --request '<the link from /request>' --out proof.pof
cargo run --release -p pof-verify -- check proof.pof --audience pof-credit:usdc-pool-1 \
      --anchors ../fixtures/anchors.demo.json
# Valid · 500.00000000 ZEC at least · anchor 3491040 (demo)

On a 12-core laptop the demo proof takes about 1.4 s. The same demo holder answers the “Prove as the demo holder” button on /prove when the hosted attestor has CPU to spare.

#On Solana devnet

Open /demo and press Run all. A real proof is checked in your browser, the attestor signs the verdict, pof-gate records a receipt on devnet, and pof-credit opens a 25,000 dUSDC credit line you can draw 1,000 dUSDC from. Every account links to the explorer. The toggles on the left break it on purpose: a flipped proof byte, a flipped attestation byte, an attestor outage.

The hosted attestor runs on a free host that sleeps when idle. The first visit can take up to a minute while it wakes; the page says so and starts live once it answers.

#Next