Spinvolta

Як працює чесність

Спершу випадок. Потім анімація. Перевірювано, коли це важливо.

1. Кожен результат — з криптографічного генератора

Spinvolta обирає результати за допомогою crypto.getRandomValues() — криптографічно стійкого генератора випадкових чисел, вбудованого в усі сучасні браузери й системи. Те саме джерело використовують для створення ключів шифрування. Ми ніколи не використовуємо Math.random() для ухвалення рішень. (Суто декоративні речі на кшталт польоту конфеті — можна.)

2. Без зміщення за модулем

Випадкове 32-бітне число не завжди ділиться порівну, скажімо, на 7 варіантів: 4 294 967 296 не кратне 7, тому наївне число % 7 робить деякі варіанти трохи ймовірнішими. Spinvolta використовує вибірку з відхиленням: якщо число потрапляє в нерівну остачу у верхній частині діапазону, його відкидають і обирають знову. У підсумку шанс кожного варіанта рівно однаковий за будь-якої їх кількості.

3. Ваги — точні

У режимі з вагами значення на кшталт 1, 2,5 чи 0,125 переводять у цілі числа на спільній шкалі й точно додають. Одна рівномірна вибірка за сумою обирає переможця, тож варіант із вагою 2 рівно вдвічі ймовірніший за варіант із вагою 1 — і розміри секторів показують саме ці шанси.

4. Кілька переможців без повторів

Кілька переможців, команди, випадковий порядок, тасування карт і розіграші використовують незміщене тасування Фішера — Єйтса (з тією самою вибіркою з відхиленням), тому будь-який порядок чи група переможців рівноймовірні.

5. Спершу результат, потім анімація

Коли ви натискаєте «Крутити», переможця визначають до того, як колесо рушить. Потім розв’язувач розраховує рух — розгін, швидкість, кількість обертів, м’яке погойдування наприкінці, — який закінчується точно всередині виграшного сектора, у випадковій точці далеко від країв. Сильний поштовх, довге обертання чи ручна зупинка змінюють лише вигляд. Наші автотести перевіряють тисячі випадкових обертів, щоб анімація завжди зупинялася на заздалегідь обраному результаті й ніколи не з’їжджала на сусіда.

6. Доказово чесні розіграші й кімнати

У розіграшах (і скрізь, де важлива довіра) Spinvolta йде далі, щоб вам не доводилося вірити ні нам, ні організатору:

  1. Перед розіграшем браузер фіксує точний список учасників і налаштування й публікує відбиток — хеш SHA-256 списку, налаштувань і секретного зерна. Наш сервер записує час отримання.
  2. Відбиток вказує майбутній раунд джерела випадковості drand League of Entropy — публічного значення, яке кожні 3 секунди випускають незалежні організації з усього світу і яке ніхто не може передбачити чи обрати.
  3. Коли цей раунд опубліковано, переможців обчислюють із відбитка, значення джерела й зерна.
  4. Сторінка доказу показує все. Будь-хто може натиснути Перевірити й перерахувати все у своєму браузері, включно з криптографічним підписом джерела.

Організатор не може обрати переможця, бо значення джерела ще не існувало, коли список фіксували. Ми теж не можемо: ми не бачимо зерно до фіксації відбитка й не керуємо drand. Якщо джерело недоступне, розіграш переходить на явно позначену схему «зобов’язання й розкриття».

7. Перевірено статистикою

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

Чого ми не можемо довести

Під час звичайного обертання ви довіряєте тому, що код у вашому браузері — той самий, що ми описуємо. Він працює повністю на вашому пристрої, і його можна вивчити інструментами розробника. Коли ставки вищі — призи, публічні розіграші, — використовуйте доказово чесний розіграш, який не вимагає нікому довіряти.

Часті запитання

Чи можна підкрутити колесо?

Не через анімацію: результат спершу чесно обирають, а рух розраховують, щоб його показати. Шанси змінюються лише в режимі з вагами — тоді колесо позначене «Колесо з вагами», а сектори намальовано в масштабі.

Чому одне й те саме ім’я випало двічі поспіль?

Бо справжня випадковість має серії. За 10 варіантів один і той самий випадає двічі поспіль у 10% випадків. Увімкніть режим вибування, якщо кожен варіант має випасти один раз.

Що таке drand?

drand — розподілене джерело випадковості, яке підтримує League of Entropy — об’єднання незалежних університетів, компаній і організацій. Воно публікує нове перевірюване випадкове значення кожні кілька секунд.