[Jeu Provably-Fair] P01 L'axe cryptographique - E01 Concept de "provably-fair"

in #fr7 years ago

Bonjours chers amis Steemiens,

Cet article sera le premier d'une série qui aboutira (je l'espère) à la création d'un jeu régi par le principe du provably-fair.

Bustabit
Bustabit : Le plus célèbre des jeux provably-fair (surnommé "le jeu du diable")

Cette série sera elle-même décomposée en sous-parties :

  1. L'axe cryptographique : comment générer les résultats de manière transparente afin d'avoir la confiance des utilisateurs ?
  2. L'axe programmation back-end : comment gérer les transferts de crypto-monnaies de manière automatique ? Comment assurer la sécurité du site ? Comment s'assurer qu'aucune triche ne sera possible ? Et toutes les autres questions back-end classiques...
  3. L'axe programmation front-end : Comment faire un site ergonomique, qui procurera la meilleure expérience à l'utilisateur ?

Donc nous allons aujourd'hui commencer par l'axe cryptographique, qui se décompose lui-même en trois parties :

  1. Explication du concept de provably-fair (ce que nous allons traiter dans le présent post),
  2. Présentation de l'algorithme cryptographique SHA256 qui va être utilisé pour la création de ce jeu,
  3. Comment générer une hash chain (une chaîne de résultats) en Python.

steemdivider.png

Partie 1 : Qu'est-ce que le provably-fair ?

Explications générales

PF

L'objectif du système provably-fair est d'éliminer la défiance des joueurs envers l'opérateur (qui sera aussi appellé casino pour éviter les trop nombreuses répétitions).

Dans les jeux de hasard / argent, il existe deux grandes catégories de jeux :

  • Les jeux où les joueurs jouent les uns contre les autres, et le casino se contente de prendre une commission sur les mises (comme le rake au poker). Pour ces jeux, l'opérateur n'a pas à prouver qu'il est juste (qu'il ne truque pas le résultat des parties, même si ça peut être un plus non négligeable), mais il doit prouver son indépendance (c'est-à-dire qu'il ne favorise pas un joueur par rapport à un autre).
  • Les jeux où les joueurs jouent contre la casino lui-même (comme les machines à sous, la roulette) où là, la confiance est essentielle car les joueurs quitteront le jeu s'ils ont l'impression que le jeu est truqué, ou que le casino n'est pas honnête dans sa gestion. Le projet que je vais développer sous vos yeux, qui sera l'objet de ces séries, appartient à cette seconde catégorie.

La seule solution pour l'opérateur de prouver aux joueurs qu'il ne manipule pas le résultat des parties en temps réel (selon le volume de mises, selon la profondeur de sa bankroll à un instant T) est de déterminer à l'avance le résultat des futures parties, et d'offrir aux joueurs le moyen de vérifier que le résultat d'une partie n'a pas été modifié ou altéré et correspond bien à la partie qui était pré-déterminée.

Pour permettre ceci, une solution a été proposée par Dooglus sur Bitcointalk : Solution pour déployer un algorithme provably-fair par Dooglus

steemdivider.png

Les étapes de création d'un système provably-fair


SHA256

  • La première étape est de générer une hash chain.

Nous allons faire une présentation succinte, car cela sera détaillé très amplement dans la partie 3.

Une hash chain consiste premièrement en une clé secréte de l'opérateur (un mot de passe connu uniquement par le casino, qui, s'il est compromis, peut permettre aux joueurs de prédire les résultats des futures parties), qui une fois hashé via le protocole SHA256 (une entrée, quelle qu'elle soit, une fois hashée via le protocole SHA256 donne une chaîne de 32 nombres hexadécimaux - soit 64 caractères - unique) donnera la première server seed (le hash originel) qui sera elle-même rehashée - toujours par le protocole SHA256 - autant de fois qu'on souhaite avoir de parties pré-déterminées soit n fois, ce qui vous donnera une hash chain de longueur n.

Si vous n'avez pas tout compris, pas d'inquiètude, ce point (relativement technique) sera amplement détaillé dans les parties 2 et 3, lorsque nous expliquerons l'algorithme de cryptage SHA256 puis que nous créerons notre propre hash chain.

Ensuite, le premier hash qui sera utilisé dans le jeu sera le dernier généré (le nième élément de la hash chain), puis on remontera la chaîne en sens inverse pour les jeux suivants (n puis n-1 puis n-2, etc.).
De cette manière, le joueur peut s'assurer que les jeux sont pré-déterminés : en hashant le hash d'une partie, il DOIT obligatoirement retomber sur le hash de la partie précédente (en hashant n-1 il retrouve n), prouvant de cette manière que l'opérateur est bien en train d'utiliser la hash chain qu'il a généré.

Ce premier hash (le nième élément) est rendu public (avant le lancement du jeu), et de cette manière, à partir de cette publicité, la hash chain devient inaltérable (tant que des dispositions adéquates sont prises, comme publier ce premier hash sur une blockchain inaltérable et à condition que les joueurs restent vigilants et vérifient de leur côté que l'opérateur l'utilise bien - mais ceci est très facile).


  • La deuxième étape est de choisir une client seed.

Cette étape est essentielle pour prouver aux joueurs que l'opérateur n'a pas généré un très grand nombre de hash chains pour ensuite choisir celle qui lui était le plus favorable.

Comment faire cela ?
En utilisant un élément extérieur qui est inconnu des deux parties (des joueurs et du casino). Généralement, c'est le hash d'un futur block Bitcoin ou Ethereum qui est utilisé.

De cette manière, une fois le jeu présenté publiquement :

  • Les joueurs connaissent le dernier hash de la hash chain et sont désormais en capacité de s'assurer que l'opérateur utilise bien ces résultats pré-déterminés dans son jeu.
  • Le casino n'a pas choisi une hash chain qui lui était favorable car tous les hashs de sa hash chain seront de nouveau hashés avec la client seed (avant de transformer ce hash en résultat exploitable, selon le jeu en question, mais ce calcul est également public) qui lui est inconnu au moment de la génération de la hash chain et de la publicité de son jeu.

Une fois que le block Bitcoin ou Ethereum choisi pour être la client seed est miné est que le hash du block est connu, l'opérateur peut désormais lancer son jeu, naviguer du dernier au premier élément de sa hash chain, générant de cette manière les résultats de chaque partie. Et les joueurs n'ont plus qu'à miser.

steemdivider.png

J'espère que vous avez apprécié cette lecture !

Si vous avez des questions, des suggestions ou quoi que ce soit, je me ferai un plaisir de discuter avec vous dans les commentaires !

A bientôt pour la deuxième partie : Le protocole SHA256

steemdivider.png

N'hésitez pas à consulter mes derniers posts :

Sort:  

Le fameux jeu du diable !!! :-O

Je n'y ai jamais joué et pourtant, je pense avoir vécu l'aventure comme si j'y étais suite à un topic sur JVC ou les mecs essayaient d'aller le plus loin possible avant d'être "éjecter" ^^

Je n'avais jamais compris comment fonctionnait le "Provaly fair", merci pour l'explication et les détails.
Concernant ta création, j'espère que tu parviendra a tes fins car cela serait une très belle réussite :D

A bientôt ;-)

C'est sur JVC aussi que j'ai découvert ce jeu absolument fou ! On ne peut nier que l'inventeur a eu une idée géniale, le jeu est vraiment particulier et le poker, la roulette, etc. c'est du pipi de chat à côté de ça.

J'y ai joué un petit peu, mais j'ai très vite arrêté après m'être renseigné un peu (et avoir perdu un peu de Bitcoin durement acquis par le trade). Car comme tous les jeux de hasard, le but est de conserver l'illusion du joueur qu'il va devenir riche, alors que c'est le casino qui gagne toujours.

C'est pourquoi depuis j'ai le projet de créer mon propre jeu (ce ne sera pas une simple copie, j'ai quelques idées innovantes pour me démarquer de la concurrence, et puis c'est aussi pour tout ce que le projet va m'apprendre).

Et aussi car il faut savoir que l'opérateur de ce jeu gagne environ 2 millions par mois (soumis à la fluctuation du cours du Bitcoin bien entendu).

Salut, tu commence à me connaître, tu as même prévu un paragraphe pour moi

Si vous n'avez pas tout compris

lol, en tout cas c'est très intéressant, j'ai hâte de lire la suite

Je suis peut-être pas non plus très pédagogue... Même si j'essaie de faire de mon mieux.
Pour ce qui est cryptographie, c'est la partie la plus dure techniquement, mais je vais détailler tout ça dans les prochains posts (la partie 2 sera être publiée demain). Bon après bien entendu, y'aura toute la phase programmation qui ne sera pas non plus évidente pour les profanes...
Merci pour tes encouragements !

si c'est très clair, mais c'est nouveau pour moi et pationnant. Après vu que tu as l'air doué, il y a un jeu qui pourrait cartonner, c'est allier, le faucet et le mmorpg, en steem pourquoi pas. Toi ce serait plus du casino? Mais c'est moi qui te dit merci, et change rien

Moi ce serait vraiment casino (en gros ce serait comme bustabit, mais avec un système un peu différent).
L'idée de faucet + mmorpg c'est cool, mais je suis pas assez bon programmeur pour faire un vrai jeu digne de ce nom. Peut-être un RPG à la nainwak à la rigueur (pour les anciens qui se rappeleront)

mon rêve ce serait un jeu de construction, genre au début tu coupes du bois, tu revend à une scierie, qui fait des planches qui revend à un fabricant de meuble etc.
A chaque fois qu'il y a vente, il y a des taxes, qui rémunère le webmaster, et puis avec l'évolution de nouveaux métiers, de nouveaux matériaux, etc...
Un jour peut être...

Bonne idée, mais je comprends pas trop d'où viendra l'argent qui rémunérera le webmaster... Enfin je comprend les taxes, mais si c'est de l'argent "virtuel" qui ne sert que dans le jeu, où est l'intérêt ? à moins de cumuler ça avec un faucet (où les unités gagnées via le faucet permettraient d'acheter le matériel de production, ce genre de choses).
Si tu veux en discuter un peu sur Discord : algo.coder #7160

oui c'est ça, je t'avais parler au début d'un faucet gaming, et une partie des gains des faucets est redistribuer par le biais des taxes et impôts du jeu. Le but étant d'attirer des joueurs (qui à la limite se foutent des coins), et des amateurs de faucets. Si tu sais faire ça avec un bon programme referal, genre sur 2 niveaux, et un site propre (pas trop de pop up, pas de pubs porno, ou genre alerte microsoft).

Vous avez reçu un upvote de 50.00% par @qual de la part de @algo.coder!

Congratulations @algo.coder! You have completed some achievement on Steemit and have been rewarded with new badge(s) :

Award for the number of upvotes

Click on any badge to view your Board of Honor.
For more information about SteemitBoard, click here

If you no longer want to receive notifications, reply to this comment with the word STOP

Do you like SteemitBoard's project? Vote for its witness and get one more award!

Coin Marketplace

STEEM 0.23
TRX 0.28
JST 0.042
BTC 104956.85
ETH 3880.98
SBD 3.32