CSRAGE

Provably Fair у CS2

Кожен результат криптографічно перевіряється. Ні гравці, ні заклад не можуть підкрутити результат — а ти можеш довести це сам.

Як це працює

1

Фіксація

Перед грою ми генеруємо випадковий server seed і показуємо його SHA-256 hash. Це фіксує наше зобов’язання — змінити його вже неможливо.

SHA256(server_seed) → a3f8c1d…
2

Гра

Твій client seed і зростаючий nonce разом із server seed дають результат через HMAC-SHA256.

HMAC(server, client:nonce:0) → result
3

Перевірка

Під час ротації сідів попередній server seed розкривається. Перевір, що хеш збігається з початковим commitment, потім відтвори результат сам.

✓ Hash matches → outcome is authentic

Перевірка ігор

При кожному відкритті кейса HMAC-SHA256 отримує випадковий float із server seed (ключ) і повідомлення .

Float перетворюється на тікет від 1 до 100 000. У кожного предмета в кейсі свій безперервний діапазон тікетів — усі разом рівно 100 000. Предмет, у чий діапазон потрапив твій тікет, і є результатом.

verify-case.js
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 hash активного server seed. Сам seed таємний під час гри, але hash фіксований — якщо ми підмінимо seed для іншого результату, новий seed дасть інший hash, і ти помітите це при ротації. Разом із твоїм client seed і nonce раунду кожен roll зафіксований заздалегідь і відтворюваний після факту — сервер не може «переграти» результат, який йому не подобається.

Що таке server seed, client seed і nonce?

Server seed — довге випадкове значення бекенду, таємне під час використання; публічно показується лише SHA-256 hash. Client seed — твоє випадкове значення: згенероване за замовчуванням або обране у Налаштуваннях. Nonce — лічильник, що збільшується на один для кожної гри на активній парі seed. Разом вони живлять HMAC-SHA256: однакові входи завжди дають однаковий результат, будь-який spin відтворюється байт-у-байт.

Навіщо ротувати seed для перевірки?

Перевірка потребує server seed у відкритому вигляді, але розкриття під час гри дозволило б передбачати наступні результати. Ротація вирішує це: при rotate поточний server seed виводиться з експлуатації й показується тобі, новий (з новим hash) фіксується для майбутніх ігор, nonce скидається. З цього моменту можна перевірити всі ігри на старому seed, а наступні зафіксовані під новим.

Чи можу я задати власний client seed і чи варто?

Так. Відкрий Налаштування → Provably Fair (або «Твої сиди» на цій сторінці), введи будь-який client seed — слово, число, що завгодно — і натисни Rotate. Далі кожен результат змішується з твоїм seed, і будинок не міг передбачити його заздалегідь. Поле порожнє — згенеруємо сильний випадковий. Обидва варіанти provably fair; власний seed дає спокій і зручнішу історію для аудиту друзям.

Як ротувати seed?

Налаштування → Provably Fair (або панель «Твої сиди») → «Ротація сидів». Ротація одразу розкриває поточний server seed для перевірки всіх минулих ігор на ньому, генерує новий server seed і публікує hash, застосовує обраний client seed (або новий випадковий, якщо порожньо) і скидає nonce до нуля. Cooldown немає — ротуйте скільки завгодно, зокрема перед сесією для чистого аудиту.

Що таке nonce і чому це важливо?

Nonce — лічильник на гру, +1 за кожен раунд на поточній парі server-seed/client-seed. Він робить послідовні ігри унікальними при тій самій парі — кожен nonce дає інший HMAC і інший результат. При перевірці потрібен точний nonce раунду, інакше verifier відтворить інший (хибний) результат.

Чим чесність у Кейс-батли відрізняється?

Кейс-батли ділять один зафіксований server seed на всі місця в лобі, але кожному місцю потрібен незалежний roll на спільному кейсі. Без окремого client seed на місце вхід HMAC змішує спільний server seed, nonce раунду та user ID гравця. Roll кожного місця унікальні й перевірювані; спільний server seed розкривається після батлу — будь-хто може відтворити будь-який spin.

Як перевірити раунд roulette, Mines, blackjack або кейса?

Відкрий verifier на цій сторінці й обери гру. Кожному verifier потрібні розкритий server seed (спочатку rotate, якщо треба), client seed на момент раунду та nonce раунду — плюс вхід гри: кількість мін для Mines, case ID для кейсів, user ID місця для Battles. Verifier відтворює точний результат сервера. Якщо він відрізняється від екрана — збережи seed і негайно зверніться в підтримку.

Що, якщо я втратив client seed або не зберіг nonce?

Активна пара seed і nonce кожного розрахованого раунду зберігаються в акаунті — їх можна взяти у Налаштуваннях → Provably Fair і в ігровій історії (відкриття кейсів, руки, Mines тощо). Якщо ротували seed без запису — попередня пара архівується й видима, щоб перевірити будь-який її раунд у будь-який час.

Чи provably fair те саме, що аудит регулятора?

Ні, і це важливо. Provably fair гарантує, що кожен раунд згенерований із входів, які сервер зафіксував заздалегідь — будинок не може обрати результат постфактум. Сам по собі це не сертифікує довгострокову перевага дому кожної гри, цілісність виплат чи відповідність юрисдикції. CSRAGE поєднує provably fair із внутрішнім контролем і, де потрібно, перевіркою третьою стороною — але це доповнюючі речі, не взаємозамінні.

Чи можу написати власний verifier замість нашого?

Так. Точний алгоритм кожної гри описаний на цій сторінці простим JavaScript. Криптопримітиви (SHA-256 для hash зобов’язання, HMAC-SHA256 для draw раунду) — стандартні бібліотеки в будь-якій мові; можна портувати на Python, Go, Rust тощо. Незалежні verifier корисні спільноті: якщо твій скрипт розійдеться з екраном — збережи входи й напишіть нам для порівняння референсних реалізацій.

Чи більша кількість ігор змінює шанси на мою користь чи проти?

Ні. Результат раунду залежить лише від пари seed і nonce цього раунду; історія, рівень, серія виграшів і баланс не входять у RNG. Довгі сесії відчуваються інакше, бо дисперсія згладжується на багатьох раундах, а не тому, що ймовірності змінилися. Verifier доводить: відтворіть один раунд ізольовано — результат не залежить від нічого поза входами цього раунду.