44 entries · SHA-256 chain · OpenTimestamps
The ledger
One entry per publication day. Each carries the hash of the entry before it, so the whole history is a chain: change any past prediction without rebuilding every later hash and verification fails, visibly, right here.
a7a2e22aa9c27e3ded8b4e39187480a0d14c00bce69d2469cb116f25f10026d1
Verify it yourself
The raw files are served unmodified and the repository is public. Nothing here asks you to take our word for anything.
| Published | Matches | Entry hash | Links to | Generator | Divisions sealed | External time | Raw |
|---|---|---|---|---|---|---|---|
| 2026-10-11 00:08 | 160 | a7a2e22aa9c27e3ded8b… | 417302f61642… | 9140473e72 |
17/23
|
Attestation: block 970851 | 2026-10-11.json |
| 2026-10-10 00:08 | 277 | 417302f61642d73a1fc9… | 68673dd3eef0… | 417b262c1a | 23/23 | Attestation: block 970698 | 2026-10-10.json |
| 2026-10-09 00:13 | 148 | 68673dd3eef09ae51ca4… | e506cf7f712e… |
6b0516d4d9 + local changes |
9/23
|
Attestation: block 970553 | 2026-10-09.json |
| 2026-10-08 00:11 | 96 | e506cf7f712eca663553… | 4b121b74965a… |
624450ac8d + local changes |
8/23
|
Attestation: block 970412 | 2026-10-08.json |
| 2026-10-07 00:09 | 110 | 4b121b74965a07396834… | 67be41b4801e… |
c5e28ee89d + local changes |
9/23
|
Attestation: block 970258 | 2026-10-07.json |
| 2026-10-06 00:11 | 34 | 67be41b4801e667eb034… | 502bce35c7e9… |
a2d71b75d1 + local changes |
2/23
|
Attestation: block 970103 | 2026-10-06.json |
| 2026-10-05 00:08 | 107 | 502bce35c7e95840c491… | 9a7dfc9cec1c… |
1d3e4f6097 + local changes |
10/23
|
Attestation: block 969925 | 2026-10-05.json |
| 2026-10-04 00:08 | 104 | 9a7dfc9cec1cf7b6ea55… | ae095a0ec840… |
208121d0f6 + local changes |
10/23
|
Attestation: block 969782 | 2026-10-04.json |
| 2026-10-03 00:09 | 136 | ae095a0ec840557ee730… | dbebbb3600f1… |
65931aea5f + local changes |
16/23
|
Attestation: block 969650 | 2026-10-03.json |
| 2026-10-02 00:13 | 62 | dbebbb3600f1f27bac8c… | a0f6371b604d… |
fce96c6ee9 + local changes |
9/23
|
Attestation: block 969508 | 2026-10-02.json |
| 2026-10-01 00:11 | 19 | a0f6371b604d9f1fb76f… | 92dddfbcfa00… |
0264380bde + local changes |
7/23
|
Attestation: block 969373 | 2026-10-01.json |
| 2026-09-30 00:09 | 12 | 92dddfbcfa00136650eb… | a4138a737ba1… |
f04a71dbb8 + local changes |
2/23
|
Attestation: block 969230 | 2026-09-30.json |
| 2026-09-29 00:08 | 7 | a4138a737ba1365afe5b… | d9a74bfa6962… |
069e781c3e + local changes |
1/23
|
Attestation: block 969072 | 2026-09-29.json |
| 2026-09-28 00:09 | 3 | d9a74bfa6962a30cab8c… | b2f33ce433c8… |
d8b4970298 + local changes |
2/23
|
Attestation: block 968908 | 2026-09-28.json |
| 2026-09-27 00:08 | 8 | b2f33ce433c8ab119703… | 1ba4cd7ff517… |
1867924751 + local changes |
2/23
|
Attestation: block 968761 | 2026-09-27.json |
| 2026-09-26 00:09 | 38 | 1ba4cd7ff517430f4b48… | 9f36c21cae17… |
39e0cbae28 + local changes |
5/23
|
Attestation: block 968608 | 2026-09-26.json |
| 2026-09-25 00:09 | 2 | 9f36c21cae17f2d59daa… | 36a2ec563a77… |
bb74986ea8 + local changes |
1/23
|
Attestation: block 968473 | 2026-09-25.json |
| 2026-09-24 00:09 | 1 | 36a2ec563a77b10ad06e… | 1927d04e7ff3… | ec19a3ce20 |
1/23
|
Attestation: block 968333 | 2026-09-24.json |
| 2026-09-20 00:10 | 62 | 1927d04e7ff3b854584e… | 68548eb594ef… | ed3908eeed |
16/23
|
Attestation: block 967764 | 2026-09-20.json |
| 2026-09-19 00:09 | 187 | 68548eb594efb0f0af23… | 289eb0a55069… | 0ff77ae735 | 23/23 | Attestation: block 967636 | 2026-09-19.json |
| 2026-09-18 00:09 | 88 | 289eb0a55069b84723c2… | d6b334fc107f… | 1fe41d2df3 |
9/23
|
Attestation: block 967483 | 2026-09-18.json |
| 2026-09-17 00:07 | 90 | d6b334fc107ffcc4ad43… | e66ad23ec6e4… | 44a1f2da40 |
9/11
|
Attestation: block 967340 | 2026-09-17.json |
| 2026-09-16 00:09 | 95 | e66ad23ec6e46e463ecc… | 3f9bc8c40fcd… | 71a070cbfe |
9/11
|
Attestation: block 967207 | 2026-09-16.json |
| 2026-09-15 00:07 | 101 | 3f9bc8c40fcd681182b7… | 3eebb2647895… | ab6fd73326 |
9/11
|
Attestation: block 967041 | 2026-09-15.json |
| 2026-09-14 00:09 | 110 | 3eebb26478958f5abd77… | 648aa01da2b8… | f7fa0c790f |
9/11
|
Attestation: block 966892 | 2026-09-14.json |
| 2026-09-13 00:07 | 138 | 648aa01da2b82ab567d9… | 3e1539b5828d… | f83fbe7427 |
10/11
|
Attestation: block 966741 | 2026-09-13.json |
| 2026-09-12 00:09 | 190 | 3e1539b5828d33ee2417… | b8d6cfa0b1d5… | dcc8847bb7 |
10/11
|
Attestation: block 966582 | 2026-09-12.json |
| 2026-09-11 00:08 | 153 | b8d6cfa0b1d50f5a1bbf… | 437baeadf01e… | fc28783cd4 |
9/11
|
Attestation: block 966424 | 2026-09-11.json |
| 2026-09-10 00:09 | 109 | 437baeadf01e5702fcae… | e843b7575c29… | a8d638b6ad |
9/11
|
Attestation: block 966289 | 2026-09-10.json |
| 2026-09-09 00:08 | 107 | e843b7575c29a5c5329d… | 01cbe9126940… | 8388a4e70a |
9/11
|
Attestation: block 966127 | 2026-09-09.json |
| 2026-09-08 00:08 | 112 | 01cbe912694017d1bb8c… | 8f8bd7c42f1c… | ee809428f6 |
9/11
|
Attestation: block 965994 | 2026-09-08.json |
| 2026-09-07 00:07 | 114 | 8f8bd7c42f1c9b75c32f… | 13f831fcec32… | 14b8f70e4d |
9/11
|
Attestation: block 965856 | 2026-09-07.json |
| 2026-09-06 00:08 | 136 | 13f831fcec32c9aa3ef9… | 6e0f96c17ae5… | f0b93890f7 |
9/11
|
Attestation: block 965690 | 2026-09-06.json |
| 2026-09-05 00:07 | 187 | 6e0f96c17ae5a36883d1… | 71a501159cc8… | 2521b0bbaf | — | Attestation: block 965543 | 2026-09-05.json |
| 2026-09-04 00:07 | 164 | 71a501159cc856b87c5e… | 56ad2c5d64b1… | ac5c3a3ca2 | — | Attestation: block 965400 | 2026-09-04.json |
| 2026-09-03 00:08 | 115 | 56ad2c5d64b1c736dbc0… | 49c8b8dab521… | a2a44a32e5 | — | Attestation: block 965241 | 2026-09-03.json |
| 2026-09-02 00:04 | 113 | 49c8b8dab521198b9026… | 195855857621… | 16e509037e | — | Attestation: block 965103 | 2026-09-02.json |
| 2026-09-01 00:09 | 103 | 1958558576211f510eae… | 28a8a175bbec… | 413f77eba4 | — | Attestation: block 964961 | 2026-09-01.json |
| 2026-08-31 00:08 | 105 | 28a8a175bbec52dbe193… | 886527321f37… | 158c5abbf6 | — | Attestation: block 964808 | 2026-08-31.json |
| 2026-08-30 00:08 | 121 | 886527321f376c721238… | e722d48c32c3… | 77f71b173c | — | Attestation: block 964645 | 2026-08-30.json |
| 2026-08-29 00:11 | 156 | e722d48c32c363c55a58… | 83695200adbc… | 41b4c91057 | — | Attestation: block 964502 | 2026-08-29.json |
| 2026-08-28 00:08 | 145 | 83695200adbcf98e952f… | bb39ec15a61d… | Not recorded | — | Attestation: block 964455 | 2026-08-28.json |
| 2026-08-27 00:09 | 11 | bb39ec15a61d64f223b4… | 80f997ad756c… | Not recorded | — | Chain only | 2026-08-27.json |
| 2026-08-26 12:28 | 10 | 80f997ad756cb3e92eab… | — | Not recorded | — | Chain only | 2026-08-26.json |
What this proves, and what it does not
Each layer below has a deliberately narrow claim, and the narrowness is the point. A proof that is described as stronger than it is does more damage than no proof at all.
Proved
Nothing was altered. Change one probability in a past entry
and its hash stops recomputing; fix that and the next entry's
prev_hash stops matching, and so on to the head. Rebuilding the whole
chain means force-pushing over a public repository.
It existed before a Bitcoin block. Each entry from 28 August carries a detached OpenTimestamps proof, and the block in its row was mined before the first kickoff that entry covers.
Not proved
That nothing was left out. A hash chain proves no entry was
edited. It cannot prove, by itself, that a fixture we priced was published rather
than held back, or that the newest entry is not missing. Two things narrow it:
the coverage block sealed into every entry from
2026-09-06 onward names each division the run was asked for and the reason
any of them returned nothing, and the chain is pushed to a public
repository on every run, so a shortened history is visible to anyone who cloned it
earlier. Neither is a proof, and calling them one would be the sort of claim this
page exists to avoid.
Recomputing the chain
Clone the repository and run one command. It reads every file in
predictions/, recomputes each SHA-256 over the entry with its own
hash field removed, and checks that each entry's prev_hash matches
the one before.
git clone https://github.com/GitSimaao/proofodds cd proofodds python -m proofodds.verify
Or point it at a directory of files downloaded from this site. It ignores anything in there that is not a ledger entry — the build summary at /predictions/_chain.json among them — and reports only on the chain itself.
python proofodds/verify.py /path/to/downloaded/predictions
Recomputing the score
The command above proves nothing here was altered. It says
nothing about whether the number on the scorecard is the
right number for these files, so there is a second command for that half. It reads
the sealed entries, joins them to the raw results, and recomputes the de-vigging, the
log loss and the interval in a separate implementation from the one that publishes
them — then fails if the two disagree. --csv writes one row per
graded match, so the whole scorecard fits in a spreadsheet column.
pip install -r requirements.txt python scripts/rescore.py --refresh --csv audit.csv
Verifying an external timestamp
For any row with a proof, download the JSON and its
matching .ots file into the same directory. Compare the SHA-256 shown by
ots info with the JSON, then use ots verify for full verification
against Bitcoin. That last step requires access to a Bitcoin Core node. A block number
on this page means the matching proof contains that attestation; it does not claim this
web server independently verified the Bitcoin chain.
pip install opentimestamps-client curl -O https://proofodds.com/predictions/YYYY-MM-DD.json curl -o YYYY-MM-DD.json.ots https://proofodds.com/timestamps/YYYY-MM-DD.json.ots sha256sum YYYY-MM-DD.json ots info YYYY-MM-DD.json.ots ots verify YYYY-MM-DD.json.ots