Public auditor dashboard
Campaign Audit Dashboard
Live escrow health, proof anchors, privacy boundaries, and settlement events for public review.
Issuer Registry
Issuer key ID0096e9…4ddc1c
Issuer public keyGD3ZN2…OBZDEO
Registry statusChecking live status...
Revocation effectBlocks every credential from this issuer
Issuer status is read from the disbursement contract. If a field officer key is revoked, the same Merkle-root campaign can reject credentials issued under that key without exposing beneficiary identities.
Loading on-chain data…
Deployed Contracts
Disbursement contractCARYQO…5D3CZD
Verifier contractCAD7QR…DEJ2KG
What Auditors Can Verify
Escrow balancePublic
Read from the XLM SAC balance held by the disbursement contract.
Claims paidPublic
Stored by the disbursement contract as aggregate claim count.
NullifiersPublic
Prevent replay without exposing the credential secret or Merkle path.
Direct payout walletPublic settlement
Direct cash claims pay the connected claimant wallet on Stellar.
Vendor redemptionsPublic settlement
Approved-vendor voucher claims emit settlement events and pay the vendor wallet.
Beneficiary listPrivate
Only the Merkle root is public; the eligible wallet set stays off-chain.
Credential witnessPrivate
Secret, leaf index, and Merkle path stay in the beneficiary credential/browser.
Controls Covered In Demo
Proof verification
Soroban calls the Groth16 verifier contract before any transfer.
Wallet binding
The public claimant field must match the connected wallet address.
Replay protection
A consumed nullifier blocks cash and voucher reuse.
Expiry enforcement
Expired credentials fail against ledger timestamp.
Issuer controls
Only active issuer key IDs are accepted by the contract.
Vendor controls
Voucher claims can pay only active vendor addresses approved by admin.
Emergency pause
Admin can pause payout execution without changing the public audit state.
Escrow accounting
Remaining capacity is derived from live contract balance and payout size.
Verifier Statuson-chain · full pairing
On-chain checkNative BLS12-381 bls.pairing_check
Verifier contractCAD7QR…DEJ2KG
VK hash (SHA-256)c243d169dcf3…77d4d128
Constraints2576 non-linear (circom 2.1)
ZK Proof Details
Proof systemGroth16 (snarkjs)
Elliptic curveBLS12-381
Circuit languagecircom 2.1
Hash functionPoseidon (BLS12-381 scalar field)
Leaf formulaPoseidon(secret, disburse_id, wallet, expires_at, issuer_key_id)
Nullifier formulaPoseidon(secret, disburse_id, wallet, 1)
Merkle tree depth8 levels · 256 slots
Proof size384 bytes (G1 + G2 + G1 uncompressed)
Public inputs6 (disburse_id, merkle_root, nullifier, wallet, expires_at, issuer)
On-chain verificationNative BLS12-381 pairing_check on Soroban
Proving locationBrowser WASM (witness not sent on-chain)
Proving time~15–30 s (single-thread WASM)
Recent Settlement Eventslast ~2 hours
No recent claim or voucher events in this window.