antododo / tictactoeTuto

2 stars 1 forks source link

Modify the smart contract to include 2 players #7

Open dabana opened 6 years ago

dabana commented 6 years ago

The contract must handle three states: 1) no players, 2) one player 3) two players.

antododo commented 6 years ago

Vous le voyez fonctionner comment le contrat ? Je vois que les variables winner, betWinner et numberOfPlayers ne sont pas utilisée.

Actuellement c'est le vainqueur qui remporte la mise, mais on a perdu l'option de choisir sur qui on parie, que le match se déroule et en fonction de notre choix on gagne notre pari ou pas.

dabana commented 6 years ago

Effectivement Il y a probablement quelques variables et functions qui ne seront pas utilisées. Il faudra les enlever.

Voici comment je vois le contrat maintenant qu'on est dans un contexte à 2 joueurs. 1) Chaque joueur doit mettre une mise de départ pour avoir le droit de participer à la game. On pourrait mettre une mise de départ fixe de 3 ETH pour simplifier. Dans le fond tu pari sur toi-même. 2) Le gagnant remporte la somme des deux mises.

Pour l'instant les deux joueurs jouent sur le même ordinateur. Ce sera bien de pouvoir le faire de deux ordis différents, mais je ne sais pas comment, d'où l'issue #3 . Pour ça l'application doit savoir si un joueur se connecte à l'application et gérer 3 états: 1) 0 joueur présent 2) 1 joueur présent: le premier joueur accepte la mise de départ et attent l'arrivée du deuxième joueur. 3) 2 joueurs présents: le deuxième joueur accepte la mise de départ et la partie commence.

antododo commented 6 years ago

C'est faisable mais je pense en dehors du cadre du tuto ^^ Déjà il faudrait configurer un des 2 ordinateurs pour qu'il accède au localhost de l'autre, car Ganache créé la blockchain localement seulement. Et ensuite il faudrait enregistrer tous les mouvements du jeu dans le smart contract, car actuellement l'historique du jeu est stocké seulement en local avec React et il faudrait que l'historique soit dans le smart contract pour que les joueurs puissent jouer à la même partie et voir les actions de l'autre.

Ce qui est une des limitations du code actuellement car l'historique étant coté React, n'importe qui pourrait appeler la fonction BettingResult() sans même avoir à jouer au jeu et récupérer tous les ETH.

dabana commented 6 years ago

Ouai ça peut vite devenir compliqué. Mais je pense que @AkaashMukherjee avait une idée de comment le faire avec un serveur Yarn.

Tu soulève un bon point, notre Smart contract n'est vraiment pas safe avec la fonction BettingResult(). Il faudrait que le contrat ne puisse envoyer l'argent qu'à une deux adresses qui ont BuyIn().

Je travail là dessus à l'instant même ...

AkaashMukherjee commented 6 years ago

J'ai commencé à écrire un long message mais il serait peut-être mieux de s'en parler sur Skype si vous avez un petit 15 minutes à un moment donné.