Verify this yourself
You don't have to trust us. Every prediction is hash-chained the day it's issued and committed to a public git repository, so any after-the-fact edit breaks the chain visibly. Here's exactly how it works.
The chain
Each prediction's ledgerHash is computed from the previous entry's hash and a canonical serialization of the prediction's immutable issuance fields (id, ticker, issue time, horizon, direction, benchmark, entry price, model version):
ledgerHash = SHA256(prevHash + canonicalJSON(issuance))Grading (the outcome and returns) is stored separately and is never part of the hash โ so a stock split can be re-graded without ever rewriting a hashed record. Change any issuance field after the fact and every hash from that point on stops matching.
Canonical JSON
canonicalJSON serializes with recursively sorted object keys and no whitespace. Re-derive it the same way and your hashes will match ours byte-for-byte.
Verify in one command
Clone the ledger and validate the whole chain locally:
npx @receipts/verify # clones the public ledger, recomputes every hash(CLI ships in Phase 5. Until then the verification logic lives in packages/grader โ verifyChain() โ and runs on this page on every load.)
Current chain state
Entries: 277 ยท Live verification: valid
head: 8daf60af9fc8a4a10bf49e8193e3b7b69300717927cdc8668a17476d4af4f8d5