-`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é:
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