Anatomy of a signed receipt
Every claim Attest makes reduces to objects like this one. Pick
any of the 447 real receipts the demo deployment issued — the annotations are
per-field, the chain links are real prev_hash edges, and the
verify → button runs the receipt through the same browser
verifier the packs use. Nothing here is a mockup.
receipt
| field | value | what it does / what it never does |
|---|
What the signature actually covers
The Ed25519 signature signs only the payload's SHA-256. The payload is canonicalized first — sorted keys, no whitespace, each literal's exact spelling preserved — which is why two implementations produce the same bytes to sign. Below is the canonical payload of the receipt above, rebuilt in your browser from the served file's raw bytes — and the hash recomputed live:
Payload fields mirror the envelope deliberately: the signature
binds the payload; the envelope columns must agree, and any divergence is an
integrity failure, not a reinterpretation. The journal_head field
inside some payloads pins the mutation journal's tip at issuance — a
truncated tail is caught too.
Elsewhere: landing · two-minute tour · all 447 receipts as the chain · adversarial corpus · the verifier