Strona główna · Jak działa RNG

Jak działa RNG i Provably Fair

Graj, ale odpowiedzialnie!

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:

  1. Kasyno uzyskuje licencję od regulatora (Curaçao, Malta Gaming Authority, UK Gambling Commission itp.).
  2. Regulator wymaga od kasyna użycia certyfikowanego RNG.
  3. Certyfikacją zajmują się niezależne laboratoria: eCOGRA, GLI, iTech Labs, BMM Testlabs.
  4. 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.
  5. 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:

  1. Obliczyć SHA-256 ujawnionego server_seed i porównać z hashem opublikowanym wcześniej — to dowodzi, że ziarno nie zostało po drodze zmienione.
  2. Samemu przeliczyć mnożnik każdej rundy z server_seed, client_seed i nonce oraz 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:

  1. Weź HMAC-SHA256(server_seed, client_seed:nonce) — daje to 64-znakowy ciąg szesnastkowy.
  2. Z jego pierwszej części (zwykle 8 lub 13 znaków hex) bierze się liczbę całkowitą.
  3. Liczba ta dzielona jest przez maksymalną możliwą wartość — dając ułamek od 0 do 1.
  4. 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.
  5. 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%).
Najważniejsze o wzorze

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 serii
  • client_seed — twój client seed
  • nonce — numer konkretnej rundy w serii
  • actual_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”.

Najczęstsze pytania o Provably Fair

Licencja regulatora (na przykład Curaçao lub MGA) potwierdza, że kasyno spełniło formalne wymogi: przejrzystość finansową, ochronę danych, umowy z dostawcami gier. Ale regulator sprawdza zgodność z zasadami, a nie matematykę każdej rundy. Provably Fair to techniczny dodatek, który pozwala każdemu graczowi matematycznie zweryfikować konkretny wynik bez zaufania do kasyna czy regulatora. Jest to szczególnie cenne w branży kryptowalut, gdzie zaufanie do operatorów historycznie było niskie.