Commit ff5f0211 authored by Quentin Hamitouche's avatar Quentin Hamitouche

Update README

parent 0991533a
...@@ -11,13 +11,25 @@ Cette application décentralisée (DApp) permet de gérer un système de vote tr ...@@ -11,13 +11,25 @@ Cette application décentralisée (DApp) permet de gérer un système de vote tr
- Comptabilisation automatique des votes - Comptabilisation automatique des votes
- Vérification des résultats accessible à tous - Vérification des résultats accessible à tous
- Période limitée pour l'enregistrement des propositions et le vote - Période limitée pour l'enregistrement des propositions et le vote
- Réinitialisation du système de vote
## Organisation du groupe
Nous avons effectué beaucoup de peer programming. Néanmoins, le travail côté individuel pourrait être résumé comme ceci :
- Guillaume Dewisme : Majorité du contrat Solidity, base du front
- Quentin Hamitouche : front, configuration / mise aux normes, fonctionnalités supplémentaires dans le contrat
## Vidéo de démonstration
[Lien ici](https://sae-contrats-intelligents.freeboxos.fr)
## Technologies utilisées ## Technologies utilisées
- **Smart Contract**: Solidity 0.8.20, OpenZeppelin - **Smart Contract**: Solidity 0.8.29, OpenZeppelin
- **Backend**: Hardhat (environnement de développement Ethereum) - **Backend**: Hardhat (environnement de développement Ethereum)
- **Frontend**: Angular 17 - **Frontend**: React
- **Web3**: ethers.js v5.7 - **Web3**: ethers.js
- **Styling**: Bootstrap 5 - **Styling**: Bootstrap 5
## Structure du Projet ## Structure du Projet
...@@ -26,13 +38,13 @@ Cette application décentralisée (DApp) permet de gérer un système de vote tr ...@@ -26,13 +38,13 @@ Cette application décentralisée (DApp) permet de gérer un système de vote tr
- `Voting.sol` : Contrat principal de la DApp - `Voting.sol` : Contrat principal de la DApp
- `scripts/` : Scripts de déploiement et d'interaction avec le contrat - `scripts/` : Scripts de déploiement et d'interaction avec le contrat
- `deploy.js` : Script pour déployer le contrat sur la blockchain - `deploy.js` : Script pour déployer le contrat sur la blockchain
- `frontend-angular/` : Interface utilisateur Angular - `frontend/` : Interface utilisateur React
- `frontend-angular/` : Interface utilisateur Angular (test, pas finie)
- `test/` : Tests automatisés pour les smart contracts - `test/` : Tests automatisés pour les smart contracts
## Prérequis ## Prérequis
- Node.js v16+ - Node.js v22+
- npm v8+
- MetaMask ou un autre portefeuille Ethereum installé dans votre navigateur - MetaMask ou un autre portefeuille Ethereum installé dans votre navigateur
## Installation et démarrage ## Installation et démarrage
...@@ -69,6 +81,12 @@ npm run deploy ...@@ -69,6 +81,12 @@ npm run deploy
Notez l'adresse du contrat déployé, vous en aurez besoin pour configurer le frontend. Notez l'adresse du contrat déployé, vous en aurez besoin pour configurer le frontend.
En cas de problème, exécuter arrêter le noeud puis exécuter cette commande :
```bash
npx hardhat clean
```
5. **Configurer et démarrer le frontend Angular** 5. **Configurer et démarrer le frontend Angular**
```bash ```bash
...@@ -76,10 +94,10 @@ cd frontend-angular ...@@ -76,10 +94,10 @@ cd frontend-angular
npm install npm install
``` ```
Pour configurer l'adresse du contrat, ouvrez le fichier `src/app/services/contract.service.ts` et modifiez la ligne suivante avec l'adresse de votre contrat déployé: Pour configurer l'adresse du contrat, ouvrez le fichier `src/utils/contract.js` et modifiez la ligne suivante avec l'adresse de votre contrat déployé:
```javascript ```javascript
private contractAddress = '<ADRESSE_DU_CONTRAT_DÉPLOYÉ>'; export const CONTRACT_ADDRESS = "<ADRESSE_DU_CONTRAT_DÉPLOYÉ>";
``` ```
Puis démarrez l'application: Puis démarrez l'application:
...@@ -88,7 +106,7 @@ Puis démarrez l'application: ...@@ -88,7 +106,7 @@ Puis démarrez l'application:
npm run dev npm run dev
``` ```
L'application sera accessible à l'adresse `http://localhost:4200`. L'application sera accessible à l'adresse `http://localhost:3000`.
## Guide d'utilisation ## Guide d'utilisation
...@@ -96,33 +114,40 @@ L'application sera accessible à l'adresse `http://localhost:4200`. ...@@ -96,33 +114,40 @@ L'application sera accessible à l'adresse `http://localhost:4200`.
- Au démarrage de l'application, cliquez sur "Connecter votre portefeuille" - Au démarrage de l'application, cliquez sur "Connecter votre portefeuille"
- Autorisez la connexion dans MetaMask - Autorisez la connexion dans MetaMask
- Assurez-vous d'être sur le réseau local Hardhat (localhost:8545, Chain ID: 1337) - Assurez-vous d'être sur le réseau local Hardhat (localhost:8545, Chain ID: 31337)
### 2. Processus de vote ### 2. Processus de vote
Le processus de vote suit plusieurs étapes: Le processus de vote suit plusieurs étapes:
#### Phase 1: Enregistrement des électeurs #### Phase 1: Enregistrement des électeurs
- Seul l'administrateur (le déployeur du contrat) peut enregistrer des électeurs - Seul l'administrateur (le déployeur du contrat) peut enregistrer des électeurs
- Entrez l'adresse Ethereum de chaque électeur dans le formulaire - Entrez l'adresse Ethereum de chaque électeur dans le formulaire
#### Phase 2: Enregistrement des propositions #### Phase 2: Enregistrement des propositions
- L'administrateur démarre cette phase en spécifiant une durée en minutes - L'administrateur démarre cette phase en spécifiant une durée en minutes
- Les électeurs enregistrés peuvent soumettre des propositions - Les électeurs enregistrés peuvent soumettre des propositions
#### Phase 3: Fin de l'enregistrement des propositions #### Phase 3: Fin de l'enregistrement des propositions
- L'administrateur termine cette phase manuellement ou la période expire automatiquement - L'administrateur termine cette phase manuellement ou la période expire automatiquement
#### Phase 4: Session de vote #### Phase 4: Session de vote
- L'administrateur démarre la session en spécifiant une durée en minutes - L'administrateur démarre la session en spécifiant une durée en minutes
- Les électeurs peuvent voter pour une proposition ou déléguer leur vote - Les électeurs peuvent voter pour une proposition ou déléguer leur vote
#### Phase 5: Fin de la session de vote #### Phase 5: Fin de la session de vote
- L'administrateur termine cette phase manuellement ou la période expire automatiquement - L'administrateur termine cette phase manuellement ou la période expire automatiquement
#### Phase 6: Dépouillement des votes #### Phase 6: Dépouillement des votes
- L'administrateur déclenche le comptage des votes - L'administrateur déclenche le comptage des votes
- Les résultats sont visibles par tous les utilisateurs - Les résultats sont visibles par tous les utilisateurs
- L'administrateur peut démarrer une nouvelle session de vote
## Tests ## Tests
...@@ -133,6 +158,7 @@ npm test ...@@ -133,6 +158,7 @@ npm test
``` ```
Ces tests vérifient: Ces tests vérifient:
- L'enregistrement des électeurs - L'enregistrement des électeurs
- Le cycle de vie du workflow - Le cycle de vie du workflow
- La soumission de propositions - La soumission de propositions
...@@ -142,10 +168,12 @@ Ces tests vérifient: ...@@ -142,10 +168,12 @@ Ces tests vérifient:
### Tests manuels du frontend ### Tests manuels du frontend
1. **Test du rôle administrateur** 1. **Test du rôle administrateur**
- Utilisez le compte qui a déployé le contrat - Utilisez le compte qui a déployé le contrat
- Vérifiez que vous pouvez enregistrer des électeurs et gérer le workflow - Vérifiez que vous pouvez enregistrer des électeurs et gérer le workflow
2. **Test du rôle électeur** 2. **Test du rôle électeur**
- Connectez-vous avec un compte enregistré comme électeur - Connectez-vous avec un compte enregistré comme électeur
- Soumettez des propositions et votez - Soumettez des propositions et votez
...@@ -156,10 +184,17 @@ Ces tests vérifient: ...@@ -156,10 +184,17 @@ Ces tests vérifient:
## Fonctionnalités supplémentaires ## Fonctionnalités supplémentaires
1. **Limite de temps pour les phases** 1. **Limite de temps pour les phases**
- Les phases d'enregistrement des propositions et de vote ont des durées configurables - Les phases d'enregistrement des propositions et de vote ont des durées configurables
- Le système verrouille automatiquement les actions après expiration - Le système verrouille automatiquement les actions après expiration
- N.B. : Cette fonctionnalité n'a pas pu être finie, car nous nous sommes rendus compte qu'il était impossible de créer des évènements planifiés avec les contrats intelligents
1. (bis) **Réinitialisation du système de vote**
- À la fin d'une session de vote, l'administrateur peut cliquer sur le bouton "Nouveau vote"
- Cela réinitialisera les propopsitions
2. **Système de délégation de vote** 1. **Système de délégation de vote**
- Les électeurs peuvent déléguer leur vote à un autre électeur enregistré - Les électeurs peuvent déléguer leur vote à un autre électeur enregistré
- Vérification des boucles de délégation pour éviter les références circulaires - Vérification des boucles de délégation pour éviter les références circulaires
...@@ -178,10 +213,12 @@ Pour un déploiement en production, vous devrez: ...@@ -178,10 +213,12 @@ Pour un déploiement en production, vous devrez:
### Problèmes courants ### Problèmes courants
1. **Erreur "No such contract"** 1. **Erreur "No such contract"**
- Vérifiez que le contrat est bien déployé - Vérifiez que le contrat est bien déployé
- Assurez-vous que l'adresse du contrat dans le frontend est correcte - Assurez-vous que l'adresse du contrat dans le frontend est correcte
2. **Erreur "Cannot estimate gas"** 2. **Erreur "Cannot estimate gas"**
- La transaction peut échouer à cause des règles du contrat - La transaction peut échouer à cause des règles du contrat
- Vérifiez que vous êtes dans la bonne phase du workflow - Vérifiez que vous êtes dans la bonne phase du workflow
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment