Provably Fair — każdy wynik odtworzysz samodzielnie w przeglądarce
Wyniki gier nie są losowane na ślepo — są obliczane z trzech wartości: Server Seed (nasz, tajny podczas gry), Client Seed (Twój, możesz go zmienić) i Nonce (numer zakładu). Po ujawnieniu Server Seeda możesz odtworzyć każdy zakład niezależnie — kod liczący jest poniżej i działa lokalnie.
block_r = HMAC_SHA256(serverSeed, clientSeed + ":" + nonce + ":" + r) bajty pobierane po 4: float = b0/256 + b1/256² + b2/256³ + b3/256⁴ → [0, 1) uint32 = (b0<<24)|(b1<<16)|(b2<<8)|b3 (big-endian) int(min,max) = rejection sampling → rozkład IDEALNIE jednostajny commitment: serverSeedHash = SHA-256(serverSeed)
HMAC-SHA256 · rejection sampling eliminuje bias modulo · hash zobowiązania: SHA-256 · weryfikacja zawsze możliwa offline
Ten panel nie pyta serwera o wynik — odtwarza go lokalnie przez WebCrypto (HMAC-SHA256). Możesz odłączyć internet po wczytaniu strony i nadal zweryfikować zakład.
1. Zobowiązanie (commitment). Przed grą pokazujemy Ci tylko SHA-256(serverSeed). Nie znając serverSeeda, nie przewidzisz wyniku — ale my też nie możemy go później podmienić, bo hash już został opublikowany.
2. Strumień bajtów. Dla każdego zakładu liczymy HMAC-SHA256(serverSeed, `${clientSeed}:${nonce}:${r}`). Jeśli gra potrzebuje więcej losowości (np. tasowanie talii), zwiększamy r i doklejamy kolejny blok — wszystko deterministycznie odtwarzalne.
3. Liczba z bajtów. Cztery bajty składamy w float z przedziału [0,1) (jak w Stake) lub w uint32. Dla liczby całkowitej z zakresu używamy rejection sampling: odrzucamy „ogon”, który nie dzieli się równo przez zakres. Dzięki temu np. kostka 1–6 jest idealnie jednostajna, bez biasu modulo.
4. Ujawnienie i weryfikacja. Gdy rotujesz seedy, stary serverSeed jest publikowany. Wklejasz go (z clientSeedem i nonce) do weryfikatora powyżej — kod liczy wszystko w Twojej przeglądarce przez WebCrypto i porównuje z hashem oraz deklarowanym wynikiem. Możesz nawet odciąć internet — i tak się policzy.
Wynik to czysta matematyka na serverSeedzie, clientSeedzie i nonce — po opublikowaniu hasha nie da się manipulować rezultatami po złożeniu zakładu.