Il quarto input
Ogni spiegazione del gioco provably fair, inclusa la nostra, cita tre input: un server seed a cui il casinò si impegna in anticipo, un client seed che puoi impostare tu stesso, e un nonce che aumenta di uno a ogni scommessa. Li si immette in un hash con chiave e ne esce la casualità del round. Questa descrizione è completa per un lancio di moneta. È incompleta per quasi tutto il resto, perché un hash produce un solo numero e la maggior parte dei giochi ne richiede diversi.
Il quarto input è il cursore. Su questo sito il messaggio che viene hashato non è "client seed-nonce" ma "client seed-nonce-cursore", e il cursore è un contatore all'interno del round: 0 per il primo numero casuale di cui il gioco ha bisogno, 1 per il secondo, e così via. Ogni valore del cursore genera un nuovo digest a 256 bit, non correlato in alcun modo sfruttabile ai suoi vicini, e il motore legge i primi otto byte di ciascun digest come un numero tra 0 e 1.
VERIFICATO DAL MOTORE_shared/demoLocal.ts: uAt(pair, cursor) restituisce u64(HMAC-SHA256(serverSeed, `${clientSeed}-${nonce}-${cursor}`)), descritto come corrispondente a RandomUtils.generateHash("clientSeed-nonce-cursore") del server. _shared/rng.ts: u64 legge i primi otto byte del digest come hi/2^32 + lo/2^64, "la stessa costruzione a singolo arrotondamento" della conversione ULong→Double del server. Il nonce è un unico flusso per coppia di seed su tutti i giochi: ogni scommessa consuma il nonce corrente e memorizza nonce + 1.
Quindi un round non è un solo numero casuale ma una lista numerata di essi, tanto lunga quanto il gioco richiede, e ogni voce della lista è fissata nell'istante stesso in cui la coppia di seed e il nonce sono determinati. Il gioco non estrae man mano che procede. Legge scorrendo una lista che esiste già.
Cosa legge ogni gioco
La parte interessante è che la lista è diversa per ogni gioco, e ogni modulo di derivazione dichiara il proprio schema nella propria intestazione. Ecco il flusso dei cursori di ogni originale che attinge dalla coppia di seed, tratto dal codice sorgente del motore.
| GIOCO | CURSORI LETTI | COSA DIVENTANO |
|---|---|---|
| Limbo | 0 | Un numero attraverso la curva 0.99 ÷ (1 − u) |
| Roulette | 0 | La casella: floor(u × 37) |
| Fukubukuro | 0 | L'oggetto, confrontato con la tabella dei pesi della borsa |
| Sic Bo | 0, 1, 2 | I tre dadi |
| Chinchiro | lato × 9 + tentativo × 3 + dado | Fino a 18: banco poi giocatore, fino a tre lanci di tre dadi ciascuno; un lancio che forma una mano conclude il lato |
| Koban Flip | uno per lancio | Il lancio i legge il cursore i; ogni faccia del giro è fissata quando viene acquistata la prima moneta |
| Omikuji | 0, poi 1–3, poi 4 in avanti | Livello di fortuna; le tre celle vincenti in caso di vittoria; simboli di riempimento per il resto |
| Pagoda | uno per piano | La piastrella trappola su ogni piano: floor(u × piastrelle) |
| Video Poker | 5, più una per ogni carta sostituita | Una sequenza senza reinserimento su 52 carte; tieni tutto e non viene letto alcun ulteriore cursore |
| Casino Hold’em | fino a 9 | giocatore 1, giocatore 2, banco 1, banco 2, flop 1–3, turn, river; il turn e il river vengono letti solo su CALL |
| Blackjack | uno per carta | Mazzo infinito, carta = floor(u × 52), in ordine di distribuzione: giocatore, carta scoperta del banco, giocatore, carta coperta del banco, poi ogni pescata successiva |
| Andar Bahar | 0–4, poi uno per ogni carta in gara | Due bucket potenziati, le loro magnitudini, il jolly, poi la corsa finché il rango si ripete |
| Hanabi | 15 per giro | Cella = rullo × 3 + riga; il giro gratuito j legge da 15 + 15j in poi |
| Bingo | 0–24, poi 25–62 | La cartella, cinque estrazioni per colonna; poi le 38 palline |
Keno e Crash sono le eccezioni: i loro round demo usano una catena hash per biglietto invece della coppia di seed con nonce, descritta più sotto. Mines e Plinko sono regolati dal servizio della casa; le note dell'API di mines specificano che l'intero layout deriva da un solo nonce.
VERIFICATO DAL MOTORECommenti nell'header di bingo/derive.ts (“Cursor stream: 0..24 — la cartella … 25..62 — le 38 palline”), hanabi/engine.ts (“base spin = celle 0..14 … free spin j = celle 15+15j .. 29+15j”), blackjack/derive.ts (“carta i = floor(u × 52) al cursore i … Ordine di distribuzione (cursore): player1, dealer-up, player2, dealer-hole”), vpoker/derive.ts (“le prime cinque sono la mano iniziale, le sostituzioni continuano la stessa sequenza … Mantenendo tutto non viene letto nessun ulteriore cursore”), holdem/derive.ts (“player1, player2, dealer1, dealer2, flop1, flop2, flop3, turn, river. I cursori di turn/river vengono consumati solo su CALL”), andar/derive.ts (cursori 0–4 poi “5.. un cursore per ogni carta in gara”), koban/derive.ts (“il flip i legge il cursore i”), sicbo/derive.ts (“i cursori 0/1/2 sono i tre dadi”), roulette/derive.ts (“il cursore 0 da solo decide la casella: floor(u × 37)”), fuku/derive.ts (“il cursore 0 da solo estrae l'oggetto”), omikuji/derive.ts (cursore 0 livello, 1..3 celle vincenti, 4.. riempitivi); demoLocal.ts rollSide (chinchiro cursore = side*9 + attempt*3 + d), trapAt (pagoda: il numero del piano è il cursore), demoLimboBet (uAt(p, 0)); mines/minesApi.ts (“l'intero layout delle mine deriva da questo unico nonce”).
Tre cose spiccano in quella tabella. Primo, i giochi che distribuiscono carte leggono un cursore per carta in un ordine fisso, motivo per cui una mano di blackjack può essere ripetuta a partire dalla sua lista di azioni: la tua decisione di chiedere carta non crea una carta, ma scopre la successiva in una lista già completa prima della distribuzione. Secondo, diversi giochi smettono di leggere in anticipo. Una mano di video poker in cui tieni tutte e cinque le carte non tocca mai il cursore 5; un fold a Hold'em non legge mai turn o river. I numeri erano lì; il gioco non ne aveva bisogno. Terzo, i due bucket potenziati in Andar Bahar e il livello di fortuna in Omikuji vengono estratti prima delle carte e delle celle, in testa allo stream, così le caratteristiche speciali del round sono fissate dallo stesso commitment di quelle ordinarie.
Estrazione senza reinserimento
Un numero uniforme tra 0 e 1 è facile da trasformare in una casella della roulette: moltiplica per 37 e arrotonda per difetto. Un mazzo di carte è più complesso, perché la seconda carta non deve essere di nuovo la prima. Il motore gestisce questo con quello che i commenti chiamano un pool hop: mantieni una lista delle carte ancora nel pool, usa il numero del cursore per scegliere una posizione al suo interno, e scambia la carta scelta con l'ultima della lista in modo che la prossima estrazione scelga tra una in meno. Video Poker, Casino Hold'em, Andar Bahar e la cartella del Bingo estraggono tutti in questo modo, così nessuna carta o numero si ripete all'interno di un round.
Il Blackjack è l'eccezione deliberata. Il suo mazzo è infinito: ogni carta è floor(u × 52) dal proprio cursore, e la stessa carta può comparire due volte in una mano. Questa è una scelta di design con un costo pubblicato, discussa in l'articolo sui payout del blackjack, ed è esattamente il tipo di cosa che il layout dei cursori ti dice, cosa che una pagina di marketing non farebbe.
VERIFICATO DAL MOTOREvpoker/derive.ts: “Le carte provengono da UNA sequenza senza reinserimento sul mazzo di 52 carte (pool-hop, cursore per estrazione)”. holdem/derive.ts: “UNA sequenza pool-hop senza reinserimento (cursore per estrazione)”. bingo/derive.ts: “cinque estrazioni pool-hop per colonna” e “le 38 palline, pool-hop su 1..75”. blackjack/derive.ts: “Mazzo infinito: carta i = floor(u × 52) al cursore i”.
Le due eccezioni
Keno e Crash non leggono affatto il nonce della coppia di seed nel motore demo. Keno usa uno schema per-ticket: il ticket ottiene il proprio hash casuale e un salt, e ciascuna delle dieci palline viene estratta hashando nuovamente l'hash precedente, prendendo i bit iniziali come numero e scegliendo dal pool decrescente di quaranta. Il pannello di equità verifica un ticket keno da quelle due stringhe piuttosto che dalla coppia di seed. Crash segue la convenzione bustabit, una catena di hash in cui il punto di crash di ogni round viene calcolato dal proprio collegamento con aritmetica intera esatta.
VERIFICATO DAL MOTOREdemoLocal.ts kenoDraws: “catena randomHash per-scommessa + salt (verificabile per ticket tramite il modale di equità) … Non tocca il nonce della coppia di seed”; il ciclo hasha HMAC-SHA256(salt, hash precedente) dieci volte, legge i 52 bit iniziali e sceglie l'indice floor(norm × rimanenti) da un pool di 40 numeri con uno scambio alla fine. rng.ts h52 e il commento sul crash: “punto di crash bustabit in centesimi: floor((n·e − h)/(e − h)), e = 2^52, n = 100 … Matematica BigInt esatta per corrispondere al server”.
Nessuna delle due eccezioni è più debole dello schema del cursore; entrambe sono più vecchie e meglio conosciute. Ciò che conta per un giocatore è solo che il pannello mostri quale schema è stato usato in un round, e che ciascuno possa essere ricalcolato dalle stringhe che mostra.
Cosa significa al tavolo
- Il round esiste prima che tu agisca. Ogni carta, pallina e simbolo dei rulli di un round è una funzione della coppia di seed, del nonce e della sua posizione del cursore. Colpire, chiamare o tenere sceglie quali voci vengono lette, non cosa contengono.
- Le tue scelte non possono cambiare la lista, e nemmeno può farlo la casa. Una volta che il seed del server è impegnato e il nonce è fissato, nessuna delle due parti può alterare la voce 7 senza alterare il seed, il che romperebbe l'impronta digitale che ti è stata mostrata.
- Un verificatore deve leggere la stessa lista nello stesso modo. Ricalcolare un round di bingo significa derivare tutti i 63 cursori nell'ordine pubblicato; ricalcolare un fold a Hold'em significa derivarne 7. Il pannello del seed fa questo nel tuo browser, e i layout nella tabella sopra sono ciò che segue.
- Una striscia è una lista, non uno stato d'animo. Due round condividono solo la coppia di seed; i loro nonce differiscono e quindi ogni digest differisce. Questo è lo stesso punto che l'articolo sulla hot hand fa dall'altra direzione.
Tre input decidono il round. Il quarto decide quanto dura il round.il cursore, in una riga
I layout del cursore sopra sono letti dai moduli di derivazione lato client che il verificatore del browser e il motore demo condividono. Il servizio della casa è l'autorità pagante; dove un commento nel codice sorgente dice che un modulo rispecchia il server, questo è citato come scritto, non certificato da noi.
FAQ
Cos'è il cursore in un round provably fair?
Un contatore all'interno del round. Il messaggio hashato con il seed del server è “client seed-nonce-cursor”; il cursore 0 dà il primo numero casuale di cui il gioco ha bisogno, il cursore 1 il secondo, e così via. Un gioco che ha bisogno di un solo numero legge solo il cursore 0.
In cosa il cursore è diverso dal nonce?
Il nonce conta i round e aumenta di uno con ogni scommessa in ogni originale. Il cursore conta le estrazioni all'interno di un round e riparte da 0 ad ogni round. Insieme alla coppia di seed identificano ogni numero casuale che il sito produce.
Quanti numeri casuali usa un round di bingo?
Sessantatré: i cursori da 0 a 24 dispongono le 25 celle della cartella e i cursori da 25 a 62 estraggono le 38 palline, tutti senza reinserimento all'interno dei loro pool.
Colpire a blackjack cambia la carta successiva?
No. Ogni carta viene derivata dal proprio cursore nell'ordine di distribuzione, e l'intera lista esiste una volta che la coppia di seed e il nonce sono fissati. Colpire legge la voce successiva; stare la lascia non letta.
Tutti i giochi usano lo schema del cursore?
Keno e Crash usano invece catene di hash: keno esegue l'hash di un hash casuale per biglietto e un salt dieci volte, mentre crash segue la catena bustabit con aritmetica intera esatta. Il pannello di equità verifica ciascuno dalle stringhe che mostra.
FONTI E RIFERIMENTI
- Codice sorgente motore Betkyo: _shared/demoLocal.ts (uAt, rollSide, trapAt, kenoDraws), _shared/rng.ts (u64, h52, crash point), e i moduli di derivazione per bingo, hanabi, blackjack, vpoker, holdem, andar, koban, sicbo, roulette, fuku e omikuji
- RFC 2104 — HMAC: Keyed-Hashing for Message Authentication
- Schema provably fair di Bustabit (la costruzione del crash-point che il motore replica)
I GIOCHI TRATTATI IN QUESTO ARTICOLO
Blackjack — regole e gioco gratuito →Bingo — regole e gioco gratuito →Sic Bo — regole e gioco gratuito →