Skip to content

jw418/Penduel

Repository files navigation

Penduel ⚔️

Jeu du Pendu en Duel, créer une partie avec la mise souhaitée ou rejoignez une partie, le vainqueur remporte le tout. DAPP réalisé dans le cadre de la formation développeur blockchain d'Alyra.

Adresse du contract: 0xD1f5b4fB58D99c93d91376FC0E110c2078B840AE (Goerli)
EtherScan: https://goerli.etherscan.io/address/0xD1f5b4fB58D99c93d91376FC0E110c2078B840AE
Vidéo de démonstration: https://youtu.be/iz33uqRb9r4
Faucet: https://goerlifaucet.com/

DAPP: https://floral-darkness-8082.on.fleek.co/

Installation 🛠️

Pour ce projet de DAPP j'ai utilisé React Truffle Box. Vous pouvez copiez le repo avec la commande :

git clone https://github.com/jw418/Penduel.git

Pour installer les dépendances allez à la racine du fichier et utilisez les commandes suivante :

npm install
cd client
npm install

Pensez à modifier le fichier truffle-config.js selon le réseau choisi. https://trufflesuite.com/docs/truffle/reference/configuration/

Puis si nécessaire à créer et à configurer votre fichier .ENV à la racine et l'ajouter à votre .gitignore.

Front

Pour voir le front en local:

 cd client
 npm run start

Sinon directement sur: https://floral-darkness-8082.on.fleek.co/
Assurez-vous d'être sur le réseau de test Goerli.

Tests 🧪

Pour exécuter les test du smart contract:

Allez à la racine du projet et tapez la commande:

truffle test ./test/MockPenduel.js

J'ai essayer la méthode décrite ici: https://betterprogramming.pub/how-to-mock-chainlink-vrf-coordinator-v2-and-aggregator-v3-with-truffle-0-8-0-24353b96858e pour faire les tests en local avec les faux contrats vrf v2 coordinator fourni par chainlink mais sans succès. J'ai donc repris de zéro avec une version du contrat sans chainlink.

Slither

Outil qui met en évidence certaines vulnérabilités.

_ rng volontairement dans le contract
_ ignoré: varaiable utilisé comme indiqué par chainlink

Reetrency: ligne 280 l'etat de la session est changé<

 sessionPublic[idSession].state = StateSession.InProgress;

en cas de reentrency le require ligne 273 empeche l'execution de la fonction:

 require(
           sessionPublic[idSession].state == StateSession.Reachable,
           "Error, session unreachable"
       );

Ignoré

Reentrency pas possible grace au require, si la fonction s'exécute partiellement cela n'afffectera que l'utilisateur qui apelle la fonction(il ne pourra pas jouer et le jouer 1 pourra demander un remboursement). Cependant dans le cas ou l'utilisateur n'est pas malicieux et que la fonction ne s'exécute pas complétement il pourrait alors être lésé.

Action: déplacé l'appelle de la fonction requestRandomWords() en fin de fonction, dans ce cas si la fonction est interrompue avant la fin aucun mot ne sera générer et apres 3h les joueurs pourront demander a ce que la partie soit annulé && "sessionPublic[idSession].state = StateSession.InProgress;" placé juste après les require.


Ignoré: un require revert la fonction si nécéssaire


Ignoré: même en cas de manipulation c'est comparaison n'ont pas besoin d'une grande précisions


Action: suppression des égalités


Ignoré


Ignoré: require en fin de fonction qui vérifie l'exécution


Ignoré: pour les mixedCase (pas pertinent)
Action: Event name modifié


Action: uint32 callbackGasLimit = 200000; ==> uint32 callbackGasLimit = 2 * (10**5);


Action: ajout de l'attribut constant


Action: dans MockPenduel.sol pour la fonction joinSession() passé de public a external

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published