Provably fair — это возможность проверить результат постфактум, а не верить на слово. Платные мини-игры Gift Club построены на стандартной схеме commit-reveal с HMAC-SHA256, и все данные, нужные для самостоятельного пересчёта раунда, доступны прямо в приложении. Ниже — как это сделать, и, что не менее важно, какая часть Gift Club этой схемой не покрывается.
1. Что на самом деле гарантирует provably fair
Гарантия ровно одна, узкая и ценная: оператор зафиксировал результат до твоей игры и не мог изменить его задним числом.
Механизм — это обязательство. Перед ставкой сервер генерирует секретный серверный сид и публикует его SHA-256-хеш. Хеш ничего не говорит о самом сиде, но фиксирует его: после публикации подменить сид уже нельзя — хеш не сойдётся. Когда сид позже раскрывается, ты хешируешь его сам(а) и убеждаешься, что это тот же сид, который был зафиксирован ещё до твоей ставки.
Чего схема не гарантирует: что игра щедрая, что шансы хорошие или что тебе заплатят. Игра может быть идеально проверяемой и при этом возвращать 40%. Проверяемость и RTP — это разные вопросы, и задавать нужно оба.
2. Три входных значения
Любой результат в платной игре Gift Club — чистая функция от трёх значений. Никакого скрытого четвёртого входа, серверных часов или случайности, добавленной после фиксации.
| Значение | Кто управляет | Подробности |
|---|---|---|
| Серверный сид | Мы | 32 случайных байта от криптографического генератора. Его SHA-256-хеш показывается тебе до игры; сам сид раскрывается при ротации. |
| Клиентский сид | Ты | 1–64 символа: буквы, цифры и дефисы. Задай любой. Именно он мешает нам подобрать удобный серверный сид — для этого пришлось бы заранее знать твой. |
| Nonce | Автоматически | Начинается с 0 и растёт на единицу с каждой ставкой, так что два раунда на одной паре сидов не дадут одинаковых байт. Сбрасывается при ротации любого из сидов. |
Эти три значения идут в HMAC-SHA256 с ключом на серверном сиде и сообщением clientSeed:nonce:round. Счётчик round начинается с 0 и увеличивается на каждые нужные 32 байта — так игра, которой нужно больше (например, раскладка поля из 25 клеток), продолжает черпать из того же обязательства.
Байты превращаются в числа по четыре, как дробь по основанию 256:
float = b[0]/256 + b[1]/256² + b[2]/256³ + b[3]/256⁴Это та же конструкция, которую задокументировал Stake и которую используют большинство проверенных реализаций. Свою схему мы намеренно не изобретали: оригинальную тебе было бы не с чем сверить.
3. Как проверить раунд самому
Сделать это можно двумя способами. Быстрый — прямо в приложении; консольный сниппет ниже для тех, кто не хочет верить на слово даже нашей собственной проверке.
В приложении
Открой любую платную игру, нажми щит рядом с названием и разверни «Проверить раунд». Раскрытый сид, твой клиентский сид и nonce подставятся сами, но все поля остаются редактируемыми — можно проверить любой раунд, а не только тот, что на экране.
Проверка выполняется в твоём браузере. SHA-256 и HMAC-SHA256 считаются локально через Web Crypto API — нам ничего не отправляется, поэтому результат не зависит от нашей честности в момент нажатия кнопки. Если обязательство не сошлось, розыгрыш не показывается вовсе: сид, который не совпал с опубликованным хешем, не описывает никакого раунда.
В консоли
Сначала выполни ротацию сидов — она раскроет серверный сид, который действовал для уже сыгранных раундов. Затем возьми раскрытый серверный сид, свой клиентский сид и nonce нужного раунда и выполни это в любой JavaScript-консоли:
const crypto = require("crypto");
// Из приложения: Профиль → Provably Fair → История сидов
const serverSeed = "<раскрытый серверный сид, hex>";
const clientSeed = "<твой клиентский сид>";
const nonce = 0; // проверяемый раунд
// 1. Убедись, что сид совпадает с хешем, показанным ДО игры.
const commitment = crypto
.createHash("sha256")
.update(Buffer.from(serverSeed, "hex"))
.digest("hex");
console.log("commitment:", commitment); // должен совпасть с опубликованным хешем
// 2. Пересобери байты раунда.
const hmac = crypto
.createHmac("sha256", Buffer.from(serverSeed, "hex"))
.update(`${clientSeed}:${nonce}:0`)
.digest();
// 3. Преврати первые четыре байта в число в диапазоне [0, 1).
const float =
hmac[0] / 256 +
hmac[1] / 65536 +
hmac[2] / 16777216 +
hmac[3] / 4294967296;
console.log("first float:", float);Ключевой — первый шаг. Если вычисленный commitment не совпадает с хешем, который приложение показало до раунда, значит сид подменили, и остальное на этой странице читать незачем. Если совпадает — байты из шага 2 единственные, которые этот раунд мог использовать.
Полная история сидов — каждый выведенный из обращения серверный сид, его хеш и диапазон nonce — доступна по адресу GET /api/games/{gameType}/seed-history и в приложении в разделе Provably Fair.
4. Ротация сидов
Ротация делает две вещи сразу: раскрывает серверный сид, против которого ты играл(а), и фиксирует новый. Nonce сбрасывается в 0.
- Меняй клиентский сид когда угодно. Новый клиентский сид меняет все последующие результаты, а поскольку хеш серверного сида опубликован заранее, подстроиться под твой выбор мы не можем.
- Сначала ротация, потом проверка. Активный серверный сид никогда не раскрывается — иначе любой смог бы вычислить будущие результаты, а именно это схема и обязана предотвращать.
- Ротация не меняет шансы. Она меняет, какие результаты ты получишь, а не насколько они хороши. Совет «крутить сид, пока не выпадет» — это ошибка игрока, а не стратегия.
5. Чего схема не покрывает
Именно этот раздел большинство операторов опускает, поэтому скажем прямо.
Открытие подарочных кейсов, скретч-карты и Колесо призов не являются provably fair. Когда ты открываешь кейс, стираешь карту или крутишь Колесо призов во вкладке «Кейсы», какой приз тебе достанется, определяет другой движок — с динамическими индивидуальными весами, теми самыми модификаторами XP и удачи, о которых мы пишем в разборе механик подарочных игр. Эти веса не входят в обязательство, и восстановить результат кейса, карты или колеса из своих сидов нельзя. Сид у карт и колеса есть, но он только раскладывает сетку или задаёт, где остановится колесо, вокруг уже выбранного приза.
В мини-играх сиды определяют раскладку, а не удачу. Сид задаёт, где стоят мины, куда отскочит шарик в Plinko, какие числа выпадут в Keno — геометрию раунда. В Minefield это буквально и есть вся игра: раскладка клеток и есть результат. В играх, где призовой уровень выбирает отдельный розыгрыш, гарантия уже.
Поэтому точная формулировка такая: раунды платных мини-игр Gift Club проверяемы, открытия кейсов, скретч карты и вращения Колеса призов — нет. Если конкурент заявляет «provably fair» про всё гача-приложение без такой оговорки, это заявление либо значит меньше, чем звучит, либо неправда.
Ещё два ограничения, общие для любой provably fair системы, не только нашей:
- Она не делает игру прибыльной. Проверенный раунд всё равно может быть проигрышным, а преимущество заведения применяется к каждой ставке.
- Она не гарантирует выплату. Проверка доказывает, что результат не подделали. О том, исполнит ли оператор вывод, она не говорит ничего — это отдельный вопрос и оценивать его нужно отдельно.
6. Частые вопросы
Может ли Gift Club увидеть мой клиентский сид до выбора серверного?
Нет, и именно порядок действий это обеспечивает. Серверный сид генерируется, а его хеш публикуется до раунда; твой клиентский сид подмешивается позже. Смена клиентского сида в любой момент обесценивает любые предварительные расчёты.
Почему серверный сид скрыт, пока я играю?
Потому что зная его и твой клиентский сид, любой вычислит все будущие результаты. Раскрытие при ротации — стандартное решение: доказательство ты получаешь, но только для уже завершённых раундов.
Какие игры покрыты?
Каждая платная мини-игра из каталога игр: если игра принимает ставку в звёздах, её раунд можно проверить. В играх только на XP проверять нечего — ставки нет.
Что делать, если проверка не сходится?
Пришли нам серверный сид, клиентский сид и nonce. Расхождение — это либо баг с нашей стороны, либо ошибка во входных данных: чаще всего это nonce (он считается с нуля) или серверный сид, захешированный как текст, а не как hex-байты.
Provably fair — это то же самое, что лицензия или аудит ГСЧ?
Нет. Provably fair — самостоятельная проверка отдельных раундов. Сертификация ГСЧ в лаборатории вроде iTech Labs или BMM Testlabs — независимая проверка всей системы, а лицензия — разрешение регулятора. Это ответы на разные вопросы, и одно не заменяет другое.
Проверь раунд сам(а)
Задай свой клиентский сид, сыграй, сделай ротацию и пересчитай. Всё нужное есть в приложении.
Открыть Gift ClubЗвёзды в приложении нельзя вывести или обменять на деньги. 18+.
Читать дальше
- «Игры в Telegram с RTP 95% и без KYC» — вторая половина вопроса: проверяемая не значит щедрая.
- «Индекс RTP: все 14 игр» — опубликованная отдача по каждой игре.
- Minefield — игра, где раскладка по сиду напрямую и есть результат.
- Gift Club в Telegram — панель Provably Fair находится в профиле.
Источники
- «Provably Fair» — документация движка Stake (реализуемая схема)
- RFC 2104 — HMAC: Keyed-Hashing for Message Authentication
- FIPS 180-4 — Secure Hash Standard (SHA-256)
- «Mini Apps» — аутентификация initData в Telegram
Раунд на искрыПопробуй в Telegram
Открой Gift Club, забери искры и сыграй раунд на искры, прежде чем что-то ставить.
Играть в Gift ClubЗвёзды в приложении нельзя вывести или обменять на деньги. 18+.
Читать дальше

Когда промо в Gift Club поднимает RTP выше 100%
Бонус звёзд поднимает ожидаемый возврат кейса или карты до 102% на 5–15 открытий, а кешбэк понедельника возвращает 10–20% минуса за неделю. Как устроена каждая акция.

Индекс RTP игр Telegram: все 16 игр
Опубликованная отдача всех шестнадцати игр Gift Club: одиннадцать считаются от цели 95%, где ручные таблицы и что раскрывает остальной рынок Telegram.

Игры в Telegram с RTP 95% и без KYC
«Башня мин» работает с RTP 95%, а Gift Club не просит документов, селфи и банковских данных. Почему возможно и то, и другое — и где проходят границы.

Игры плинко: чем версии отличаются
Размер доски, уровень риска и таблица множителей — три параметра, которыми одно плинко отличается от другого. Что делает каждый и как читать таблицу.



