README.md 5.81 KB
Newer Older
timothe 2004's avatar
timothe 2004 committed
1 2
# DApp de Vote

timothe 2004's avatar
timothe 2004 committed
3
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.
timothe 2004's avatar
timothe 2004 committed
4 5 6 7 8

## Fonctionnalités

- Inscription des électeurs sur liste blanche par l'administrateur
- Enregistrement des propositions par les électeurs inscrits
timothe 2004's avatar
timothe 2004 committed
9 10
- Vote pour les propositions
- Délégation de vote à d'autres électeurs
timothe 2004's avatar
timothe 2004 committed
11 12
- Comptabilisation automatique des votes
- Vérification des résultats accessible à tous
timothe 2004's avatar
timothe 2004 committed
13 14 15 16 17 18 19 20 21
- 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
timothe 2004's avatar
timothe 2004 committed
22 23 24

## Structure du Projet

timothe 2004's avatar
timothe 2004 committed
25 26 27 28 29
- `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
timothe 2004's avatar
timothe 2004 committed
30 31
- `test/` : Tests automatisés pour les smart contracts

timothe 2004's avatar
timothe 2004 committed
32 33 34 35 36 37 38 39 40
## 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**
timothe 2004's avatar
timothe 2004 committed
41 42

```bash
timothe 2004's avatar
timothe 2004 committed
43 44
git clone <url-du-repo>
cd voting-dapp
timothe 2004's avatar
timothe 2004 committed
45
npm install
timothe 2004's avatar
timothe 2004 committed
46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83
```

2. **Compiler les smart contracts**

```bash
npm run compile
```

3. **Démarrer un nœud Ethereum local**

```bash
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É>';
```
timothe 2004's avatar
timothe 2004 committed
84

timothe 2004's avatar
timothe 2004 committed
85 86 87
Puis démarrez l'application:

```bash
timothe 2004's avatar
timothe 2004 committed
88 89 90
npm run dev
```

timothe 2004's avatar
timothe 2004 committed
91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174
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

Pour un déploiement en production, vous devrez:

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
timothe 2004's avatar
timothe 2004 committed
175

timothe 2004's avatar
timothe 2004 committed
176
## Dépannage
timothe 2004's avatar
timothe 2004 committed
177

timothe 2004's avatar
timothe 2004 committed
178
### Problèmes courants
timothe 2004's avatar
timothe 2004 committed
179

timothe 2004's avatar
timothe 2004 committed
180 181 182
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
timothe 2004's avatar
timothe 2004 committed
183

timothe 2004's avatar
timothe 2004 committed
184 185 186
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
timothe 2004's avatar
timothe 2004 committed
187

timothe 2004's avatar
timothe 2004 committed
188 189 190
3. **MetaMask n'affiche pas la confirmation**
   - Assurez-vous d'être sur le bon réseau (localhost:8545)
   - Redémarrez MetaMask si nécessaire
timothe 2004's avatar
timothe 2004 committed
191

timothe 2004's avatar
timothe 2004 committed
192
### Support
timothe 2004's avatar
timothe 2004 committed
193

timothe 2004's avatar
timothe 2004 committed
194
Pour toute question ou problème, veuillez ouvrir une issue sur le dépôt GitHub.