Nous ajouterons un système de proposition et une option de vote pour les électeurs inscrits. Pour ce faire, nous aurons besoin d'un tableau pour stocker les propositions et d'une nouvelle fonction pour le vote.
Dans le contrat Voter
, ajoutez les lignes de code suivantes :
Solidity
// SPDX-License-Identifier : GPL-3.0
pragma solidity >=0.7.0 <0.9.0 ;
contract Voter {
struct Person {
bool voted;
uint vote;
}
struct Proposal {
string name;
uint voteCount;
}
Proposal[] public proposals ;
mapping(address => Person) public voters ;
function registerVoter() public {
voters[msg.sender].voted = false;
}
function addProposal(string memory _name) public {
proposals.push(Proposal(_name, 0));
}
function vote(uint _proposal) public {
require(_proposal < proposals.length, "Invalid proposal index."); // This is the added check
Person storage sender = voters[msg.sender];
require(!sender.voted, "Already voted.");
sender.voted = true;
sender.vote = _proposal;
proposals[_proposal].voteCount += 1;
}
}
Décortiquons le nouveau code :
Structure de la proposition : Nous avons ajouté une nouvelle structure, Proposal
, qui contient le nom de la proposition et le nombre de votes qu'elle a reçus.
Tableau des propositions : Le tableau des propositions
contient toutes les propositions du système de vote.
Fonction Add Proposal : La fonction addProposal
permet d'ajouter une nouvelle proposition au tableau des propositions
. Le nom de la proposition est transmis en tant que paramètre et le nombre de votes est initialement fixé à zéro.
Fonction de vote : La fonction de vote
permet à un électeur inscrit de voter. Il prend l'index d'une proposition comme paramètre et augmente le nombre de votes de la proposition d'une unité. Il vérifie également si l'électeur a déjà voté et met à jour son statut.
Maintenant que nous avons ajouté des fonctionnalités à notre contrat, il est temps de le compiler et de le tester. Dans l'IDE Remix, cliquez sur l'icône du compilateur Solidity sur la barre latérale gauche et cliquez ensuite sur le bouton "Compile".
Pour tester votre contrat, allez dans l'onglet "Deploy & Run Transactions" (celui qui se trouve sous l'icône du compilateur Solidity) et cliquez sur le bouton "Deploy". Une fois le contrat déployé, vous pouvez interagir avec lui en appelant ses fonctions à partir de cet onglet. Essayez de vous inscrire comme électeur, d'ajouter une proposition et de voter pour voir comment cela fonctionne.
Dans la prochaine leçon, nous mettrons en œuvre la fonctionnalité permettant de comptabiliser les votes et d'annoncer le résultat du processus de vote. D'ici là, n'hésitez pas à explorer et à expérimenter le contrat. Solidity offre de nombreuses autres fonctionnalités qui peuvent rendre votre contrat plus robuste et plus sûr. Bon codage !
Nous ajouterons un système de proposition et une option de vote pour les électeurs inscrits. Pour ce faire, nous aurons besoin d'un tableau pour stocker les propositions et d'une nouvelle fonction pour le vote.
Dans le contrat Voter
, ajoutez les lignes de code suivantes :
Solidity
// SPDX-License-Identifier : GPL-3.0
pragma solidity >=0.7.0 <0.9.0 ;
contract Voter {
struct Person {
bool voted;
uint vote;
}
struct Proposal {
string name;
uint voteCount;
}
Proposal[] public proposals ;
mapping(address => Person) public voters ;
function registerVoter() public {
voters[msg.sender].voted = false;
}
function addProposal(string memory _name) public {
proposals.push(Proposal(_name, 0));
}
function vote(uint _proposal) public {
require(_proposal < proposals.length, "Invalid proposal index."); // This is the added check
Person storage sender = voters[msg.sender];
require(!sender.voted, "Already voted.");
sender.voted = true;
sender.vote = _proposal;
proposals[_proposal].voteCount += 1;
}
}
Décortiquons le nouveau code :
Structure de la proposition : Nous avons ajouté une nouvelle structure, Proposal
, qui contient le nom de la proposition et le nombre de votes qu'elle a reçus.
Tableau des propositions : Le tableau des propositions
contient toutes les propositions du système de vote.
Fonction Add Proposal : La fonction addProposal
permet d'ajouter une nouvelle proposition au tableau des propositions
. Le nom de la proposition est transmis en tant que paramètre et le nombre de votes est initialement fixé à zéro.
Fonction de vote : La fonction de vote
permet à un électeur inscrit de voter. Il prend l'index d'une proposition comme paramètre et augmente le nombre de votes de la proposition d'une unité. Il vérifie également si l'électeur a déjà voté et met à jour son statut.
Maintenant que nous avons ajouté des fonctionnalités à notre contrat, il est temps de le compiler et de le tester. Dans l'IDE Remix, cliquez sur l'icône du compilateur Solidity sur la barre latérale gauche et cliquez ensuite sur le bouton "Compile".
Pour tester votre contrat, allez dans l'onglet "Deploy & Run Transactions" (celui qui se trouve sous l'icône du compilateur Solidity) et cliquez sur le bouton "Deploy". Une fois le contrat déployé, vous pouvez interagir avec lui en appelant ses fonctions à partir de cet onglet. Essayez de vous inscrire comme électeur, d'ajouter une proposition et de voter pour voir comment cela fonctionne.
Dans la prochaine leçon, nous mettrons en œuvre la fonctionnalité permettant de comptabiliser les votes et d'annoncer le résultat du processus de vote. D'ici là, n'hésitez pas à explorer et à expérimenter le contrat. Solidity offre de nombreuses autres fonctionnalités qui peuvent rendre votre contrat plus robuste et plus sûr. Bon codage !