engineeringfairnessmultiplayer
Serverauktoritet betyder att servern håller den enda kopia av partiet som räknas. Din enhet skickar draget du vill spela, servern prövar det mot sina egna tärningar och sina egna regler, och först då ändras brädet. En modifierad app kan påstå vad som helst: sanningen bor där den inte når.
Backgammon förtjänar den stramheten. Det är ett tärningsspel med en stege och en pott, vilket betyder att det finns två sätt att fuska: förfalska dragen eller böja kasten. En rättvis server måste stänga båda dörrarna. Den andra dörren omfattar oss, och dit kommer vi.
Vad betyder serverauktoritet egentligen?
Varje pågående Orion-match finns på exakt ett ställe: på vår server. Brädet i din telefon är ett fönster, inte partiet. När du drar en bricka flyttar appen den inte. Den skickar ett kort meddelande som säger: det här vill jag spela. Servern spelar upp den avsikten på sitt eget bräde, med sin egen regelmotor, med de tärningar den slog för den turen. Lagliga drag för partiet framåt, och båda spelarna får samma nya ställning. Olagliga drag hände aldrig.
Det är en server för alla. iOS-appen är native SwiftUI, Android-appen är native Jetpack Compose, och båda är fönster mot samma backend och samma spelarpool. Annat glas, samma sanning.
Varför blir spel som litar på klienten lurade?
För att motståndarens enhet tillhör motståndaren. Allt som körs på den kan ändras. En patchad klient kan skicka drag som aldrig var lagliga. En minnesredigerare kan skriva om ett tal på plats, och skärmen visar lögnen troget. Inget av detta är exotiskt. Verktygen är gratis, dokumenterade och äldre än smarttelefoner.
Ett spel som litar på klienten ber varje spelare lova att inte titta under huven. Några kommer att titta. Så vi gjorde klientens åsikt irrelevant. I Orion har appen exakt tre uppgifter:
- Rita: brädet, brickorna, kuben, klockan.
- Be: be servern spela ett drag, erbjuda dubbling, ge upp.
- Ta emot: visa den ställning servern säger är verklig.
Att kasta tärning, bedöma laglighet och flytta så mycket som ett mynt står inte på den listan. Inget som avgör ett utfall uppstår på en enhet.
Vad händer när jag spelar ett drag?
Du spelar.. Din app skickar avsikten: den här brickan, dessa punkter. Inget på din enhet ändrar det riktiga brädet.
Servern spelar upp det.. Vår regelmotor kör draget mot serverns bräde och serverns tärningar. Är det lagligt går partiet vidare. Är det inte det avvisas det vid källan, oavsett vilken app som skickade det.
Båda sidor får samma sanning.. Den nya ställningen går ut till båda spelarna. Om din uppkoppling faller håller turklockans återanslutningsfrist din plats, och du kommer tillbaka till brädet som det faktiskt är, inte som din telefon senast mindes det.
Insatser följer samma regel. När en match med insats börjar håller servern båda insatserna i depå. Potten lever i en enda liggare, på servern, och regleras där när partiet tar slut. Ingen klient blir någonsin tillfrågad om hur mycket den tror sig ha vunnit. Mynt och ädelstenar är virtuella, utan värde i verkliga världen och utan uttag, och ändå sköter vi den liggaren som om den rymde något dyrbart, för det gör den: ditt förtroende för ställningen.
Vad hindrar servern själv från att fuska?
Det är rätt fråga, och de flesta spel hoppas att du aldrig ställer den. En server som kastar tärning i hemlighet skulle kunna kasta vänligt för den den favoriserar, och du skulle aldrig se det. Varje kast ser rimligt ut. Så är tärningar.
Så vi tog den makten ifrån oss själva. Innan ett parti börjar genererar servern ett hemligt frö och publicerar ett SHA-256-åtagande på det. Varje kast härleds sedan ur det fröet med HMAC-SHA256, ett i taget, i ordning. När partiet tar slut avslöjar servern fröet. Vem som helst kan kontrollera att fröet stämmer med åtagandet som gjordes före första kastet, och att varje kast i partiet följer ur det. I kryptografisk mening låstes dina tärningar innan någon av spelarna rörde en bricka. Vi skulle inte kunna böja kast tolv utan att bryta löftet vi publicerade vid kast noll.
Du behöver inte ta vårt ord på något av detta. Verifieraren på orion.arthea.ai/verify räknar om hela kedjan i din webbläsare, med Web Crypto, på din maskin, ur partiets offentliga protokoll. Inget konto, ingen installation. Dörren på orion.arthea.ai/go bär länkarna till App Store och Google Play och visar alltid vad som är tillgängligt just nu.