Spinvolta

Jak działa uczciwość

Najpierw przypadek. Potem animacja. Weryfikowalnie, gdy to ważne.

1. Każdy wynik pochodzi z kryptograficznego generatora losowego

Spinvolta losuje wyniki za pomocą crypto.getRandomValues() — kryptograficznie bezpiecznego generatora liczb losowych wbudowanego w każdą nowoczesną przeglądarkę i system — tego samego źródła, którego używa się do tworzenia kluczy szyfrujących. Nigdy nie używamy Math.random() do podejmowania decyzji. (Rzeczy czysto dekoracyjne, np. tor lotu konfetti, mogą z niego korzystać.)

2. Bez obciążenia modulo

Losowej liczby 32-bitowej nie zawsze da się równo podzielić np. na 7 opcji: 4 294 967 296 nie jest wielokrotnością 7, więc naiwne liczba % 7 sprawia, że niektóre opcje są odrobinę bardziej prawdopodobne. Spinvolta stosuje próbkowanie z odrzucaniem: jeśli liczba wpadnie w nierówną resztę na górze zakresu, jest odrzucana i losowana ponownie. Dzięki temu każda opcja ma dokładnie taką samą szansę przy dowolnej liczbie opcji.

3. Wagi są dokładne

W trybie z wagami wartości takie jak 1, 2,5 czy 0,125 są zamieniane na liczby całkowite we wspólnej skali i dokładnie sumowane. Jedno jednostajne losowanie z sumy wybiera zwycięzcę, więc opcja z wagą 2 ma dokładnie dwa razy większą szansę niż opcja z wagą 1 — a wielkości pól na kole pokazują dokładnie te szanse.

4. Wielu zwycięzców bez powtórzeń

Wielu zwycięzców, drużyny, losowa kolejność, tasowanie kart i konkursy używają nieobciążonego tasowania Fishera–Yatesa (z tym samym próbkowaniem z odrzucaniem), więc każda możliwa kolejność czy grupa zwycięzców jest równie prawdopodobna.

5. Najpierw wynik, potem animacja

Gdy naciskasz Zakręć, zwycięzca jest ustalany zanim koło ruszy. Następnie solver oblicza ruch — zamach, prędkość, liczbę obrotów, delikatne kołysanie na końcu — który kończy się dokładnie w zwycięskim polu, w losowym miejscu z dala od krawędzi. Mocniejsze pchnięcie, dłuższy obrót czy ręczne zatrzymanie zmieniają tylko wygląd. Nasze testy automatyczne sprawdzają tysiące losowych obrotów, aby animacja zawsze kończyła się na wcześniej wylosowanym wyniku i nigdy nie zsuwała się na sąsiednie pole.

6. Dowodliwie uczciwe losowania w konkursach i pokojach

W konkursach (i każdym losowaniu, w którym liczy się zaufanie) Spinvolta idzie dalej, abyś nie musiał ufać ani nam, ani organizatorowi:

  1. Przed losowaniem przeglądarka zamraża dokładną listę uczestników i ustawienia i publikuje odcisk — skrót SHA-256 listy, ustawień i tajnego ziarna. Nasz serwer zapisuje, kiedy go otrzymał.
  2. Odcisk wskazuje przyszłą rundę źródła losowości drand League of Entropy — publicznej wartości generowanej co 3 sekundy przez niezależne organizacje z całego świata, której nikt nie może przewidzieć ani wybrać.
  3. Gdy ta runda zostanie opublikowana, zwycięzcy są wyliczani z odcisku, wartości źródła i ziarna.
  4. Strona dowodu pokazuje wszystko. Każdy może nacisnąć Zweryfikuj, aby przeliczyć wszystko we własnej przeglądarce, łącznie z kryptograficznym podpisem źródła.

Organizator nie może wybrać zwycięzcy, bo wartość źródła nie istniała, gdy lista została zamrożona. My też nie, bo nigdy nie widzimy ziarna przed ustaleniem odcisku i nie kontrolujemy drand. Jeśli źródło jest niedostępne, losowanie przechodzi na wyraźnie oznaczoną metodę zobowiązania i odsłonięcia.

7. Przetestowane statystycznie

Nasz zestaw testów przy każdej zmianie wykonuje testy zgodności chi-kwadrat na setkach tysięcy symulowanych losowań, a w pełnym zestawie na ponad milionie: losowania jednostajne, z wagami, tasowania i pozycje przy wielu zwycięzcach. Własną wersję możesz uruchomić na stronie testu uczciwości.

Czego nie możemy udowodnić

Przy codziennym obrocie ufasz, że kod działający w twojej przeglądarce to ten, który opisujemy. Działa w całości na twoim urządzeniu i możesz go sprawdzić narzędziami deweloperskimi przeglądarki. Gdy stawka jest wyższa — nagrody, publiczne losowania — użyj dowodliwie uczciwego losowania, które nie wymaga ufania nikomu.

Najczęstsze pytania

Czy koło można ustawić?

Nie przez animację: wynik jest najpierw uczciwie losowany, a ruch jest obliczany tak, by go pokazać. Jedynym sposobem zmiany szans jest tryb z wagami, który pokazuje oznaczenie „Koło z wagami” i rysuje pola w odpowiedniej skali.

Dlaczego to samo imię wypadło dwa razy z rzędu?

Bo prawdziwa losowość ma serie. Przy 10 opcjach ta sama wypada dwa razy z rzędu w 10% przypadków. Użyj trybu eliminacji, jeśli każda opcja ma wypaść tylko raz.

Czym jest drand?

drand to rozproszone źródło losowości prowadzone przez League of Entropy — grupę niezależnych uczelni, firm i organizacji. Co kilka sekund publikuje nową, weryfikowalną wartość losową.