Scommesse in solitaria
Sei giochi si giocano da soli contro il banco: due dadi, testa o croce, roulette, slot, lotteria e crash. Una scommessa è una transazione CreateApp con un solo posto. Il suo esito proviene da una casualità che non esisteva quando la scommessa è stata piazzata, e il pool delle app paga una vincita.
Piazzare una scommessa
Chi scommette invia CreateApp con il tipo del gioco (da 16 a 21), la scommessa e la puntata, in ZBC o in un token. La puntata passa nel pool delle app quando la scommessa viene eseguita. Qualsiasi account può scommettere, compresi gli account con chiavi in stile Ethereum o Bitcoin, che non possono occupare un posto in una partita multigiocatore (app multigiocatore).
Un byte finale N, da 1 a 100, gioca la stessa scommessa N volte a partire da un solo seed, con la puntata divisa in parti uguali tra le giocate.
Quando e come viene estratto il risultato
Una scommessa inclusa nel blocco N viene risolta al blocco N + 2, con il seed di quel blocco, circa 30 secondi dopo. Il seed di ogni blocco viene calcolato dal suo produttore a partire dal seed precedente con una funzione casuale verificabile (seed del blocco (VRF)), quindi mentre la scommessa entra nel blocco N, il seed del blocco N + 2 non esiste ancora. Nessuno può prevedere il risultato, e il produttore che ha incluso la scommessa non può vederlo per primo. Se il blocco N + 2 viene prodotto dal nodo stesso di chi scommette (si confrontano gli account dei proprietari), la scommessa attende un blocco successivo prodotto da qualcun altro.
L'estrazione è un hash di quel seed e dell'id dell'app, con un tag proprio:
r = LE64(first 8 bytes of SHA3-256("zbc-apps" ‖ seed ‖ LE64(app id) ‖ LE64(0)))
La prima giocata di una scommessa multipla usa r; le giocate successive usano gli output di un generatore splitmix64 inizializzato con r. Chiunque può ricalcolare il risultato a partire da dati pubblici e verificare la vincita. Non c'è alcun segreto da rivelare e nessuna estrazione giornaliera cumulativa: ogni scommessa viene regolata per conto suo.
Tabelle delle vincite
| Gioco | Scommessa | Una vincita paga | Margine del banco |
|---|---|---|---|
| Testa o croce (17) | testa o croce | 1,98× | 1 % |
| Due dadi (16) | sotto il 7, o sopra il 7 | 2,28× | 5 % |
| 7 fortunato | 5,70× | 5 % | |
| un totale esatto | 34,20 ÷ combinazioni (2 o 12: 34,2×) | 5 % | |
| Roulette (18) | un singolo numero | 36× | 1/37, circa il 2,7 % |
| rosso o nero | 2× | circa il 2,7 % | |
| Slot (19) | tris di 7, un altro tris, una coppia qualsiasi | 50×, 15×, 1,8× | circa il 10,7 % |
| Lotteria (20) | un numero da 0 a 99 | 90× | 10 % |
| Crash (21) | un obiettivo T da 1,01× a 10,00× | T, quando il punto di crash raggiunge T | circa l'1 % |
Per un totale esatto con i dadi, le combinazioni sono i modi in cui due dadi possono ottenerlo: 6 − |7 − totale|. La roulette ha 37 caselle, con lo 0 verde, e i suoi colori seguono la vera ruota europea. Le slot hanno tre rulli di otto simboli, per un ritorno atteso di 457,4/512. Nel crash l'obiettivo viene fissato quando si piazza la scommessa; non esiste una mossa per incassare in anticipo.
Il margine del banco è incorporato in ogni tabella. A testa o croce vinci metà delle volte e una vincita restituisce 1,98 volte la puntata, quindi in media ogni ZBC puntato torna come 0,5 × 1,98 = 0,99 ZBC, e l'1 % restante resta al pool delle app. Una perdita non muove nulla, perché la puntata è già nel pool.
Il tetto per scommessa
Prima che una scommessa venga accettata, il nodo calcola la vincita più grande che potrebbe mai produrre, non la sua media, e la confronta con un tetto pari al 5 % del saldo del pool nell'asset della puntata:
largest payout ≤ floor(pool balance × 500 ÷ 10,000)
La vincita più grande è il moltiplicatore della scommessa stessa per i dadi, 1,98× per testa o croce, 36× per la roulette, 50× per le slot, 90× per la lotteria e T per il crash. Una scommessa oltre il tetto viene rifiutata quando viene inviata («bet too large for the apps pool»), e una che arriva comunque in un blocco è una no-op pagata.
Il tetto fa sì che nessun singolo risultato fortunato possa svuotare il pool. Un secondo limite, il limite per blocco, può distribuire una vincita molto grande su più blocchi (pool delle app).