your reputation, verifiable without us
Every role you earn here becomes a claim keyed to the address you proved on chain: the address, the badge, the date, nothing else. The claims are merkleized, the root is published with them, and the math checks out in any browser — including one that has never heard of kascov.
The mainnet anchor — the root written into a Kaspa transaction
— arms next. Until it does, the root is published only in the
claims file this site serves: the file never enters git, so there is
no repo history to fall back on, and “without us” is
still partly aspiration. You can already check the math without us,
but you still trust this site to be serving the root it says it is.
The anchor’s status lives at
/passport-anchor.json;
this box checks it against the claims file in your browser and says
exactly what it finds.
Look up an address
Claims live in /passport-claims.json
and this box renders them in your browser. With JavaScript off, read the
file directly; it is the same data, proofs and root included.
Enter the address you proved and this box shows every claim published for it: the badge, the granted date, the merkle root, and a verify-it-yourself block with the proof. The lookup runs entirely in your browser; the address you type never leaves it.
How a role becomes a claim
- Earn the role. Today that means the verified-holder role (prove an address with a free signature, how it works) and, as the unknowns board opens, the auditor role for pinning a build. Roles are earned, never bought: the token buys status, voice and access, not a verdict and not a badge.
- The role becomes a claim. A claim is three fields:
the proven address, the badge name, the granted date. Voting mints
one too: when a round closes, a participation claim —
voted-round-N, naming the round — lands next to your badges. It never says what you picked, and it exists only for rounds closed after participation claims shipped: earlier rounds deleted their ballots, so there is nothing to mint from. No Discord id, no balance, no history — what the bot stores while a role is live is a separate, fully enumerated list at /bot. - The claims are merkleized. Each claim hashes to a leaf, the leaves build a tree, and the root is published in the same file as the claims. Change one claim and the root changes; that is the whole trick.
- The root gets anchored. A mainnet transaction carrying the root makes the publication itself checkable without this site. The box at the top of this page checks whether that has happened for the root currently served, and says exactly what it finds.
Check the math
The file names its own algorithm in a hash field. This page
knows sha256-v1 and refuses to guess at anything else:
- leaf = SHA-256 of the UTF-8 bytes of the claim object as canonical
JSON — keys recursively sorted, no whitespace, the exact bytes
verifyBadge()hashes in the js and py clients - each step up hashes the two 32-byte nodes concatenated in ascending byte order — sorted pairs, so a proof needs no left/right flags and two verifiers cannot disagree
- the final node must equal the file’s
merkle_root
Every claim this page renders gets a “verify it yourself” block with the claim JSON, its proof and the root, and the browser recomputes the whole path on the spot. If the recomputed root ever disagrees with the published one, the page says that too, in red.
What is live today, and what is not
live today
- the claims file and its published root, at
/passport-claims.json, regenerated when roles change - this page’s in-browser recheck of every proof against that root
- the anchor box at the top, which checks
/passport-anchor.jsonagainst the served root and reports exactly what it finds - the role flow itself: prove an address, earn the role (/bot)
pending, in the open
- the mainnet anchor cadence — the box at the top shows the live status; between anchors the newest root’s publication relies on this site alone
- claim signatures, so a single claim can travel and be checked alone, without the whole file
- the KCC convention review — whether this claim format becomes a shared convention is not kascov’s call alone
A passport claim is a record of something earned, never a verdict about a token or a build. Verdicts on this site come from the chain and only from the chain. If no claims file exists yet, this page says “no claims published yet” and shows nothing — nothing shown is always better than something guessed.
What the bot stores and deletes is enumerated at kascov.io/bot. What holding the token does and does not do is at kascov.io/token.