Uczciwe kości, uczciwa gra
Każdy gracz w backgammona, który przegrał przez dublet w ostatnim rzucie, zadał sobie to pytanie: czy te kości są uczciwe? To właściwe pytanie, które warto zadać każdej aplikacji do backgammona. Oto dokładnie, jak generowane są nasze kości, dlaczego nikt, łącznie z nami, nie może nimi manipulować, i jak reszta gry również pozostaje uczciwa.
Sprawdź dowolną zakończoną grę samodzielnie
Słowa są tanie, więc oto ta część, którą możesz uruchomić samodzielnie. Gdy partia się kończy, ujawniamy jej ziarno serwera, zobowiązanie opublikowane przed pierwszym rzutem oraz każde ogniwo, które obie strony opublikowały w trakcie gry. Wklej pakiet ujawnienia poniżej albo odszukaj partię po jej identyfikatorze: ta strona wyprowadza na nowo każdą kostkę z tego zapisu, dokładnie tym samym obliczeniem, które wykonały nasze serwery, i pokazuje rzut po rzucie, czy zapisane wartości się zgadzają. Nic z tego nie wymaga wiary w nasze słowo: rachunek jest jawny i każdy może go powtórzyć. Jedyne, czego ta strona świadomie nie robi, to przyznanie zielonej pieczątki „dowodliwie uczciwe”, bo uczciwie by na nią nie zasłużyła. Nigdy nie widzi wartości, które twoje własne urządzenie zapisało i zamknęło przed pierwszym rzutem, a zapis, w którym cały łańcuch podmieniono na staranną podróbkę, wyprowadza się tutaj równie bezbłędnie. Wyklucza to dopiero porównanie bajt po bajcie z tym, co zapisało twoje urządzenie, a te wartości ma tylko twoja aplikacja. Dlatego uczciwym sufitem tej strony jest „spójne”, a najmocniejszy werdykt daje ekran „Zweryfikuj” w aplikacji.
Kości: dowodliwie uczciwe, rzucane na serwerze
Każdy rzut w zakończonej partii online powstaje na naszych serwerach gry i jest dowodliwie uczciwy, przy czym nie musisz wierzyć nam na słowo. Przed pierwszym rzutem publikujemy zobowiązanie do tajnego ziarna, z którego wyjdą kości, a aplikacje obu graczy zobowiązują się każda do własnego łańcucha; wszystko to zostaje zamrożone w jednym zapisie, zanim ktokolwiek rzuci. Potem każdy rzut zużywa po jednym świeżym ogniwie z łańcucha każdej strony: gracz, którego jest kolej, publikuje swoje na początku tury, przeciwnik zwalnia swoje dopiero wtedy, gdy tamto zostanie zamknięte, a kostka wyprowadzana jest na końcu. Ostatnie nieznane wejście każdej kostki leży więc zawsze po drugiej stronie planszy. Kostki otwarcia nie są wyjątkiem: żadna z nich nie istnieje, dopóki obie strony nie wniosą swojego udziału. Każda kostka jest zatem deterministycznym wynikiem wartości zobowiązanych z góry: nikt, my również, nie może wybrać kostki, podmienić jej na inną ani po cichu przerzucić. To twierdzenie dotyczy wartości rzutu, który już zapadł, i na tym się kończy: to, czy partia zostanie przerwana, czy wiadomość dotrze i komu skończył się czas, leży poza nim. Narzędzie powyżej wyprowadza na nowo każdą kostkę zakończonej gry z opublikowanego zapisu, a ten rachunek może powtórzyć każdy. Czego nie potrafi, to potwierdzić, że zapis to twoja partia: do tego trzeba wartości, które twoje urządzenie zamknęło przed grą, a ma je tylko twoja aplikacja, więc ten ostatni krok wykonuje się na ekranie „Zweryfikuj” w aplikacji.
Równie ważne jest to, gdzie odbywa się rzut. Kości nigdy nie są generowane na twoim urządzeniu, twój telefon jedynie wyświetla rzut, który serwer już wykonał. Ta jedna decyzja projektowa eliminuje całą rodzinę oszustw z kośćmi: zmodyfikowana aplikacja nie przerzuci kości, skok opóźnienia nie zduplikuje rzutu, a żadna sztuczka po stronie klienta nie podejrzy następnej liczby, ponieważ następnej liczby nie ma na twoim telefonie do odczytania: jest wyprowadzana na serwerze, i dopiero gdy obie strony zwolnią swoje ogniwo na tę turę.
A rzuty nigdy nie są korygowane. Nie ma żadnej „krzywej zaangażowania”, żadnej mechaniki powrotu, żadnego wsparcia dla graczy na serii porażek. Generator ani nie wie, ani nie dba o to, kto wygrywa.
Plansza: weryfikowana przy każdym ruchu
Uczciwe kości niewiele by znaczyły, gdyby sama plansza mogła się zmieniać lub zostać naruszona, dlatego gra działa w rygorystycznym modelu autorytetu serwera. Twoje urządzenie nigdy nie mówi serwerowi, jak wygląda plansza, wysyła tylko twój zamiar („przesuń ten pionek z pola 13 na pole 8”). Serwer sprawdza ten ruch według oficjalnych zasad i oficjalnej planszy; niedozwolone ruchy są po prostu odrzucane, niezależnie od tego, co twierdzi zmodyfikowany klient.
Potem następuje podwójne sprawdzenie: przy każdej aktualizacji stanu serwer rozsyła zwięzły odcisk (hash) prawdziwej pozycji na planszy. Twoje urządzenie oblicza ten sam odcisk ze swojej lokalnej planszy i porównuje. Jeśli różni się choćby jeden pionek, klient odrzuca swoją kopię i ponownie synchronizuje się z serwerem. Dzięki temu obaj gracze w każdej chwili w sposób dowodliwy patrzą na tę samą grę, rozsynchronizowania same się leczą w jednym cyklu, i nie ma okna, w którym można by grać na nieaktualnej lub zmanipulowanej planszy.
Przeciwnicy: dobieranie w systemie Glicko-2
Uczciwość dotyczy też tego, z kim grasz. Rankingi korzystają tutaj z Glicko-2, nowoczesnego następcy Elo, który śledzi zarówno twoją siłę gry, jak i pewność systemu co do tej oceny, więc nowi gracze szybko zbliżają się do swojego prawdziwego poziomu, zamiast przez pięćdziesiąt gier być stopniami dla innych. Dobieranie łączy cię z przeciwnikami o zbliżonym rankingu, a wyniki rankingowe wracają do systemu po każdej grze.
Efekt: gdy wygrywasz, przechytrzyłeś równego sobie. Gdy przegrywasz, jest coś realnego do nauczenia się, zwykle w poradnikach strategicznych.
Jak naprawdę odczuwa się uczciwe kości
Oto niewygodna prawda: naprawdę losowe kości sprawiają wrażenie bardziej seryjnych, niż większość ludzi się spodziewa. Prawdziwa losowość daje cztery dublety z rzędu, tańce wejścia na planszę z jednym zajętym punktem i cuda w ostatnim rzucie, dokładnie z częstotliwościami, które przewiduje rachunek prawdopodobieństwa. Rzut o szansie 17/36 chybia dwa razy z rzędu częściej niż w jednej czwartej przypadków. Pamięć zachowuje skandale i odrzuca rutynę, dlatego każdy doświadczony gracz online ma swoją historię o „ustawionych kościach”, a żaden audyt statystyczny nigdy jej tutaj nie potwierdził.
Jeśli chcesz skalibrować swoje instynkty, poradnik podstaw prawdopodobieństwa przedstawia prawdziwe liczby: 36 kombinacji, szanse trafienia na każdym dystansie, szanse wejścia z bandy. Świadomość, że dowolna konkretna liczba pojawia się 11 razy na 36, zamienia „niemożliwego pecha” we „wtorek”.
Chcesz głębszej wersji technicznej, klas generatorów, tego jak działa dowód typu commit-reveal i psychologii „ustawionych” serii? Znajdziesz to na blogu: jak naprawdę działa RNG po stronie serwera.
Nasze zobowiązanie
- Kości generowane na serwerze, dowodliwie uczciwe: nigdy nie są rzucane na urządzeniu, nigdy nie są dopasowywane do gracza ani sytuacji i wyprowadza się je z danych, do których obie strony zobowiązują się przed pierwszym rzutem; po zakończeniu gry każdą kostkę można wyprowadzić na nowo z opublikowanego zapisu, a aplikacja potwierdza, że partia była twoja.
- Egzekwowanie zasad u źródła: każdy ruch weryfikowany przez serwer; zmodyfikowani klienci nic nie zyskują.
- Ciągła weryfikacja planszy: sprawdzana hashem przy każdej aktualizacji, samonaprawiająca się przy każdej niezgodności.
- Dobieranie oparte na umiejętnościach: rankingi Glicko-2 i dobieranie według rankingu.
Uczciwe kości oznaczają, że jedyną przewagą, jaka zostaje przy stole, jest umiejętność, a umiejętności można się nauczyć. Zacznij od zasad, wyostrz je strategią i przetestuj na żywo: stół poniżej jest darmowy, w twojej przeglądarce, bez instalacji.