Provably Fair в CS2
Каждый исход криптографически проверяем. Ни игроки, ни казино не могут подкрутить результат — а ты можешь доказать это сам.
Как это работает
Фиксация
Перед игрой мы генерируем случайный server seed и показываем его SHA-256 hash. Это фиксирует наше обязательство — изменить его уже нельзя.
SHA256(server_seed) → a3f8c1d…Игра
Твой client seed и увеличивающийся nonce вместе с server seed дают результат через HMAC-SHA256.
HMAC(server, client:nonce:0) → resultПроверка
При ротации сидов предыдущий server seed раскрывается. Проверь, что хеш совпадает с исходным commitment, затем воспроизведи исход сам.
✓ Hash matches → outcome is authenticПроверка игр
При каждом открытии кейса HMAC-SHA256 получает случайный float из server seed (ключ) и сообщения .
Float превращается в тикет от 1 до 100 000. У каждого предмета в кейсе свой непрерывный диапазон тикетов — все вместе ровно 100 000. Предмет, в чей диапазон попал твой тикет, и есть результат.
1const crypto = require('crypto');
2
3function verifyCaseRoll(serverSeed, clientSeed, nonce) {
4 const hmac = crypto.createHmac('sha256', serverSeed);
5 hmac.update(`${clientSeed}:${nonce}:0`);
6 const buf = hmac.digest();
7
8 const float =
9 buf[0] / 256 +
10 buf[1] / 65536 +
11 buf[2] / 16777216 +
12 buf[3] / 4294967296;
13
14 const ticket = Math.floor(float * 100000) + 1;
15 return { ticket, float };
16}
17
18// Verify the server seed commitment
19function verifyHash(serverSeed, expectedHash) {
20 const hash = crypto.createHash('sha256')
21 .update(serverSeed).digest('hex');
22 return hash === expectedHash;
23}
24
25// Each case item owns a ticket range.
26// All ranges sum to 100,000.
27// The item whose range contains your ticket wins.
Проверить ролл кейса
Твои seeds
Смотри активную пару сидов, меняй client seed или ротируй, чтобы раскрыть текущий server seed.
История seeds
Прошлые пары сидов с раскрытыми server seed. Используй их, чтобы проверить любую прошлую игру.
About this page
Может ли платформа манипулировать результатами?
Нет. Перед каждым раундом мы публикуем SHA-256 хэш активного server seed. Сам seed остаётся скрытым во время игры, но его хэш фиксируется заранее — если бы мы попытались заменить seed для получения другого результата, новый seed дал бы другой хэш, и это сразу стало бы заметно при проверке после rotation. В сочетании с твоим client seed и per-game nonce это означает, что каждый результат зафиксирован заранее и может быть полностью воспроизведён, без возможности «перегенерации» нежелательного исхода.
Что такое server seed, client seed и nonce?
Server seed — это длинное случайное значение, которое генерируется сервером и остаётся скрытым во время активного использования; публично показывается только его SHA-256 хэш. Client seed — это твоё случайное значение, которое генерируется автоматически или задаётся вручную в настройках. Nonce — это счётчик, который увеличивается на 1 для каждого нового раунда на текущей паре seed. Эти три значения подаются в функцию HMAC-SHA256: одинаковые входные данные всегда дают одинаковый результат, поэтому любой исход можно воспроизвести байт-в-байт.
Зачем нужна ротация seed для проверки?
Для верификации нужен server seed в открытом виде, но раскрывать его во время игры нельзя — иначе можно было бы предсказать будущие результаты. Ротация решает эту проблему: при rotation текущий server seed раскрывается, архивируется для проверки прошлых игр, а на его место создаётся новый seed с новым хэшем. Nonce при этом сбрасывается. После этого ты можешь проверить все прошлые раунды, а новые игры будут использовать уже новый seed.
Можно ли задать свой client seed и нужно ли это делать?
Да. Открой Настройки → Provably Fair (или блок «Твои сиды» на этой странице), введи любой client seed (слово, число или строку) и сохрани изменения. С этого момента все результаты будут смешиваться с твоим seed, исключая возможность предсказания исходов со стороны сервера. Если поле оставить пустым, система сгенерирует случайный надёжный seed автоматически. Оба варианта являются provably fair, а ручной seed нужен в основном для дополнительного контроля и удобства аудита.
Как выполнить rotation seed?
Перейди в Настройках → Provably Fair (или в блок «Твои сиды» на этой странице) и нажми «Ротация сидов». При этом текущий server seed сразу раскрывается для проверки прошлых раундов, создаётся новый server seed с опубликованным хэшем и применяется твой client seed (или новый случайный, если он не задан). Nonce сбрасывается в 0. Ограничений по времени нет — ты можешь делать rotation в любой момент, например перед началом новой игровой сессии.
Что такое nonce и почему он важен?
Nonce — это счётчик раундов для текущей пары server seed / client seed. Он увеличивается на 1 с каждым новым игровым результатом и обеспечивает уникальность каждого исхода даже при одинаковых seed. При верификации важно использовать правильный nonce, иначе ты получи другой результат при пересчёте. Именно nonce делает каждую игру независимой внутри одной seed-сессии.
Как реализована честность в Кейс-батлы?
Кейс-батлы используют один общий server seed для всего лобби, но каждому месту нужен независимый результат. Поэтому в расчёте используется комбинация server seed, nonce и user ID игрока. Это обеспечивает уникальные и независимые результаты для каждого места, при этом всё остаётся детерминированным и проверяемым. После завершения баттла server seed раскрывается, и любой spin можно воспроизвести через verifier.
Как проверить результаты roulette, mines, blackjack или case?
Открой верификатор на этой странице и выбери нужную игру. Понадобится раскрытый server seed (после ротации), твой client seed на момент раунда и nonce, а также доп. параметры: число мин для Mines, ID кейса для кейсов или user ID для битв. Верификатор полностью воспроизводит результат. Если он не совпадает с игрой — сохрани данные и напиши в поддержку.
Что если я потеряю client seed или не сохраню nonce?
Все активные seed-пары и история nonce хранятся в вашем аккаунте и доступны в Настройках → Provably Fair, а также в истории игр (кейсы, mines, баттлы и т.д.). Даже если ты сделали rotation без сохранения значений, предыдущие seed остаются доступными в архиве, поэтому ты всегда можешь проверить любые прошлые раунды.
Является ли provably fair тем же, что и регуляторный аудит?
Нет. Provably fair гарантирует, что каждый отдельный раунд был заранее зафиксирован через криптографический seed, но не заменяет регуляторные аудиты, проверку RTP или юридическое соответствие юрисдикциям. CSRAGE использует provably fair как базовый слой честности и может дополнять его внутренними контролями и внешними проверками, где это требуется. Эти понятия дополняют друг друга, но не являются взаимозаменяемыми.
Можно ли написать свой verifier вместо нашего?
Да. Алгоритмы для всех игр документированы и используют стандартные криптографические функции (SHA-256 и HMAC-SHA256), которые доступны в любом языке программирования. Ты можешь реализовать свой verifier на Python, Go, Rust или другом языке. Независимые реализации полезны для проверки системы — если твой результат отличается от нашего, сохрани входные данные и свяжитесь с поддержкой для сравнения.
Меняются ли шансы, если играть дольше?
Нет. Каждый раунд зависит только от текущей пары seed и nonce этого раунда. История игр, размер баланса, серия выигрышей или проигрышей никак не влияют на RNG. Долгие сессии лишь уменьшают дисперсию, создавая более сглаженные результаты, но математическая вероятность каждого исхода остаётся неизменной. Любой отдельный раунд можно воспроизвести независимо от остальных.
