Lição 2

Mise en œuvre de l'inscription des électeurs et du vote par correspondance

Dans cette leçon, nous continuerons à développer notre système de vote décentralisé en mettant en œuvre les fonctionnalités d'inscription des électeurs et de vote par correspondance. Nous commencerons par développer notre contrat Voter, puis nous nous plongerons dans les détails des mappings et des tableaux de Solidity.

Élargir le contrat de l'électeur

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; 
    }
}

Comprendre le code

Décortiquons le nouveau code :

  1. 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.

  2. Tableau des propositions : Le tableau des propositions contient toutes les propositions du système de vote.

  3. 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.

  4. 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.

Compilation et tests

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 !

Isenção de responsabilidade
* O investimento em criptomoedas envolve grandes riscos. Prossiga com cautela. O curso não se destina a servir de orientação para investimentos.
* O curso foi criado pelo autor que entrou para o Gate Learn. As opiniões compartilhadas pelo autor não representam o Gate Learn.
Catálogo
Lição 2

Mise en œuvre de l'inscription des électeurs et du vote par correspondance

Dans cette leçon, nous continuerons à développer notre système de vote décentralisé en mettant en œuvre les fonctionnalités d'inscription des électeurs et de vote par correspondance. Nous commencerons par développer notre contrat Voter, puis nous nous plongerons dans les détails des mappings et des tableaux de Solidity.

Élargir le contrat de l'électeur

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; 
    }
}

Comprendre le code

Décortiquons le nouveau code :

  1. 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.

  2. Tableau des propositions : Le tableau des propositions contient toutes les propositions du système de vote.

  3. 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.

  4. 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.

Compilation et tests

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 !

Isenção de responsabilidade
* O investimento em criptomoedas envolve grandes riscos. Prossiga com cautela. O curso não se destina a servir de orientação para investimentos.
* O curso foi criado pelo autor que entrou para o Gate Learn. As opiniões compartilhadas pelo autor não representam o Gate Learn.