Provably fair : vérifiez chaque tirage vous-même
Un tirage « provably fair » (équitable et prouvable) est un tirage que le joueur peut recalculer sans faire confiance au casino. Sur OlympCash, chaque résultat est calculé par le serveur à partir de deux graines et d’un compteur. Le serveur s’engage sur sa graine avant votre mise et ne la révèle qu’une fois la manche close : il ne peut plus changer le résultat après avoir vu votre pari.
Les quatre étapes d’une manche
- 1
Le serveur s’engage
Avant votre mise, l’API publie l’empreinte SHA-256 de sa graine. Elle est enregistrée avec la manche.
- 2
Vous misez
Votre propre graine entre dans le calcul. Le débit, la manche et le gain se font dans une seule transaction.
- 3
Le tirage tombe
Le moteur du jeu, côté serveur, combine les deux graines et un compteur. Rien n’est tiré dans votre navigateur.
- 4
Vous vérifiez
La manche réglée, la graine du serveur est révélée en clair. Vous rejouez le hachage et le tirage vous-même.
La formule exacte
- Graine serveur : 32 octets aléatoires, écrits en 64 caractères hexadécimaux, neuve à chaque manche. Avant la mise, seule son empreinte est publiée :
SHA-256(graine serveur). - Graine joueur : tirée par votre navigateur à chaque mise. Elle entre dans le calcul, si bien qu’aucune des deux parties ne décide seule du résultat.
- Rang (nonce) : compteur propre à chaque jeu, qui augmente d’un à chaque manche.
- Flux : le bloc n° n vaut
HMAC-SHA256(graine serveur, « graine joueur:rang:n »), pour n = 0, 1, 2… Chaque bloc de 32 octets donne huit mots de 32 bits, lus dans l’ordre des octets (gros-boutiste). Le jeu consomme ces mots un par un.
Du flux au résultat
Quand un jeu ramène un mot à un intervalle, il écarte les mots situés au-delà du dernier multiple complet de cet intervalle : sans ce rejet, les petits résultats sortiraient un peu plus souvent que les grands.
- Dés
- Premier mot inférieur à 4 294 960 000, reste modulo 10 000, lu en centièmes : de 0,00 à 99,99.
- Roulette
- Premier mot inférieur à 4 294 967 289, reste modulo 37 : la case de 0 à 36.
- Pile ou face
- Le lancer n° k d’une série lit le mot n° k : pair, face ; impair, pile.
- Plinko
- Un mot par rangée : pair, la bille part à gauche ; impair, à droite. La case d’arrivée est le nombre de déviations à droite.
- Mines
- Cases numérotées de 0 (A1) à 24 (E5), ligne par ligne. La mine n° i (i = 0, 1…) prend la place i + r, où r est le premier mot sous le seuil de rejet de 25 − i, reste modulo 25 − i (mélange de Fisher-Yates).
- Limbo
- ⌊ 9 900 × 2³² ÷ ((mot + 1) × 100) ⌋ centièmes, borné entre ×1,00 et ×10 000.
- Crash
- Même calcul avec 9 900, borné à ×1 000. La manche est commune à toute la salle : la graine joueur y est remplacée par le mot « crash ».
- Roulette en direct
- Premier mot inférieur à 4 294 967 289, reste modulo 37, comme en solo. La manche est commune à la salle : le flux vaut HMAC-SHA256(graine serveur, « roulette-live:<rang>:n »), avec le rang de la manche à la place du rang joueur.
- Blackjack
- Sabot de 6 jeux rangés jeu après jeu, en cœur, carreau, trèfle, pique, rangs 2, 3, 4, 5, 6, 7, 8, 9, 10, J, Q, K, A : cartes numérotées de 0 à 311. Pour i de 311 à 1, la carte i s’échange avec la carte r, où r est le mot suivant sous le seuil de rejet de i + 1, reste modulo i + 1 (Fisher-Yates) ; la donne part de la carte 0 : joueur, croupier, joueur, croupier.
- Blackjack en direct
- Même sabot que le blackjack solo, mélangé par le même Fisher-Yates. La donne est commune : le flux vaut HMAC-SHA256(graine serveur, « blackjack-live:<rang>:n »), avec le rang de la donne. Les cartes partent de la carte 0 : une à chaque place occupée depuis la gauche du croupier, une au croupier, deux tours ; chaque carte porte son rang dans le sabot.
- TNT Miner
- Chaque tirage prend le premier mot inférieur à 4 294 967 000 (reste modulo 1 000) ou à 4 294 967 295 (reste modulo 5, la colonne). D’abord deux tirages par rangée de 1 à 79, bloc puis colonne : sous 45 explosif, sous 51 mineur, sous 96 boost, sinon rien. Puis 5 arrêts de deux tirages, palier puis colonne : sous 300 aucune TNT, au-delà les dix TNT dans l’ordre, chacune sur une tranche égale à son poids.
- Caisses
- Premier mot inférieur à 4 294 960 000, reste modulo 10 000 : la position sur les poids cumulés des objets, pris dans l’ordre de déclaration de la fiche de la caisse ; l’objet gagné est celui dont la tranche contient cette position. Dans une salve, chaque caisse a son propre rang (nonce) sous la même graine serveur.
- Hi-Lo
- Une carte par mot accepté, dans l’ordre : premier mot inférieur à 4 294 967 248, reste modulo 52. Ce reste modulo 13, plus un, donne le rang (1 l’As, 13 le Roi), son quotient par 13 l’enseigne (pique, cœur, carreau, trèfle) ; la carte n° 0 est celle de départ, la carte n° k le verdict de l’annonce n° k.
- Pump
- Crans numérotés de 0 à 24, posés comme les mines : pour i de 0 à n − 1 (n crans piégés : 1 en Facile, 3 en Moyen, 5 en Difficile, 10 en Expert), on échange les places i et i + r d’une liste 0…24, où r est le premier mot sous le seuil de rejet de 25 − i, reste modulo 25 − i ; les n premières places sont piégées. La pression n° k ouvre le cran k − 1 : le ballon éclate sur le plus petit cran piégé.
- Tower Rush
- Deux lectures par étage, du 1er au 15e. La maison : premier mot inférieur à 4 294 967 200, reste modulo 100 (Cabane de 0 à 29, Maison de 30 à 64, Villa de 65 à 86, Tour penchée de 87 à 99) ; son sort : le mot suivant, elle tient s’il est inférieur à sa chance de tenir × 2³² (Cabane 90 %, Maison 80 %, Villa 70 %, Tour penchée 55 %).
- Chicken
- Un mot par voie, dans l’ordre de la route, sans rejet : un char passe quand le mot est inférieur à la chance d’écrasement × 2³² (Facile 10 % sur 20 voies, Moyen 20 % sur 18 voies, Difficile 30 % sur 15 voies, Expert 45 % sur 12 voies). La première voie fatale arrête la poule ; si aucune ne l’est, la route est traversée.
Les autres tables lisent le même flux. Sous la plupart des jeux, le panneau « Vérifier la dernière manche » donne les valeurs de votre dernière manche.
Vérifier une manche
Relevez les valeurs de la manche dans le panneau « Vérifier la dernière manche » de la table, puis collez-les ici. Le calcul se fait dans votre navigateur : rien n’est envoyé.
Le refaire sans nous
Ces quelques lignes de Node.js suffisent pour recalculer un tirage des Dés :
import { createHash, createHmac } from 'node:crypto';
const serverSeed = 'graine serveur révélée';
const clientSeed = 'votre graine';
const nonce = 42; // rang de la manche
// 1. Doit redonner l'empreinte publiée avant la mise.
console.log(createHash('sha256').update(serverSeed).digest('hex'));
// 2. Premier bloc du flux, puis son premier mot de 32 bits.
const block = createHmac('sha256', serverSeed).update(`${clientSeed}:${nonce}:0`).digest();
const word = block.readUInt32BE(0);
// 3. Dés : reste modulo 10000, si le mot est sous le seuil de rejet.
if (word < 4294960000) console.log((word % 10000) / 100);Ce que la vérification prouve, et ce qu’elle ne prouve pas
Elle prouve que le résultat était fixé avant votre mise et qu’il découle exactement de la formule ci-dessus. Elle ne dit rien des gains : les multiplicateurs de chaque jeu sont fixés par ses règles, pas par le tirage. Les crédits restent virtuels et sans valeur, voir jeu responsable.