Skip to content
VOUCHVOUCHDocs

Reference

CLI reference

Three binaries, one per role: pof-prove for holders, pof-verify for anyone checking, pof-anchor for whoever publishes anchors. Each release ships all three.

On this page

#Install

Shell
curl -fL https://github.com/SATISH-JALAN/Vouch/releases/latest/download/vouch-linux-x86_64.tar.gz | tar xz   # or vouch-macos-arm64.tar.gz, vouch-windows-x86_64.zip
# or build from source (Rust 1.91+)
git clone https://github.com/SATISH-JALAN/Vouch && cd Vouch/backend && cargo build --release -p pof-prove -p pof-verify -p pof-anchor

#pof-prove

The holder’s CLI. Keys stay in this process, it links no network client, and nothing is broadcast.

Shell
pof-prove prove --request <encoded> --snapshot <file.vsnp> --seed-file <path> --out proof.pof [options]
OptionMeaning
--requestThe encoded request from a /prove link (the r= value, or the whole link).
--snapshotA snapshot written by pof-anchor scan. Its anchor must be published.
--seed-fileA BIP 39 mnemonic or a hex seed. Read locally; never leaves the process.
--accountZIP 32 account. Default 0.
--networkmainnet or testnet. Default: the snapshot’s.
--bind-solanaBind the proof to a Solana account (base58), for on-chain audiences.
--sinceProve the notes were in the chain at this checkpoint (a multiple of 1,000) and unmoved since.
--batch-size1–5. A reserves batch: every usable note, in proofs of up to N notes. Default 5 for reserves requests.
--exitAn exit certificate (circuit 2) that names the notes. Implied by an exit request.
--intentWith --exit: the deposit or quote id it is for. Default: the request id.
--yesSkip the confirmation prompt.
CommandDoes
pof-prove history [--secrets]Proofs you have made: claim, audience, expiry, status. --secrets also prints revocation secrets.
pof-prove revoke <id> --endpoint <url>Publish a proof’s revocation secret to the list your verifiers check.
pof-prove demo prove --world … --request …Answer a request as the demo holder, against the published demo ledger. Takes the same --since, --batch-size and --exit options.
pof-prove demo init | pool | fixturesMake a demo world, the single-use proof pool for /demo, or every committed test vector.

#pof-verify

The reference verifier. Reads local files only, so it can gate CI or a batch job.

Shell
pof-verify check <file.pof | file.pofb> --audience <id> --anchors anchors.json [options]
pof-verify match --cert certificate.pof --deposit deposit.json
OptionMeaning
--audienceYour verifier identifier. Only its hash is compared with the proof.
--anchorsThe anchor table: a JSON array of {network, height, ncRoot, nfRoot}.
--revocationsThe revocation list: {"secrets": [hex…]} or a bare array.
--nowEvaluate as of this unix time instead of now.
--dormant-sinceRequire the notes to be unmoved since this block or earlier.
--tip-height, --max-anchor-ageTogether: refuse a proof whose spent set is more than N blocks below the tip you know.
--epochRequire the period your request named, so reuse within it is visible.
--seenWith --epoch: your reuse registry, a JSON array of hex tags already accepted.
--jsonPrint the full JSON result (the schema at /schema/pof-v1.json).
Exit codeMeaning
0Valid (match: matched)
1Invalid (match: mismatch)
2Expired
3Malformed
4Could not run: a usage error, an unreadable file, bad JSON

#pof-anchor

Rebuilds and publishes anchors from public chain data, and reads a deposit’s nullifiers for exit matching.

CommandDoes
pof-anchor scan [--network mainnet|testnet] [--to H] [--also-at H,…]Stream every Ironwood action since activation, rebuild both trees, check the tree root, size and block hash against lightwalletd, write the snapshot and merge the anchor into the table. --to defaults to tip − 100, rounded down to 1,000.
pof-anchor tx --txid <hex> [--network …]The Ironwood nullifiers a mined transaction reveals, as JSON: the input to pof-verify match.
pof-anchor check --snapshot <file> [--at H]Re-derive a snapshot’s roots and compare them with lightwalletd.

Every command takes --server to choose the lightwalletd; the defaults are zec.rocks:443 and testnet.zec.rocks:443. The server must report the same chain as --network, so a testnet anchor can never be published as mainnet.