Les paris en solo
Six jeux se jouent seul contre la banque : deux dés, pile ou face, roulette, machine à sous, loterie et crash. Un pari est une transaction CreateApp avec un seul siège. Son résultat provient d’un aléa qui n’existait pas au moment où le pari a été placé, et c’est le pool des apps qui paie les gains.
Placer un pari
Le parieur envoie CreateApp avec le type du jeu (16 à 21), le pari et la mise, en ZBC ou en jeton. La mise passe dans le pool des apps quand le pari s’exécute. N’importe quel compte peut parier, y compris les comptes à clés de type Ethereum ou Bitcoin, qui ne peuvent pas occuper de siège dans un jeu multijoueur (applis multijoueurs).
Un octet final N, de 1 à 100, joue le même pari N fois à partir d’une seule graine, la mise étant répartie à parts égales entre les parties.
Quand et comment le résultat est tiré
Un pari inclus dans le bloc N est résolu au bloc N + 2, avec la graine de ce bloc, environ 30 secondes plus tard. La graine de chaque bloc est calculée par son producteur à partir de la graine précédente avec une fonction aléatoire vérifiable (graine du bloc) : pendant que le pari arrive dans le bloc N, la graine du bloc N + 2 n’existe donc pas encore. Personne ne peut prédire le résultat, et le producteur qui a inclus le pari ne peut pas le voir en premier. Si le bloc N + 2 est produit par le propre nœud du parieur (ce sont les comptes propriétaires qui sont comparés), le pari attend un bloc ultérieur produit par quelqu’un d’autre.
Le tirage est un hachage de cette graine et de l’identifiant de l’appli, sous une étiquette qui lui est propre :
r = LE64(first 8 bytes of SHA3-256("zbc-apps" ‖ seed ‖ LE64(app id) ‖ LE64(0)))
La première partie d’un pari multiple utilise r ; les parties suivantes utilisent les sorties d’un générateur splitmix64 initialisé avec r. N’importe qui peut recalculer le résultat à partir de données publiques et vérifier le gain. Il n’y a aucun secret à révéler et aucun traitement quotidien par lots : chaque pari est réglé séparément.
Tables de gains
| Jeu | Pari | Un gain paie | Avantage de la banque |
|---|---|---|---|
| Pile ou face (17) | pile, ou face | 1,98× | 1 % |
| Deux dés (16) | moins de 7, ou plus de 7 | 2,28× | 5 % |
| 7 chanceux | 5,70× | 5 % | |
| un total exact | 34,20 ÷ combinaisons (2 ou 12 : 34,2×) | 5 % | |
| Roulette (18) | un seul numéro | 36× | 1/37, environ 2,7 % |
| rouge ou noir | 2× | environ 2,7 % | |
| Machine à sous (19) | triple 7, autre triple, une paire quelconque | 50×, 15×, 1,8× | environ 10,7 % |
| Loterie (20) | un nombre de 0 à 99 | 90× | 10 % |
| Crash (21) | une cible T de 1,01× à 10,00× | T, quand le point de crash atteint T | environ 1 % |
Pour un total exact, les combinaisons sont le nombre de façons dont deux dés peuvent l’obtenir : 6 − |7 − total|. La roulette a 37 cases, dont le 0 vert, et ses couleurs suivent la vraie roue européenne. La machine à sous a trois rouleaux de huit symboles, pour un retour attendu de 457,4/512. Au crash, la cible est fixée au moment où le pari est placé ; aucun coup ne permet d’encaisser plus tôt.
L’avantage de la banque est intégré à chaque table. À pile ou face, vous gagnez une fois sur deux et un gain rapporte 1,98 fois la mise : en moyenne, chaque ZBC misé revient donc sous la forme de 0,5 × 1,98 = 0,99 ZBC, et le 1 % restant demeure dans le pool des apps. Une perte ne déplace rien, puisque la mise est déjà dans le pool.
Le plafond de mise
Avant qu’un pari soit accepté, le nœud calcule le plus gros gain qu’il pourrait jamais produire, et non sa moyenne, et le compare à un plafond de 5 % du solde du pool dans l’actif de la mise :
largest payout ≤ floor(pool balance × 500 ÷ 10,000)
Le plus gros gain correspond au multiplicateur propre du pari pour les dés, à 1,98× pour un pile ou face, 36× pour la roulette, 50× pour la machine à sous, 90× pour la loterie et T pour le crash. Un pari au-dessus du plafond est refusé au moment de son envoi (« bet too large for the apps pool »), et un pari qui atteint malgré tout un bloc est une opération nulle payante.
Le plafond garantit qu’aucun résultat chanceux isolé ne peut vider le pool. Une seconde limite, l’enveloppe par bloc, peut étaler un très gros gain sur plusieurs blocs (pool des apps).