Arcaeon Receipt Verifier
Paste or drop a receipt JSON file below. Everything runs in this page --
the body digest is recomputed with your browser's own SHA-256, nothing
is uploaded anywhere. This checks what the receipt itself claims; it does
not re-walk the issuer's ledger file (it does not have it) and it does
not run ots verify for you (see the anchor section).
Receipt
.json receipt — or a whole class of them,
up to 20 at once — anywhere on this page
Batch (0 receipts)
Three verdicts, never two. VERIFIED means the seven body fields hash to the digest on the receipt and nothing attached outside the body contradicts it. BROKEN means they do not hash, or an attachment contradicts the receipt (a witness block that disagrees with the ledger block or with its own pin, or an attestation signature made over a different digest). Fields the issuer merely asserts, such as whether a witness is hosted, are shown as claimed in the detail column and are never what earns the VERIFIED. COULD NOT LOOK means this page could not reach a verdict at all — the file would not open, would not parse, or carries a number outside what json-c14n v1 can canonicalize. A receipt this page could not look at is never counted as either of the other two.
As with a single receipt, this page was not given anybody's ledger file,
so the sequence claim on each receipt is out of scope here. To check that
too, run arcaeon-receipt verify --batch <directory>
where the ledger lives.
Body digest
Scope
This receipt proves
This receipt does not prove
Checks
Subject
Ledger
CLAIMED Sequence relative to the issuer's other receipts. This page cannot re-walk the ledger file itself (it was not given one) -- it only shows what the receipt claims about its row. These fields sit outside the body digest.
Witness
Anchor (OpenTimestamps)
Attestation signature
What this page can and cannot canonicalize
Supported, exactly: JSON integers of any size (the literal digit
text is preserved and reproduced byte for byte, matching Python's
arbitrary-precision int) and any finite JSON floating
point number that fits an IEEE-754 double, reformatted to match
Python's repr() exactly (fixed notation for
10-4 ≤ |x| < 1016-ish
magnitudes such as 1.0, 0.5,
-2.25; scientific notation with a zero-padded,
signed exponent outside that range, such as 1e+16 and
1e-07).
Refused loudly, never silently mismatched: a float literal whose
magnitude overflows a double to Infinity (Python's own encoder
refuses these the same way, via allow_nan=False), and
any malformed JSON. A refusal shows up as COULD NOT LOOK with the
reason stated plainly (a single file that will not parse at all
stops at a plain error before any verdict) -- it is never reported
as VERIFIED, and never as BROKEN, which is kept for a digest that
does not match.