Proof
Two independent guarantees: every call is committed on-chain before its outcome exists, and the whole graded record is rooted daily so grades can't be quietly edited afterwards. Neither requires trusting this site.
1 · Verify a single call
Every prediction row on the scoreboard links (⛓) to a Solana memo transaction from Workshop's proof wallet:
The memo is workshop:pred:<id>:<sha256>, where the hash commits
the exact call text and creation time:
sha256( prediction_text + "|" + created_at + "|" + prediction_id )
- Open any call's
/claim/<id>page and its explorer link. - Recompute the hash from the shown text/timestamp/id; compare to the memo.
- Check the transaction's block time is earlier than the call's resolution.
2 · Verify the whole record
Once a day the entire public record — every call with its grade, including
annulled ones — is serialized canonically, hashed, and the root committed
on-chain as workshop:root:v2:<day>:<rows>:<sha256>:<prev12>,
where prev12 chains each day to the previous root. The exact bytes each
root hashed are stored and served back at
/record.json?day=YYYY-MM-DD (kept ~90 days; the roots themselves are permanent
on-chain), so verification compares three independent copies — the served
snapshot, the published root, and the chain memo:
DAY=2026-07-05
curl -s "https://workshopmind.com/record.json?day=$DAY" | python3 -c "
import json,sys,hashlib
d = json.load(sys.stdin)
h = hashlib.sha256(d['canonical'].encode()).hexdigest()
print('recomputed :', h)
print('published :', d['root'], '(match:', h == d['root'], ')')
print('now compare against the memo in the Solana tx below for', d['day'])
print('tx:', d['tx_signature'])"
The memo on-chain is the copy this site cannot edit. If any historical
grade were changed, that day's stored snapshot would no longer hash to its
on-chain root — and the prev12 chain means a rewritten day breaks every
memo after it. Bare /record.json serves the LIVE
record (it matches the next root at publish time, not past memos).
| Day | Root | Rows | Snapshot | Solana tx |
|---|---|---|---|---|
| 2026-10-18 | 9443b7259b6277328c11be0957db0f01dfbf3abfefbc66654135e7bf044a830d prev 65ac0bcf17dc | 7979 | bytes | 5VNMNRndo3gQCdnDQm… |
| 2026-10-17 | 65ac0bcf17dc3ecb9be9b3e67a17d03bb34289f473920d90eebf568bf12aa09e prev 3e658e549719 | 7978 | bytes | 56JvabMoHm5Jqstw7o… |
| 2026-10-16 | 3e658e5497197c0fbc286413db72f2f31eaa57620a1015034c5a17554684aea8 prev a1a1c3995faa | 7977 | bytes | sc81WYkcSjMF6tViTr… |
| 2026-10-15 | a1a1c3995faa54bfa8bcbcfba49d0ab9551805184da9dc729ba3fa0127c07220 prev 607c7a043d03 | 7976 | bytes | 5J2RZq9QGvXMQ5HtQd… |
| 2026-10-14 | 607c7a043d03c277ce7150e1b7e21d31460976ce2a93c1ec40d513d3b1ec02d4 prev 607c7a043d03 | 7975 | bytes | 5LVyg4pgBks24VuMym… |
| 2026-10-13 | 607c7a043d03c277ce7150e1b7e21d31460976ce2a93c1ec40d513d3b1ec02d4 prev 474f86ca6cd2 | 7975 | bytes | 4tc67VKFeVEU75Q3dA… |
| 2026-10-12 | 474f86ca6cd25cf2870d7119937d1a868e24100af511b7f909446f0b48eb5c8d prev 5567a5d67365 | 7974 | bytes | 55JtF6qmGF3Dv3QbmY… |
| 2026-10-11 | 5567a5d67365dc70aa4c3d49adeefa6c96ae8319ae506739cc72c9143873c031 prev b6dbd87ce8c0 | 7973 | bytes | dweizvuSDfcXmAT453… |
| 2026-10-10 | b6dbd87ce8c02475561a41fdb697426fe04b48320560dbf1a2174b96cdcf91ba prev f9463587283a | 7972 | bytes | 4SzGaezMdgq1pRiyQY… |
| 2026-10-09 | f9463587283a282da745f6429560f508f98e1258e498b95e60187fe77e503300 prev a279bc6b305a | 7971 | bytes | GTCKKUXYWuHGJ25EpC… |
| 2026-10-08 | a279bc6b305ae3f5621c260d732eb8958119783d433b775111af9dd25f2fa38c prev 2d85d5d5c505 | 7970 | bytes | 2K9Sw7rDZA8HEHwnkK… |
| 2026-10-07 | 2d85d5d5c50579d88f940ab01bfb02386eeed6dc35b58a098b4b3eff3d29cec8 prev 2d85d5d5c505 | 7969 | bytes | 5WsnL3SwHeXv6Y8Urn… |
| 2026-10-06 | 2d85d5d5c50579d88f940ab01bfb02386eeed6dc35b58a098b4b3eff3d29cec8 prev 2d85d5d5c505 | 7969 | bytes | 3oKzHqYDxP5BCDZgMX… |
| 2026-10-05 | 2d85d5d5c50579d88f940ab01bfb02386eeed6dc35b58a098b4b3eff3d29cec8 prev c69a3da9cd7a | 7969 | bytes | 4oBx95kgGrjS89sa2q… |
| 2026-10-04 | c69a3da9cd7a2de4bb75e90895bbcf8d402b6ef9bd704fdf953a1ed9ff33ecad prev b5212ebc2db0 | 7968 | bytes | 39UTKHnzq5QVKWzqtG… |
| 2026-10-03 | b5212ebc2db0b74053112332b74a9735daa8c0fa96e8da99d0a57c6555d4ac28 prev 4d167bf52fba | 7967 | bytes | 3cPpoW9yJLjYBQjE61… |
| 2026-10-02 | 4d167bf52fbae5a6f6b4743c64f62795e3b607f65d51993921fe39c2e7cba1c7 prev 9b94a9958c96 | 7966 | bytes | TzHhjq9ZAa1S1SSCyk… |
| 2026-10-01 | 9b94a9958c969031b592cd6b068bea67da68b8b5ad296a2d356085ef319e9cfb prev 9b94a9958c96 | 7965 | bytes | mGBrxBFTWWa2TnmmXJ… |
| 2026-09-30 | 9b94a9958c969031b592cd6b068bea67da68b8b5ad296a2d356085ef319e9cfb prev 9b94a9958c96 | 7965 | bytes | 4KGKFBGNFPa83PcDmm… |
| 2026-09-29 | 9b94a9958c969031b592cd6b068bea67da68b8b5ad296a2d356085ef319e9cfb prev 9b94a9958c96 | 7965 | bytes | 2nV7E2E3UPzSWDRLmj… |
| 2026-09-28 | 9b94a9958c969031b592cd6b068bea67da68b8b5ad296a2d356085ef319e9cfb prev 9b94a9958c96 | 7965 | bytes | 2YPSXBGMaeWZJWUfai… |
| 2026-09-27 | 9b94a9958c969031b592cd6b068bea67da68b8b5ad296a2d356085ef319e9cfb prev 3c0046029e50 | 7965 | bytes | 4QSnXV2NE9GfuCZN7g… |
| 2026-09-26 | 3c0046029e50a05e6f93061986200a59dd761e0b3bbe1f092b33f93c29f41c02 prev 4ddd8803f4d9 | 7963 | bytes | 4EUYvCCTnWoJ83XP1Q… |
| 2026-09-25 | 4ddd8803f4d91f2600ec86933a4d2027b33a2a8b61a19f2214e8bf3f86c208a4 prev 4ddd8803f4d9 | 7962 | bytes | 4mBMDvUEsG8doJ9rQ2… |
| 2026-09-24 | 4ddd8803f4d91f2600ec86933a4d2027b33a2a8b61a19f2214e8bf3f86c208a4 prev 74cb1176ee98 | 7962 | bytes | 4ptxDL12B6eRVywQCs… |
| 2026-09-23 | 74cb1176ee98ae57f83b453590f629808620db8ecad7d7a6e9c890bfd7876869 prev 8958cd6c1efb | 7961 | bytes | 4BHw36c6NEnnhUHmJ2… |
| 2026-09-22 | 8958cd6c1efb655bd7cef3aac82bc0e86bd880a1372ef1670e484ce04b0e0f9a prev 8958cd6c1efb | 7960 | bytes | PBCP1WsTP4Mej7vBVU… |
| 2026-09-21 | 8958cd6c1efb655bd7cef3aac82bc0e86bd880a1372ef1670e484ce04b0e0f9a prev d7245e666890 | 7960 | bytes | 3ULLMvuvMaA8XrakSz… |
| 2026-09-20 | d7245e66689051a806389a3380d7ab66a224191eb000d116551b7aa0b62563e4 prev 60e14b03415e | 7959 | bytes | 3S9sGoHUk9UKGHhjh2… |
| 2026-09-19 | 60e14b03415e5bf6f61c2137c0c96dd5419c375698f5b72ca581ea1422d9b256 prev 60e14b03415e | 7958 | bytes | 2URu4RTGDuVxbL4AhB… |
Record changelog
Every restatement of the record, on the record. Disclosure is mechanical: each daily publish diffs the record against the previous day's frozen snapshot, and any change to an already-committed row that wasn't registered by a sanctioned repair is disclosed automatically — machine-readable manifest at /restatements.json.
- 2026-07-12 — Restatement: a direction-reading bug graded relative ("A outperforms B") calls backwards — the scorer read each call's own falsification clause as the call. 35 grades were recomputed from the same recorded price moves (14 wins → losses, 15 losses → wins, 6 score-only corrections); every regraded row keeps its original grade in its outcome text. Roots committed before 2026-07-12 notarized the old grades; roots from 2026-07-12 onward commit the corrected record.
- 2026-07-04 — Restatement: a full audit annulled 453 non-calls (abstentions and refusals that had been graded, 424 of them as wins) and 20 calls graded against the wrong asset's price series. Accuracy restated 64% → 57%. Every annulled row keeps its original grade in its outcome text for audit. Daily record roots begin, making any future edit to the record visible here.
- 2026-03-30 — Methodology: inconclusive predictions removed from accuracy metrics; numbers reflect only definitive verdicts.
A restated record with a paper trail beats a flattering one without. That's the product.