Проверка
Как убедиться, что записи не меняли задним числом
Каждая строка файла — один JSON. Хэш SHA-256 считается от канонической записи: ключи по алфавиту, без пробелов и переносов, поле sha256 в расчёт не входит. Поле prev_sha256 равно хэшу предыдущей строки. У первой строки оно пустое.
Если изменить старую строку, её хэш изменится, и следующая строка уже не сошлётся на него. Итог матча пишется отдельной строкой в results.jsonl и ссылается на хэш прогноза. Сам прогноз при этом не переписывается.
picks.jsonl
Строк: 1. Цепочка: сходится
Последний SHA-2566c5bbd4181b2b5463bf4ebbeef4464a9375c1006d3816aa4ddccc074fe8587bd
predictions.jsonl
Строк: 20. Цепочка: сходится
Последний SHA-256ab2cb0114456e7626dc5d08b55a0bb95e64e76d1583c7463f7186758444ff45c
results.jsonl
Файла на сайте ещё нет.
Пересчёт одной строки на Python — тот же приём, что в коде журнала:
import hashlib, json
def canon(d):
body = {k: v for k, v in d.items() if k != "sha256"}
return json.dumps(body, ensure_ascii=False, sort_keys=True, separators=(",", ":"))
line = json.loads(open("predictions.jsonl", encoding="utf-8").readline())
print(hashlib.sha256(canon(line).encode()).hexdigest() == line["sha256"])
Дальше по файлу: prev_sha256 каждой строки равен sha256 предыдущей. Файлы отдаются байт в байт, без пересортировки.