Зачем SpyDota показывает хеш до игры
Provably Fair — система проверки, которую SpyDota применяет к кейсам и апгрейду. Проверка работает и для Dota 2, и для CS2. Смысл в том, что результат каждой игры можно пересчитать самому и сравнить с тем, что показал сайт.
До начала игры SpyDota показывает хеш SHA-256 серверного сида, из которого потом считается тикет. Хеш виден заранее, а раскрытый сид должен давать ровно тот же хеш. Подменённый сид дал бы другое значение, и подмена вскрылась бы при проверке.
Из чего считается тикет
Тикет — число от 1 до 100 000 000, которое определяет итог игры. Для расчёта нужны серверный сид, сид игрока, вид игры и номер игры в паре сидов.
Хеш игры считается по алгоритму HMAC-SHA256. Ключом служит серверный сид, 64-символьная hex-строка, которая берётся как есть, целиком. Сообщение собирается через двоеточие из вида игры, самой игры, сида игрока и номера игры в паре сидов.
Из полученного хеша берутся первые 8 hex-символов. Символы переводятся в число от 0 до 4 294 967 295, из него получается тикет от 1 до 100 000 000. Если проверяете игру сторонним калькулятором, берите ключ строкой, а не байтами. Перевод hex-строки в байты до расчёта меняет результат и даёт другой тикет. Такая ошибка частая при самостоятельной проверке.
Сид игрока вы задаёте сами, и он участвует в расчёте наравне с серверным. Итог не формирует один сервер, без вашего сида тикет не воспроизвести.
Как тикет превращается в предмет
У кейса есть таблица шансов, и у каждого предмета в ней свой диапазон тикетов — непрерывный участок шкалы от 1 до 100 000 000. Выпадает тот предмет, в чей диапазон попал тикет.
В апгрейде вместо таблицы один порог: шанс умножается на 100 000 000. Апгрейд проходит при тикете до порога включительно, за порогом предмет теряется.
Как проверить свою игру
Серверный сид раскрывается, когда вы меняете пару сидов. После смены любая игра этой пары пересчитывается заново. Сид виден целиком, и хеш из него должен совпасть с тем, что был показан до игр.
Пересчёт делают в разделе «Честная игра» на spydota.com. Расчёт идёт в браузере, на сервер ничего не отправляется. В истории кейсов и апгрейдов есть кнопка «Проверить»: она показывает все величины конкретной игры и её результат.
Если хотите проверить сразу серию игр, меняйте сиды после её окончания. Раскроется сид, на котором шла вся серия, и каждую игру пары можно будет пересчитать по одной схеме.