Check a real presentation yourself
This page verifies a presentation in your browser. The proof is checked by the code a verifier runs — the same proof core, compiled to WebAssembly — and every other condition follows the verifier's acceptance rule, in its order and with its reason codes. Nothing is sent anywhere: the page loads its own files, the check runs on this device, and no data leaves it.
Loading the check…
What is checked
A verifier issued a challenge, valid for 10 seconds, asking for:
A holder answered it with a zero-knowledge presentation: one proof of all of these, bound to that challenge, which reveals none of the credential's values. The page has the challenge, the presentation, the issuer's public definition with the status root that anchors it, the height that state is proven at, and the verifier's clock for each case.
The presentation is synthetic: a test issuer and a test holder, no person behind it, of the kind the public testnet's KYC sandbox issues. It carries no weight.
The page runs it three times: as presented, then twice failing on purpose. Each condition of the verifier's acceptance rule shows PASS or FAIL, or says it cannot be checked here.
What this does not check
- The chain itself. A live verifier reads the issuer's status root, the issuer's state and its own registration from the chain, proven against the chain's own headers, immediately before it decides. Here that read is replaced by the root and height the fixture states as proven.
- That the verifier, its exact origin and its request key are registered and active (conditions 1 and 2), and that the issuer is active: those are chain reads.
- That the challenge's nonce is unused, and its consumption once the presentation is accepted (conditions 3 and 9): that store is the verifier's own.
- A real person. The fixture is synthetic; nothing about anyone is in it.
An accepted presentation proves the conditions above and nothing else; each verifier decides on its own service.