Czym jest RNG i dlaczego tyle się o nim mówi
RNG (generator liczb losowych) to algorytm produkujący nieprzewidywalne liczby. W Rocket X to RNG określa moment, w którym rakieta się rozbija, i jaki będzie końcowy mnożnik.
Technicznie w komputerach nie ma „prawdziwej” losowości — wszystkie algorytmy są deterministyczne. To, co nazywamy losowym, to w istocie liczby pseudolosowe wyprowadzone z wartości początkowej zwanej ziarnem (seed). Jeśli znasz ziarno i algorytm, wynik staje się w pełni przewidywalny. Dlatego kluczowe pytanie dla kasyna online brzmi: kto generuje ziarno i jak oraz czy da się to kontrolować lub zweryfikować.
Historycznie cała nieufność wobec kasyn online obracała się wokół tego. Jeśli operator w pełni kontroluje ziarno i algorytm, to teoretycznie mógłby dobierać ziarna niekorzystne dla graczy. Udowodnienie lub obalenie tego publicznie było niemożliwe. Provably Fair zostało wymyślone właśnie jako odpowiedź na ten problem.
Przed Provably Fair: klasyczny model „zaufaj audytorowi”
Klasyczne kasyna online działają tak:
- Operator uzyskuje licencję od regulatora: Curaçao Gaming Authority, Malta Gaming Authority, UK Gambling Commission, Kahnawake Gaming Commission i podobnych.
- Regulator wymaga użycia certyfikowanego RNG.
- Certyfikację przeprowadzają niezależne laboratoria: eCOGRA, GLI, iTech Labs, BMM Testlabs.
- Laboratorium otrzymuje dużą próbkę wyników i sprawdza je statystycznie — pod kątem jednorodności rozkładu, braku wzorców i zgodności z deklarowanym RTP.
- Jeśli wszystko się zgadza, wydawany jest certyfikat, który kasyno pokazuje graczom.
1win Gaming jako deweloper Rocket X również przechodzi tę procedurę w wyspecjalizowanych laboratoriach. Działa średnio, ale ten model ma fundamentalną wadę: gracz nie może zweryfikować konkretnej rundy. Tylko laboratorium, tylko statystycznie, tylko po fakcie.
Jeśli w jednej konkretnej rundzie straciłeś duży zakład i podejrzewasz, że coś jest nie tak, jedyna droga zakwestionowania wiedzie przez obsługę samego kasyna, jego regulatora i ewentualnie sądy. W praktyce prawie nikt tego nie robi. Provably Fair zamyka tę lukę: możesz zweryfikować dowolną rundę teraz, w przeglądarce, bez pomocy audytora czy regulatora.
Provably Fair: trzy składniki
Podejście Provably Fair pojawiło się około 2014 roku w kasynach kryptowalutowych (SatoshiDice, Bustabit i podobne), a później stało się standardem branżowym dla gier crash. Używa trzech kluczowych komponentów, z których każdy jest widoczny dla gracza w specjalnej sekcji ustawień.
| Komponent | Kto go generuje | Kiedy gracz go widzi | Do czego służy |
|---|---|---|---|
| server_seed | Serwer kasyna | Hash SHA-256 przed serią rund; samo ziarno później | Podstawa losowości. Dowodzi, że wynik nie został zmanipulowany |
| client_seed | Gracz (lub automatycznie) | W dowolnym momencie w ustawieniach | Gwarantuje, że kasyno nie dobrało server_seed pod klienta |
| nonce | Serwer, automatycznie | Publiczny, rośnie o 1 z każdą rundą | Sprawia, że każda runda w serii jest unikalna, przy tym samym server_seed |
Idea jest prosta. Przed startem serii rund serwer generuje
server_seed (długi losowy ciąg), oblicza jego
hash SHA-256 i publikuje tylko hash.
Samo ziarno pozostaje tajne do końca serii. Ponieważ SHA-256
jest nieodwracalny, nie da się odzyskać ziarna z hasha — ale jest ono utrwalone.
Gracz może ustawić dowolny client_seed ręcznie
(lub przyjąć automatycznie wygenerowany). Po zakończeniu serii rund
serwer ujawnia server_seed. Potem
gracz może:
- Obliczyć SHA-256 ujawnionego
server_seedi porównać z wcześniej opublikowanym hashem — to dowodzi, że ziarno nie zmieniło się w trakcie serii. - Samodzielnie przeliczyć mnożnik każdej rundy z
server_seed,client_seedinonceoraz porównać z tym, co faktycznie pokazano.
Jeśli oba warunki są spełnione, runda jest uczciwa.
Jak hash staje się mnożnikiem
Dokładny wzór zamiany hasha na mnożnik krachu różni się między grami crash. 1win Gaming, jak inni dostawcy, nie publikuje precyzyjnego algorytmu Rocket X — to standardowa praktyka, by utrudnić wykorzystanie ewentualnych błędów implementacji. Ale ogólny szablon gatunku gier crash jest publicznie znany i działa niemal tak samo wszędzie.
Podstawowa logika:
- Weź
HMAC-SHA256(server_seed, client_seed + ":" + nonce)— daje to 64-znakowy ciąg szesnastkowy. - Z jego pierwszej części (zwykle 8 lub 13 znaków szesnastkowych) pobierana jest liczba całkowita.
- Liczba ta jest dzielona przez maksymalną możliwą wartość — dając ułamek między 0 a 1.
- Ułamek zamieniany jest na mnożnik krachu wzorem postaci
(1 / (1 − x)) × (1 − house_edge), który daje rozkład Pareto: większość rund dostaje niskie mnożniki, rzadkie — bardzo wysokie. - Jeśli wynik jest poniżej 1,00, runda liczy się jako natychmiastowy krach (mnożnik 1,00×). Udział takich rund odpowiada przewadze kasyna (około 3%).
Rozkład mnożników nie jest jednorodny, lecz mocno skośny w prawo (rozkład Pareto). To znaczy: większość krachów następuje poniżej 2,00×, mnożniki 10× występują rzadziej niż raz na dziesięć rund, a 100×+ w tysięcznych częściach procenta rund. To nie „nieuczciwość” — to matematyczna konsekwencja wzoru i dokładnie to daje RTP 97%.
Jak samodzielnie zweryfikować rundę
Załóżmy, że rozegrałeś serię rund w Rocket X. Po zakończeniu serii
(lub po zmianie client seed) kasyno ujawnia
server_seed. Masz teraz:
published_hash— hash SHA-256, który widziałeś PRZED seriąserver_seed— ujawnione przez serwer po seriiclient_seed— twój client seednonce— numer konkretnej rundy w seriiactual_multiplier— faktyczny mnożnik tej rundy (z historii)
Minimalny skrypt w Pythonie, który sprawdza oba warunki — że
hash nie został podmieniony i że mnożnik naprawdę został policzony z
ujawnionego ziarna. Zapisz go do pliku verify.py, zamień
wartości na własne i uruchom komendą python3 verify.py:
# verify.py — weryfikacja pojedynczej rundy Provably Fair w Rocket X
import hashlib, hmac, math
# 1. Co otrzymaliśmy od kasyna:
published_hash = "a3f5...e91d" # SHA-256 server_seed, opublikowany przed serią
server_seed = "7b2c...43a8" # ujawnione przez kasyno po serii
client_seed = "my_random_seed"
nonce = 42 # numer rundy w serii
actual_multiplier = 2.47 # z historii rund
# 2. Sprawdzenie #1: kasyno nie podmieniło server_seed
recalculated = hashlib.sha256(server_seed.encode()).hexdigest()
assert recalculated == published_hash, "❌ Hash się nie zgadza — kasyno zmieniło ziarno!"
print("✓ Hash się zgadza: server_seed nie został podmieniony")
# 3. Sprawdzenie #2: przelicz mnożnik
message = f"{client_seed}:{nonce}".encode()
key = server_seed.encode()
h = hmac.new(key, message, hashlib.sha256).hexdigest()
# Weź pierwsze 13 znaków hex (52 bity), zamień na liczbę
x = int(h[:13], 16)
e = 2 ** 52
# Wzór na mnożnik (typowy dla gier crash)
if x == 0:
multiplier = 1.00
else:
multiplier = math.floor((100 * e - x) / (e - x)) / 100
print(f"Przeliczony mnożnik: {multiplier}×")
print(f"Faktyczny mnożnik: {actual_multiplier}×")
Jeśli oba sprawdzenia assert przejdą, a przeliczony mnożnik
zgadza się z faktycznym, runda jest uczciwa. Jeśli coś się nie zgadza,
to poważny powód, by nie grać w tym kasynie i opublikować
rozbieżność.
Dokładny wzór zamiany hasha na mnożnik w Rocket X nie jest publicznie udokumentowany. Powyższy skrypt używa standardowego szablonu gier crash i działa dla większości implementacji gatunku. Jeśli hash się zgadza, ale mnożnik nie, nie musi to oznaczać oszustwa: 1win Gaming może mieć własną stałą obcięcia lub własny wzór konwersji.
Czego Provably Fair nie gwarantuje
Provably Fair to potężna ochrona przed jednym konkretnym rodzajem oszustwa: manipulacją wynikiem konkretnej rundy po fakcie. Ale to nie panaceum. Oto czego ten system nie robi.
Nie zmniejsza przewagi kasyna
RTP pozostaje na poziomie 97%; średnio gracz traci 3% każdego zakładu. Provably Fair gwarantuje uczciwość procesu, a nie opłacalność wyniku. Jeśli rozegrasz tysiąc uczciwie wygenerowanych rund z ujemną wartością oczekiwaną, stracisz pieniądze. Zupełnie jak w uczciwej loterii z RTP 50%.
Nie chroni przed dobraniem „złego” server seed
Technicznie przed serią kasyno mogłoby wygenerować tysiąc
kandydujących server_seed, spojrzeć na rozkłady
mnożników, jakie dają, i wybrać najmniej korzystny
dla gracza. Hash będzie z wybranego ziarna — formalnie wszystko jest
„uczciwe”, ale kasyno użyło wiedzy z góry. Ten atak
nazywa się atakiem selekcyjnym.
Obroną przed nim jest ustawienie własnego client_seed
ręcznie. Jeśli client seed ustawia gracz (a nie serwer),
kasyno nie wie z góry, jaki będzie wynikowy mnożnik,
i nie może go „dobrać”.
Nie zastępuje licencji regulatora
Provably Fair rozwiązuje tylko zadanie matematycznej weryfikacji rundy. Wszystkie inne aspekty (wypłaty, ochrona danych, przeciwdziałanie uzależnieniom, KYC, AML) leżą w gestii regulatorów i licencji. Kasyno może mieć Provably Fair i mimo to odmówić wypłaty wygranej pod wymyślonym pretekstem — to różne rzeczy.
Nie czyni gry „mądrzejszą”
To, że można zweryfikować wynik rundy po jej
zakończeniu, w niczym nie pomaga przewidzieć następnej
rundy. Przewidywanie wymaga server_seed,
który ujawniany jest dopiero po serii. Wszelkie „sygnały”,
„prognozy” i „algorytmy” twierdzące, że przewidują
rundy Provably Fair, to oszustwo. Więcej o tym w
„Prawdzie o sygnałach”.