Commit f913c9d2 authored by Guillaume Dewisme's avatar Guillaume Dewisme

readme

parent f546ce3c
Pipeline #3125 failed with stages
# DApp de Vote
Cette application décentralisée (DApp) permet de gérer un système de vote transparent sur la blockchain Ethereum.
Cette application décentralisée (DApp) permet de gérer un système de vote transparent sur la blockchain Ethereum. Elle implémente un processus de vote complet, depuis l'enregistrement des électeurs jusqu'au dépouillement des résultats.
## Fonctionnalités
- Inscription des électeurs sur liste blanche par l'administrateur
- Enregistrement des propositions par les électeurs inscrits
- Vote pour les propositions préférées
- Vote pour les propositions
- Délégation de vote à d'autres électeurs
- Comptabilisation automatique des votes
- Vérification des résultats accessible à tous
- Période limitée pour l'enregistrement des propositions et le vote
## Technologies utilisées
- **Smart Contract**: Solidity 0.8.20, OpenZeppelin
- **Backend**: Hardhat (environnement de développement Ethereum)
- **Frontend**: Angular 17
- **Web3**: ethers.js v5.7
- **Styling**: Bootstrap 5
## Structure du Projet
- `contracts/` : Contient les smart contracts Solidity
- `frontend/` : Application React pour l'interface utilisateur
- `contracts/` : Smart contracts Solidity
- `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
- `test/` : Tests automatisés pour les smart contracts
## Installation
## Prérequis
- Node.js v16+
- npm v8+
- MetaMask ou un autre portefeuille Ethereum installé dans votre navigateur
## Installation et démarrage
1. **Cloner le dépôt et installer les dépendances**
```bash
git clone <url-du-repo>
cd voting-dapp
npm install
```
2. **Compiler les smart contracts**
```bash
npm run compile
```
3. **Démarrer un nœud Ethereum local**
```bash
# Installer les dépendances
npm run node
```
Ce nœud local s'exécutera à l'adresse `http://127.0.0.1:8545`.
4. **Déployer le contrat sur le nœud local**
Dans un nouveau terminal, exécutez:
```bash
npm run deploy
```
Notez l'adresse du contrat déployé, vous en aurez besoin pour configurer le frontend.
5. **Configurer et démarrer le frontend Angular**
```bash
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é:
```javascript
private contractAddress = '<ADRESSE_DU_CONTRAT_DÉPLOYÉ>';
```
Puis démarrez l'application:
# Démarrer le serveur de développement
```bash
npm run dev
```
## Déploiement
L'application sera accessible à l'adresse `http://localhost:4200`.
## Guide d'utilisation
### 1. Connexion à MetaMask
- 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)
### 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
## Tests
### Tests des smart contracts
```bash
npm test
```
Ces tests vérifient:
- L'enregistrement des électeurs
- Le cycle de vie du workflow
- La soumission de propositions
- Le processus de vote et de délégation
- Le dépouillement des résultats
### 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
3. **Test de l'utilisateur non autorisé**
- Connectez-vous avec un compte non enregistré
- Vérifiez que vous ne pouvez ni soumettre de propositions ni voter
## 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
2. **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
## Utilisation en production
Lien vers le déploiement public : [à venir]
Pour un déploiement en production, vous devrez:
## Démo
1. Modifier le fichier `hardhat.config.js` pour spécifier un réseau public (Mainnet, Goerli, etc.)
2. Ajouter une clé privée sécurisée ou utiliser un gestionnaire de clés
3. Déployer le contrat sur le réseau choisi
4. Configurer le frontend avec la nouvelle adresse de contrat
5. Déployer le frontend sur un service d'hébergement
Lien vers la vidéo de démo : [à venir]
## Dépannage
## Organisation du Projet
### Problèmes courants
Ce projet a été développé en suivant une architecture modulaire permettant de séparer clairement la logique de contrat de l'interface utilisateur.
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
## Fonctionnalités Supplémentaires
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
1. Système de délégation de vote
2. Possibilité de définir une date limite automatique pour les phases de vote
\ No newline at end of file
3. **MetaMask n'affiche pas la confirmation**
- Assurez-vous d'être sur le bon réseau (localhost:8545)
- Redémarrez MetaMask si nécessaire
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