Czym jest RNG i dlaczego tyle się o nim mówi
RNG (generator liczb losowych) to algorytm, który produkuje nieprzewidywalne liczby. W kontekście Lucky Jet i innych gier crash to właśnie RNG wyznacza moment, w którym pilot się „rozbija”, oraz to, jaki będzie końcowy mnożnik rundy.
Czysto technicznie komputery nie mają „prawdziwej” losowości — wszystkie algorytmy są deterministyczne. To, co nazywamy „losowym”, to w istocie liczby pseudolosowe wyprowadzone z pewnego ziarna (seed). Jeśli znasz ziarno i algorytm, wynik staje się przewidywalny. Więc kluczowe pytanie dla kasyna online brzmi: kto generuje ziarno i jak, oraz czy da się to kontrolować lub zweryfikować.
Wokół tego historycznie krążyła nieufność do kasyn online. Jeśli kasyno kontroluje ziarno w całości i jednoosobowo, to w teorii może dobierać ziarna niekorzystne dla graczy. Przez długi czas nie dało się tego publicznie udowodnić ani obalić. Provably Fair wymyślono jako odpowiedź właśnie na ten problem.
Stary model: „zaufaj kasynu i jego audytorowi”
Klasyczne kasyna online działają według tego schematu:
- Kasyno uzyskuje licencję od regulatora (Curaçao, Malta Gaming Authority, UK Gambling Commission itp.).
- Regulator wymaga od kasyna użycia certyfikowanego RNG.
- Certyfikacją zajmują się 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 w porządku, wydawany jest certyfikat, który kasyno pokazuje graczom.
Działa to przeciętnie, ale model ma fundamentalny problem: gracz nie może zweryfikować konkretnej rundy. Może to 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 potencjalnie sąd. W praktyce mało kto to robi.
Provably Fair zamyka tę lukę. Możesz zweryfikować dowolną rundę od razu, 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 zostało ustandaryzowane w całej branży. Używa trzech kluczowych komponentów — wszystkie widoczne dla gracza w specjalnej sekcji ustawień gry.
| Komponent | Kto go generuje | Kiedy gracz go widzi | Do czego służy |
|---|---|---|---|
| server_seed | Serwer kasyna | Hash SHA-256 przed rundą; samo ziarno — po | Podstawa losowości. Dowodzi, że kasyno nie podmieniło wyniku |
| client_seed | Gracz (lub automatycznie) | W dowolnym momencie w ustawieniach | Gwarantuje, że kasyno nie dobrało server seed specjalnie pod klienta |
| nonce | Serwer, automatycznie | Jawnie; rośnie o 1 co rundę | Czyni każdą rundę serii unikalną przy tym samym server_seed |
Idea jest prosta. Przed rozpoczęciem 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 nieodwracalne, nie da się poznać ziarna
z hasha — ale jest ono zablokowane.
Gracz może ustawić dowolny client_seed (własną wartość). Po
zakończeniu serii rund serwer ujawnia server_seed.
Gracz może wtedy od razu:
- Obliczyć SHA-256 ujawnionego
server_seedi porównać z hashem opublikowanym wcześniej — to dowodzi, że ziarno nie zostało po drodze zmienione. - Samemu przeliczyć mnożnik każdej rundy z
server_seed,client_seedinonceoraz porównać z tym, co faktycznie pokazano.
Jeśli obie kontrole się zgadzają, runda jest uczciwa.
Jak z hasha powstaje mnożnik
To część techniczna. Jeśli chcesz tylko zrozumieć, że „kasyno nie oszukuje”, możesz przejść dalej do następnej sekcji. Jeśli interesuje cię, jak dokładnie działa matematyka, kontynuujmy.
Konkretny wzór przekształcania hasha w mnożnik krachu różni się między grami i operatorami. Ale ogólny szablon jest niemal identyczny we wszystkich grach crash:
- 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 hex) bierze się liczbę całkowitą.
- Liczba ta dzielona jest przez maksymalną możliwą wartość — dając ułamek od 0 do 1.
- Ułamek przekształcany jest w mnożnik krachu wzorem postaci
(1 / (1 − x)) × (1 − house_edge), co daje rozkład Pareta: 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 silnie skośny w prawo (rozkład Pareta). Oznacza to: większość krachów następuje przed 2,00×, a mnożniki 100×+ zdarzają się w tysięcznych procenta rund. To nie jest „nieuczciwe” — to matematyczna konsekwencja wzoru i to właśnie ona zapewnia RTP 97%.
Jak samemu zweryfikować rundę
Załóżmy, że rozegrałeś serię rund. Po zakończeniu serii (lub po
zmianie client seed — co zwykle automatycznie zamyka serię)
kasyno ujawnia server_seed. Masz pod ręką:
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 (widoczny w historii)
Oto minimalny skrypt w Pythonie, który sprawdza oba warunki. Zapisz go do
pliku o nazwie verify.py, uzupełnij wartości i uruchom
python3 verify.py:
# verify.py — weryfikacja pojedynczej rundy Provably Fair
import hashlib, hmac, math
# 1. Co otrzymaliśmy od kasyna:
published_hash = "a3f5...e91d" # SHA-256 z server_seed, opublikowane 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. Kontrola #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. Kontrola #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 asserty przejdą, a przeliczony mnożnik zgadza się z faktycznym, runda jest uczciwa. Jeśli coś się różni, to poważny powód, by nie grać w tym kasynie i opublikować fakt rozbieżności.
Ważne zastrzeżenie o wzorze: dokładny algorytm przekształcania hasha w mnożnik różni się między grami. Lucky Jet od Gaming Corps nie publikuje swojego wzoru publicznie — można go odtworzyć przez inżynierię wsteczną kodu klienta lub z dokumentacji operatora. Większość gier crash trzyma się szablonu pokazanego wyżej, ale konkretne stałe (długość wycinka hex, wzór przekształcenia, przewaga kasyna) mogą się różnić.
Czego Provably Fair nie gwarantuje
Provably Fair to potężna obrona przed jednym konkretnym rodzajem oszustwa: manipulacją wynikiem rundy po fakcie. Ale nie jest lekiem na wszystko. Oto, czego ten system nie robi.
Nie zmniejsza przewagi kasyna
RTP pozostaje na 97%; średnio gracz traci 3% każdego zakładu. Provably Fair gwarantuje uczciwość procesu, a nie opłacalność wyniku. Jeśli zagrasz tysiąc uczciwie wygenerowanych rund z ujemną wartością oczekiwaną, stracisz pieniądze. Tak samo jak w uczciwej loterii z RTP 50%.
Nie chroni przed wyborem „złego” server seed
Technicznie przed serią kasyno może wygenerować tysiąc kandydujących
wartości server_seed, zobaczyć, jakie rozkłady mnożników
dają, i wybrać najmniej korzystny dla gracza. Hash będzie z wybranego
ziarna — formalnie wszystko jest „uczciwe”, ale w rzeczywistości kasyno użyło
wiedzy z góry. Atak ten nazywa się atakiem selekcyjnym.
Obroną przed tym jest ręczne ustawienie własnego client_seed.
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 jedno zadanie — matematyczną weryfikację rundy. Wszystkie inne aspekty kasyna online (wypłaty, ochrona danych, przeciwdziałanie uzależnieniom, KYC, AML) leżą w domenie regulatorów i licencji. Można mieć Provably Fair i mimo to odmawiać wypłaty wygranych pod naciąganymi pretekstami — to różne rzeczy.
Nie czyni gry „mądrzejszą”
To, że możesz zweryfikować wynik rundy po jej zakończeniu,
w żaden sposób nie pomaga ci przewidzieć następnej rundy. Aby
ją przewidzieć, potrzebowałbyś server_seed, a jest on ujawniany
dopiero po serii. Wszelkie „sygnały”, „prognozy” i „algorytmy”,
które twierdzą, że przewidują rundy Provably Fair, to oszustwo.
Więcej o tym w artykule
„Prawda o sygnałach”.