Start with what CAT can actually prove.
CAT means Court Attestation & Transparency. CAT v1 is a strict, content-addressed receipt for one opted-in JudgeCat case. It lets a verifier determine whether the presented record matches the signed record and whether the signer was trusted for that record at the relevant time.
A valid CAT v1 receipt can show
- The exact case data covered by the receipt.
- The public wallet reference and evidence digest filed.
- The consent scope and validity window recorded.
- Whether the content-derived ID and digest match.
- Whether the issuer and transparency state satisfy the published rules.
It cannot show
- Who the human behind a wallet is.
- That a joke, opinion or allegation is objectively true.
- That a wallet is safe, solvent or creditworthy.
- That goods were delivered or an agreement was performed.
- That a receipt is legally binding in any jurisdiction.
Four layers. One honest answer.
A receipt moves through four conceptual layers. Keeping them separate prevents a polished case card from being mistaken for cryptographic proof, or a working signature from being mistaken for official trust.
- Presentation
Case card
The readable JudgeCat verdict. Its design can change without changing the receipt beneath it.
- Record
Canonical receipt
A closed, versioned JSON object containing the exact public facts and consent scope being filed.
- Proof
Domain-bound signature
A detached signature over the canonical receipt under the CAT receipt-signing domain.
- Trust
Registry plus transparency state
Public history establishes whether the signer was authorised and the exact issuance was committed at the required time.
The signed object is deliberately small.
CAT v1 accepts a closed behavioural-receipt shape. Unknown fields are not silently accepted. A separate proof object transports the signature without rewriting the immutable receipt.
{
"receipt": {
"protocol": { "name": "CAT", "version": "1.0.0" },
"case": { "caseId": "…", "verdict": "…" },
"subject": { "wallet": "…", "network": "solana" },
"evidence": { "digest": "sha256:…" },
"consent": { "scope": ["public_case_receipt"] },
"validity": { "issuedAt": "…", "expiresAt": "…" },
"receiptId": "cat:…"
},
"proof": {
"algorithm": "Ed25519",
"issuerKeyId": "cat-key:…",
"digest": "sha256:…",
"signature": "…"
}
}
| Field | What it fixes | What it must not imply |
|---|---|---|
protocol | Name and semantic schema version. | Compatibility with unknown future versions. |
case | The specific JudgeCat filing and verdict record. | Objective truth or legal judgment. |
subject | A public wallet reference and network. | Human identity or wallet ownership history. |
evidence | A digest that binds the filed evidence record. | That undisclosed data was independently audited. |
consent | The published use scope and restrictions. | Consent for unrelated reuse or scoring. |
validity | Issue time, expiry and optional supersession pointer. | Perpetual validity. |
receiptId | A deterministic identifier derived from the receipt content. | A database sequence or personal identifier. |
Verify the record, then verify the authority.
An independent verifier should follow the public contract in order and stop on failure. It must never replace a precise failure with a reassuring green tick.
- 1
Parse under strict limits
Accept the documented envelope shape only. Reject malformed input, unsupported versions and unknown receipt fields.
- 2
Validate the schema
Check required fields, formats, enumerations and closed-object rules against the exact versioned schema.
- 3
Recreate the canonical receipt
Apply the documented canonical JSON rules so every conforming implementation reaches the same bytes.
- 4
Recompute identifiers
Recreate the content-derived receipt ID and SHA-256 digest, then compare both without substitution.
- 5
Verify the domain-bound signature
Verify the detached Ed25519 proof over the CAT-specific signing message—not a screenshot, rendered card or bare digest.
- 6
Resolve trust and lifecycle
Check the public issuer history, validity window, transparency commitment, withdrawal and supersession state.
- 7
Return the exact result
Display verified, historical, draft, unknown, invalid or another documented state without collapsing them together.
assert schema(envelope.receipt, version = "1.0.0")
canonical = canonicalise(envelope.receipt)
assert deriveReceiptId(canonical without receiptId) == receipt.receiptId
assert sha256(canonical) == proof.digest
assert verifyDomainSignature(canonical, proof)
trust = resolveIssuerHistory(proof.issuerKeyId, receipt.validity)
log = locateExactIssuance(receipt.receiptId, proof.digest)
state = combine(trust, log, expiry, withdrawal, supersession)
return exactState(state)
The reference verifier is available at /cat-protocol#verifyReceipt. Canonicalisation rules and interoperability vectors remain part of the versioned public protocol contract; this handbook does not publish an operator runbook.
“Signature works” is only one check.
CAT exposes distinct states so downstream software can describe what it actually knows. Integrators should preserve these labels and explanations.
verified
Cryptography, current issuer authority, exact log commitment and lifecycle checks all pass.
verified_historical
The receipt remains valid under documented historical key and timing rules.
draft
The structure may be valid, but required signing material is absent. It is not verified.
untrusted_signer
The proof may be cryptographically valid, but the public trust registry does not authorize that signer.
unlogged_receipt
The expected exact issuance commitment is missing from the verified transparency history.
compromised_issuer
The issuer history does not preserve this receipt under the published compromise timing rules.
revoked_issuer
The issuer was revoked at the time relevant to this receipt.
invalid
Schema, identifier, digest, signature or another required check failed.
expired
The receipt passed its filed validity window.
withdrawn
The application records that the opted-in public receipt was withdrawn.
superseded
A later receipt explicitly replaced this version.
Receipts are immutable. Their status can change.
A signed receipt is never rewritten in place. Corrections create a new receipt; public lifecycle information explains what happened to the old one.
- Opt in
The wallet holder is shown the public nature and scope before filing.
- File
Strict receipt fields produce one content-derived identifier.
- Issue
An authorized issuer may attach the domain-bound proof only when production gates are open.
- Verify
Anyone can independently recompute the public checks.
- Withdraw
The application records a withdrawn presentation state; copies already held by others cannot be erased.
- Supersede
A correction creates a new receipt that names the earlier receipt it replaces.
- Expire
The record remains historical, but the verifier stops describing it as currently valid.
Versioning rules for integrators
- Use the schema URL and semantic version declared by the receipt.
- Do not guess how to interpret an unsupported major version.
- Fetch or pin the exact published schema your integration accepts.
- Treat the Authority v2 draft as a different envelope—not an extension of CAT v1.
- Preserve unknown future verification states safely rather than assuming success.
CAT Authority records two wallets approving the same public proposal.
CAT Authority is a separate v2-draft pilot. Wallet A signs a role-bound message for one immutable proposal. Wallet B reviews that same proposal and countersigns under a separate counterparty role. The public docket can then show whether both proofs match the exact filed proposal.
What the pilot records
- Two public wallet addresses.
- One immutable public proposal.
- Two distinct role-bound message signatures.
- Creation, expiry and verification state.
What the pilot does not do
- Create or request a transaction.
- Move, custody or escrow funds.
- Identify either human.
- Compel delivery, payment or performance.
- Arbitrate a disagreement.
Schemas and state are inspectable at stable public paths.
These interfaces form the public integration surface. API responses remain the source of current machine-readable state; this handbook explains how to interpret them.
| Method & path | Purpose | Status |
|---|---|---|
GET /protocol/cat/receipt/v1 | Exact CAT v1 receipt JSON Schema. | Published |
GET /protocol/cat/issuer-registry/v1 | Issuer history and revocation schema. | Published |
GET /protocol/cat/transparency/v1 | Transparency-chain entry schema. | Published |
GET /api/cat-protocol/issuers | Current public registry document and root state. | Live · empty |
GET /api/cat-protocol/transparency | Public application transparency chain and head. | Live |
POST /api/cat-protocol/verify | Stateless verification of a supplied CAT v1 envelope. | Live |
GET /protocol/cat/authority/v2-draft | Experimental Authority proposal schema. | Draft pilot |
GET /protocol/cat/exchange/v0.1-draft | Experimental fee-aware direct-settlement docket schema. | Draft.2 simulator |
POST /api/cat-protocol/exchange/simulate | Runs one generated exact-match or failure scenario, including atomic service-fee evidence. No real transfer or fee. | Live simulator |
const response = await fetch("https://judgecat.app/api/cat-protocol/verify", {
method: "POST",
headers: { "content-type": "application/json" },
body: JSON.stringify({ envelope })
});
const result = await response.json();
if (!response.ok) throw new Error(result.error || "Verification failed");
renderExactState(result.status, result.checks);
Treat public endpoints as rate-limited internet services: validate inputs locally where practical, handle non-success responses, cache only public schemas appropriately and never treat network failure as verification success.
Public receipts require public-eyed consent.
CAT minimises the signed record, but it cannot make public information private. A user should understand exactly what will be published before signing or opting in.
Publish the minimum
Do not place names, addresses, delivery details, private messages, secret material or unnecessary personal data inside public receipt fields.
Scope is not a blank cheque
Use the recorded scope only for its stated purpose. Do not silently repurpose CAT receipts into identity, credit or universal reputation profiles.
Keep signatures in their domain
A CAT receipt proof, Authority proposer proof, counterparty proof, login message and wallet transaction are different actions. Never substitute one for another.
Screenshots are exhibits, not proof
Always verify the exact envelope. A copied image, green badge or shortened summary can be altered or detached from its lifecycle state.
Failure is not validity
If the verifier, trust registry or lifecycle record cannot be reached, display an unavailable state. Do not assume the last convenient answer.
Two keys are not two identities
Bilateral wallet signatures show control of the signing keys at that moment. They do not identify, vet or legally bind the humans behind them.
Some details should remain irrelevant to public verification.
Operator infrastructure, private-key handling, internal abuse controls, deployment layout, private configuration and incident runbooks are intentionally outside this handbook. The public verification contract must stand without relying on those details.
Ship the verifier, not a trust shortcut.
A conforming integration should be conservative: accept only versions it understands, preserve exact states and make the limits visible beside the result.
Public integration checklist
- Pin an accepted schema version and reject unsupported major versions.
- Validate the closed receipt object before computing identifiers or signatures.
- Verify receipt ID, digest and the domain-bound proof independently.
- Resolve issuer authority and exact transparency commitment for the relevant time.
- Check expiry, withdrawal and supersession whenever displaying current status.
- Render the exact documented state; never turn unknown or unavailable into verified.
- Show the subject wallet, consent scope and protocol limits in human-readable form.
- Keep CAT v1 and Authority v2-draft envelopes separate.
- Do not use CAT as identity, credit, custody, escrow or legal-enforceability proof.
Frequently entered into evidence.
Does a CAT receipt prove a wallet belongs to a person?
No. It proves facts about a specific public receipt and, when valid, its issuer state. It does not identify the human controlling the subject wallet.
Can I trust any receipt with a valid Ed25519 signature?
No. A signature can be mathematically valid while the signer is unknown, revoked, compromised or outside its authorized period. CAT checks the complete public trust and lifecycle state.
Is CAT v1 production issuance live?
No. The public issuer registry is currently unsigned and empty. The verifier and schemas are live; official production issuance is off.
Does CAT Authority send a transaction or charge a fee?
No. The current pilot requests role-bound off-chain message signatures only. It creates no transaction, moves no funds and gives JudgeCat no custody.
Can CAT Authority prove an agreement was completed?
No. It can show that two controlling keys signed the same filed proposal. It does not prove identity, delivery, payment, legal enforceability or performance.
Is CAT Exchange available?
The deterministic v0.1 evidence simulator is available. It uses generated wallets and transfers only. Real wallet authorization, payment inspection, dispatch, escrow, refunds and dispute handling are not live.
Does CAT Exchange charge the displayed 0.001 SOL fee?
No. The current simulator files and verifies the fee as a generated signed term but creates no transaction and collects nothing. A future real pilot would disclose the seller amount, service-fee recipient, exact fee and buyer total before either wallet signs.
Why are infrastructure and secret-management details absent?
They are not part of the public verification contract and publishing them would add risk without helping an independent verifier. Public schemas, algorithms, states and interfaces remain documented.