Leçon 2

Implementando registro eleitoral e votação

Nesta lição, continuaremos desenvolvendo nosso sistema de votação descentralizado, implementando as funcionalidades de recenseamento eleitoral e emissão de votos. Começaremos expandindo nosso contrato Voter e depois nos aprofundaremos nos detalhes dos mapeamentos e matrizes do Solidity.

Expandindo o contrato eleitoral

Adicionaremos um sistema de propostas e uma opção para os eleitores registrados votarem. Para isso precisaremos de um array para armazenar as propostas e de uma nova função para votação.

No contrato Voter , adicione as seguintes linhas de código:

Solidez 
 // Identificador de licença SPDX: GPL-3.0 
 solidez pragma >=0.7.0 <0.9.0; 

 Eleitor de contrato { 
 struct Pessoa {
        bool voted;  
        uint vote;   
    }

    struct Proposta {
        string name;   
        uint voteCount; 
    }

    Proposta[] propostas públicas; 
 mapeamento(endereço => Pessoa) eleitores públicos; 

 funções RegisterVoter() public {
        voters[msg.sender].voted = false;
    }

    funções addProposal(string memory _name) public {
        proposals.push(Proposal(_name, 0));
    }

    funções 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; 
    }
}

Compreendendo o Código

Vamos detalhar o novo código:

  1. Estrutura da proposta: adicionamos uma nova estrutura, Proposal, que contém o nome da proposta e a contagem de votos que ela recebeu.

  2. Matriz de propostas: A matriz proposals contém todas as propostas no sistema de votação.

  3. Função Adicionar Proposta: A função addProposal nos permite adicionar uma nova proposta ao array proposals . O nome da proposta é passado como parâmetro e a contagem de votos é inicialmente zerada.

  4. Função de votação: A função vote permite que um eleitor registrado vote. Toma como parâmetro o índice de uma proposta e aumenta em um a contagem de votos da proposta. Também verifica se o eleitor já votou e atualiza a situação do eleitor.

Compilando e testando

Agora que adicionamos mais recursos ao nosso contrato, é hora de compilá-lo e testá-lo. No Remix IDE, clique no ícone do compilador Solidity na barra lateral esquerda e a seguir clique no botão “Compile”.

Para testar seu contrato, vá até a aba “Deploy & Run Transactions” (aquela abaixo do ícone do compilador Solidity) e clique no botão “Deploy”. Depois que o contrato for implantado, você poderá interagir com ele chamando suas funções nesta guia. Experimente registrar um eleitor, adicionar uma proposta e votar para ver como funciona.

Na próxima lição implementaremos a funcionalidade de contabilizar os votos e anunciar o resultado do processo de votação. Até então, fique à vontade para explorar e experimentar o contrato. O Solidity oferece muito mais recursos que podem tornar seu contrato mais robusto e seguro. Boa codificação!

Clause de non-responsabilité
* Les investissements en cryptomonnaies comportent des risques importants. Veuillez faire preuve de prudence. Le cours n'est pas destiné à fournir des conseils en investissement.
* Ce cours a été créé par l'auteur qui a rejoint Gate Learn. Toute opinion partagée par l'auteur ne représente pas Gate Learn.
Catalogue
Leçon 2

Implementando registro eleitoral e votação

Nesta lição, continuaremos desenvolvendo nosso sistema de votação descentralizado, implementando as funcionalidades de recenseamento eleitoral e emissão de votos. Começaremos expandindo nosso contrato Voter e depois nos aprofundaremos nos detalhes dos mapeamentos e matrizes do Solidity.

Expandindo o contrato eleitoral

Adicionaremos um sistema de propostas e uma opção para os eleitores registrados votarem. Para isso precisaremos de um array para armazenar as propostas e de uma nova função para votação.

No contrato Voter , adicione as seguintes linhas de código:

Solidez 
 // Identificador de licença SPDX: GPL-3.0 
 solidez pragma >=0.7.0 <0.9.0; 

 Eleitor de contrato { 
 struct Pessoa {
        bool voted;  
        uint vote;   
    }

    struct Proposta {
        string name;   
        uint voteCount; 
    }

    Proposta[] propostas públicas; 
 mapeamento(endereço => Pessoa) eleitores públicos; 

 funções RegisterVoter() public {
        voters[msg.sender].voted = false;
    }

    funções addProposal(string memory _name) public {
        proposals.push(Proposal(_name, 0));
    }

    funções 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; 
    }
}

Compreendendo o Código

Vamos detalhar o novo código:

  1. Estrutura da proposta: adicionamos uma nova estrutura, Proposal, que contém o nome da proposta e a contagem de votos que ela recebeu.

  2. Matriz de propostas: A matriz proposals contém todas as propostas no sistema de votação.

  3. Função Adicionar Proposta: A função addProposal nos permite adicionar uma nova proposta ao array proposals . O nome da proposta é passado como parâmetro e a contagem de votos é inicialmente zerada.

  4. Função de votação: A função vote permite que um eleitor registrado vote. Toma como parâmetro o índice de uma proposta e aumenta em um a contagem de votos da proposta. Também verifica se o eleitor já votou e atualiza a situação do eleitor.

Compilando e testando

Agora que adicionamos mais recursos ao nosso contrato, é hora de compilá-lo e testá-lo. No Remix IDE, clique no ícone do compilador Solidity na barra lateral esquerda e a seguir clique no botão “Compile”.

Para testar seu contrato, vá até a aba “Deploy & Run Transactions” (aquela abaixo do ícone do compilador Solidity) e clique no botão “Deploy”. Depois que o contrato for implantado, você poderá interagir com ele chamando suas funções nesta guia. Experimente registrar um eleitor, adicionar uma proposta e votar para ver como funciona.

Na próxima lição implementaremos a funcionalidade de contabilizar os votos e anunciar o resultado do processo de votação. Até então, fique à vontade para explorar e experimentar o contrato. O Solidity oferece muito mais recursos que podem tornar seu contrato mais robusto e seguro. Boa codificação!

Clause de non-responsabilité
* Les investissements en cryptomonnaies comportent des risques importants. Veuillez faire preuve de prudence. Le cours n'est pas destiné à fournir des conseils en investissement.
* Ce cours a été créé par l'auteur qui a rejoint Gate Learn. Toute opinion partagée par l'auteur ne représente pas Gate Learn.
It seems that you are attempting to access our services from a Restricted Location where Gate is unable to provide services. We apologize for any inconvenience this may cause. Currently, the Restricted Locations include but not limited to: the United States of America, Canada, Cambodia, Thailand, Cuba, Iran, North Korea and so on. For more information regarding the Restricted Locations, please refer to the User Agreement. Should you have any other questions, please contact our Customer Support Team.