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
- Comptabilisation automatique des votes
- Vérification des résultats accessible à tous
- 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
- **Smart Contract**: Solidity 0.8.20, OpenZeppelin
- **Smart Contract**: Solidity 0.8.29, OpenZeppelin
- **Backend**: Hardhat (environnement de développement Ethereum)
- **Frontend**: Angular 17
- **Web3**: ethers.js v5.7
- **Frontend**: React
- **Web3**: ethers.js
- **Styling**: Bootstrap 5
## Structure du Projet
......@@ -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
- `scripts/` : Scripts de déploiement et d'interaction avec le contrat
- `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
## Prérequis
- Node.js v16+
- npm v8+
- Node.js v22+
- MetaMask ou un autre portefeuille Ethereum installé dans votre navigateur
## Installation et démarrage
......@@ -69,6 +81,12 @@ npm run deploy
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**
```bash
......@@ -76,10 +94,10 @@ cd frontend-angular
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
private contractAddress = '<ADRESSE_DU_CONTRAT_DÉPLOYÉ>';
export const CONTRACT_ADDRESS = "<ADRESSE_DU_CONTRAT_DÉPLOYÉ>";
```
Puis démarrez l'application:
......@@ -88,7 +106,7 @@ Puis démarrez l'application:
npm run dev
```
L'application sera accessible à l'adresse `http://localhost:4200`.
L'application sera accessible à l'adresse `http://localhost:3000`.
## Guide d'utilisation
......@@ -96,33 +114,40 @@ L'application sera accessible à l'adresse `http://localhost:4200`.
- Au démarrage de l'application, cliquez sur "Connecter votre portefeuille"
- 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
Le processus de vote suit plusieurs étapes:
#### Phase 1: Enregistrement des électeurs
- Seul l'administrateur (le déployeur du contrat) peut enregistrer des électeurs
- Entrez l'adresse Ethereum de chaque électeur dans le formulaire
#### Phase 2: Enregistrement des propositions
- L'administrateur démarre cette phase en spécifiant une durée en minutes
- Les électeurs enregistrés peuvent soumettre des propositions
#### Phase 3: Fin de l'enregistrement des propositions
- L'administrateur termine cette phase manuellement ou la période expire automatiquement
#### Phase 4: Session de vote
- 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
#### Phase 5: Fin de la session de vote
- L'administrateur termine cette phase manuellement ou la période expire automatiquement
#### Phase 6: Dépouillement des votes
- L'administrateur déclenche le comptage des votes
- Les résultats sont visibles par tous les utilisateurs
- L'administrateur peut démarrer une nouvelle session de vote
## Tests
......@@ -133,6 +158,7 @@ npm test
```
Ces tests vérifient:
- L'enregistrement des électeurs
- Le cycle de vie du workflow
- La soumission de propositions
......@@ -142,10 +168,12 @@ Ces tests vérifient:
### Tests manuels du frontend
1. **Test du rôle administrateur**
- Utilisez le compte qui a déployé le contrat
- Vérifiez que vous pouvez enregistrer des électeurs et gérer le workflow
2. **Test du rôle électeur**
- Connectez-vous avec un compte enregistré comme électeur
- Soumettez des propositions et votez
......@@ -156,10 +184,17 @@ Ces tests vérifient:
## Fonctionnalités supplémentaires
1. **Limite de temps pour les phases**
- Les phases d'enregistrement des propositions et de vote ont des durées configurables
- 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é
- 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:
### Problèmes courants
1. **Erreur "No such contract"**
- Vérifiez que le contrat est bien déployé
- Assurez-vous que l'adresse du contrat dans le frontend est correcte
2. **Erreur "Cannot estimate gas"**
- La transaction peut échouer à cause des règles du contrat
- Vérifiez que vous êtes dans la bonne phase du workflow
......@@ -191,4 +228,4 @@ Pour un déploiement en production, vous devrez:
### Support
Pour toute question ou problème, veuillez ouvrir une issue sur le dépôt GitHub.
\ No newline at end of file
Pour toute question ou problème, veuillez ouvrir une issue sur le dépôt GitHub.
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