AletheiaVerify the claim, not the document

Verifier flow

Look up an ENS name or a wallet address, read what it has proven, and see each record as one of five honest states. Everything is read live from the subgraph and mainnet ENS on this device. A verifier learns only the answer to the claim — never the holder’s document or the data behind it.

🔒 A record holds a proof result, not a document. Each record carries the issuer, claim type, the one value a nationality claim discloses, a validity date, a per-context nullifier and the wallet — never a date of birth, document number, or the passport itself. Nothing is stored off-chain; there is no server.
mock-dev Phase 1, Sepolia test network. Every record here was signed by a labelled mock issuer that verifies no identity — so verified means a real proof was accepted on-chain, never that a real-world identity was checked. In production a trusted issuer (e.g. DigiLocker or a passport’s ICAO chip signature) would make the same record carry real-world weight.

1 Look up a subject

The holder’s wallet address is the identifier — it’s what their proof is bound to. The holder gets it to copy on their success screen. An ENS name works too, but only if the holder already owns one pointing at that wallet.

This is your policy as the verifier, not a property of the record. A proof submitted an hour ago reads verified under “30 days” but stale under “5 minutes” — a bar checking age might accept a week-old proof, while a bank login might demand one seconds old. Both readings of the same record are correct.

3 Watch a verification appear

Paste a verificationId and the block its transaction was mined in (the holder flow links here with both filled in). While the subgraph is still behind that block, the state is pending; the poll flips it to verified the moment the record is indexed — no reload. A submitted transaction is never shown as verified before its record exists.