Comment vérifier une mise provably fair
Ce qu'il vous faut
Pour vérifier une mise, il vous faut :
- La seed serveur utilisée pour la mise, dévoilée après la rotation.
- La seed serveur hachée qui vous a été présentée avant de jouer.
- La seed client active au moment où vous avez placé la mise.
- Le nonce de la mise.
- Le jeu et tous les paramètres qui influencent le résultat, comme les rangées et le risque au plinko, ou le nombre de mines.
Il vous faut aussi la documentation du casino sur son système, parce que les mises en œuvre diffèrent.
Étape 1 : noter l'engagement avant de jouer
Ouvrez les paramètres d'équité ou de seeds du casino et copiez la seed serveur hachée. Conservez-la à l'extérieur du casino : une note, une capture d'écran, un message à vous-même. Cette étape est souvent sautée, et c'est pourtant celle qui vous protège si le casino affiche plus tard un autre hachage dans son historique.
Tant que vous y êtes, remplacez la seed client par une valeur de votre choix. Notez-la.
Étape 2 : jouer et noter vos mises
Jouez normalement. Si vous voulez vérifier des mises précises, notez leurs identifiants ou leurs nonces dans votre historique.
Étape 3 : faire la rotation de la paire de seeds
Cliquez sur rotation, changer de seed ou l'équivalent. Le casino dévoile l'ancienne seed serveur et affiche un nouveau hachage pour la suivante. Votre nonce se réinitialise.
Étape 4 : vérifier le hachage
Calculez le hachage SHA-256 de la seed serveur dévoilée et comparez-le avec le hachage que vous avez noté. Dans le système courant, le hachage est calculé sur la seed en tant que texte, exactement telle qu'elle est affichée. Chaque caractère doit correspondre.
S'il ne correspond pas, vérifiez que vous avez la bonne paire de seeds. Si c'est le cas, l'engagement a échoué, et on ne peut se fier à aucun résultat issu de cette seed.
Étape 5 : recalculer les nombres aléatoires
Le système courant génère les octets ainsi :
HMAC-SHA256(key = serverSeed, message = clientSeed:nonce:round)
- La clé est la seed serveur.
- Le message joint la seed client, le nonce et la ronde avec des deux-points. La ronde commence à 0.
- Chaque HMAC produit 32 octets.
Les octets sont convertis en nombres à virgule quatre à la fois. Pour les octets b1, b2, b3, b4 :
float = b1/256 + b2/256^2 + b3/256^3 + b4/256^4
On obtient un nombre de 0 jusqu'à 1, 1 non compris. Un HMAC donne 8 nombres. Si un jeu en a besoin de plus, le numéro de ronde passe à 1, 2 et ainsi de suite, et les octets continuent à partir du nouveau HMAC. C'est ce qu'on appelle le curseur.
Exemple concret
Avec des seeds inventées :
| Valeur | Exemple |
|---|---|
| Seed serveur | 5f3c9a1e7b2d4c6f8a0e1b3d5c7f9a2e4b6d8c0f1a3e5b7d9c2f4a6e8b0d1c3f |
| Seed serveur hachée (SHA-256 du texte de la seed) | c498ac2d22fbdecd7e5ad767c84166d53b7fe56abe1db19415a8197da745c7de |
| Seed client | my-client-seed |
| Nonce | 0 |
| Message HMAC | my-client-seed:0:0 |
| Sortie HMAC-SHA256 | e946af2393f1e064d53af4f70125abe23306dca539cf9f4e88f1c58b5f154d12 |
| Quatre premiers octets | 233, 70, 175, 35 |
| Premier nombre | 0,91123... |
233/256 + 70/65 536 + 175/16 777 216 + 35/4 294 967 296 = 0,91123 à cinq décimales.
Vous pouvez coller la seed serveur et la seed client dans notre vérificateur pour vérifier le hachage et le résultat du dice de ce tableau.
Étape 6 : appliquer la formule du jeu
Chaque jeu transforme les nombres en résultat. Voici les formules courantes; les casinos peuvent en utiliser d'autres.
Dice
roll = floor(float x 10,001) / 100
On obtient un résultat de 0,00 à 100,00. Dans l'exemple, 0,91123 x 10 001 = 9 113,2, arrondi à l'entier inférieur 9 113, ce qui donne un résultat de 91,13.
Limbo
Une approche courante est :
result = floor((1 - houseEdge) / float x 100) / 100, avec un minimum de 1,00.
Avec un avantage de la maison de 1 %, 0,99 / 0,91123 = 1,0864, ce qui donne 1,08x dans l'exemple. Une cible de 2,00x aurait perdu.
Plinko
Chaque rangée utilise un nombre. Une règle courante est floor(float x 2) : 0 signifie que la bille va à gauche, 1 à droite. Comptez les déplacements vers la droite pour trouver la case d'arrivée, puis cherchez le multiplicateur dans la table de paiement correspondant à votre nombre de rangées et à votre niveau de risque. Une partie à 16 rangées a besoin de 16 nombres; elle utilise donc les rondes 0 et 1 du HMAC.
Mines
La disposition des mines est un mélange des 25 positions de cases. Dans une mise en œuvre courante, le jeu part d'une liste de positions de 0 à 24 et, pour chaque étape i, choisit floor(float x (25 - i)) comme indice dans la liste restante, retire cette position et l'ajoute à l'ordre mélangé. Les N premières positions de l'ordre mélangé sont des mines. Plusieurs rondes HMAC sont utilisées au besoin.
Étape 7 : comparer
Comparez le résultat recalculé avec l'enregistrement de la mise du casino. Au dice et au limbo, comparez le nombre. Au plinko, comparez la case. Au mines, comparez les positions des mines affichées après la partie.
Interpréter une non-correspondance
La plupart des non-correspondances viennent des données d'entrée, pas d'une fraude. Vérifiez dans cet ordre :
- Nonce décalé de un. Certains casinos commencent à 0, d'autres à 1.
- Mauvaise seed client. Si vous l'avez changée en cours de session, les mises précédentes utilisaient l'ancienne.
- Mauvaise paire de seeds. Assurez-vous que la seed serveur dévoilée correspond à la période de la mise.
- Paramètres du jeu. Rangées et risque au plinko, nombre de mines.
- Système différent. Le casino utilise peut-être un autre format de message, une autre conversion des octets ou une autre formule. Lisez sa documentation.
Si toutes les données sont correctes, que le casino documente le système courant et que le résultat ne correspond toujours pas, gardez des captures d'écran de la mise, des seeds et de la documentation, et communiquez avec le casino. Veuillez aussi nous envoyer les détails au moyen du formulaire de commentaires ci-dessous.
Limites à garder en tête
- La vérification prouve que les résultats ont suivi les seeds engagées et la formule. Elle ne change pas l'avantage de la maison.
- Elle s'applique seulement aux jeux construits sur ce système. Les machines à sous de tiers et les jeux en direct en sont exclus.
- Les jeux multijoueurs comme le crash utilisent souvent une chaîne de hachages partagée plutôt que vos seeds. Pour ces jeux, suivez les instructions de vérification propres au casino.
Vérifier avec du code
Si vous préférez vérifier sans passer par un site Web, ce bout de code Node.js applique le système courant. Il affiche le hachage SHA-256 de la seed serveur, le premier nombre et le résultat du dice pour l'exemple concret ci-dessus.
const crypto = require('crypto');
function floats(serverSeed, clientSeed, nonce, count) {
const out = [];
for (let round = 0; out.length < count; round++) {
const h = crypto.createHmac('sha256', serverSeed)
.update(`${clientSeed}:${nonce}:${round}`)
.digest();
for (let i = 0; i < 32 && out.length < count; i += 4) {
out.push(h[i] / 256 + h[i + 1] / 256 ** 2 + h[i + 2] / 256 ** 3 + h[i + 3] / 256 ** 4);
}
}
return out;
}
const serverSeed = '5f3c9a1e7b2d4c6f8a0e1b3d5c7f9a2e4b6d8c0f1a3e5b7d9c2f4a6e8b0d1c3f';
const hash = crypto.createHash('sha256').update(serverSeed).digest('hex');
const [f] = floats(serverSeed, 'my-client-seed', 0, 1);
const dice = Math.floor(f * 10001) / 100;
console.log(hash, f.toFixed(5), dice);
Remplacez les seeds et le nonce par vos propres valeurs. Pour les autres jeux, demandez plus de nombres et appliquez la formule documentée par le casino. Si la documentation du casino diffère de ce système, suivez la documentation.
Tenir un journal de vérification
Si vous jouez régulièrement, tenez un journal simple pour chaque paire de seeds : la seed serveur hachée et la date à laquelle vous l'avez notée, votre seed client, la seed serveur dévoilée, la plage de nonces utilisés et les mises que vous avez vérifiées. Ça prend une minute et ça vous donne des preuves si jamais vous devez contester quelque chose.