Lição 2

Implementando o registo eleitoral e a emissão de votos

Nesta lição, continuaremos a desenvolver o nosso sistema de votação descentralizado implementando as funcionalidades de registo de eleitores e votação. Começaremos por expandir o nosso contrato de Eleitor e depois mergulharemos nos detalhes dos mapeamentos e matrizes do Solidity.

Expandir o Contrato de Eleitor

Vamos adicionar um sistema de propostas e uma opção para os eleitores registados votarem. Para isso, vamos precisar de uma matriz para armazenar as propostas e uma nova função para votar.

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

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

contrato Eleitor {
 Pessoa estruturada {
        bool voted;  
        uint vote;   
    }

    Estrutura Proposta {
        string name;   
        uint voteCount; 
    }

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

 função registerVoter () public {
        voters[msg.sender].voted = false;
    }

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

    função voto (uint _proposta) público { 
     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; 
    }
}

Compreender o Código

Vamos quebrar o novo código:

  1. Estrutura da proposta: Adicionámos uma nova estrutura, Proposta, que contém o nome da proposta e a contagem dos votos que recebeu.

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

  3. Adicionar função de proposta: A função AddProposta permite-nos adicionar uma nova proposta à matriz de propostas. O nome da proposta é passado como um parâmetro e a contagem de votos é inicialmente definida como zero.

  4. Função de voto: A função de voto permite que um eleitor registado dê o seu voto. Toma o índice de uma proposta como parâmetro e aumenta a contagem de votos da proposta em um. Verifica também se o eleitor já votou e atualiza o estatuto do eleitor.

Compilar e testar

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

Para testar o seu contrato, aceda ao separador “Implantar Transações de & Execução” (aquele abaixo do ícone do compilador Solidity) e clique no botão “Implantar”. Uma vez implementado o contrato, pode interagir com ele chamando as suas funções a partir deste separador. Tente registar um eleitor, adicionar uma proposta e votar para ver como funciona.

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

Exclusão de responsabilidade
* O investimento em criptomoedas envolve riscos significativos. Prossiga com cuidado. O curso não pretende ser um conselho de investimento.
* O curso é criado pelo autor que se juntou ao Gate Learn. Qualquer opinião partilhada pelo autor não representa o Gate Learn.
Catálogo
Lição 2

Implementando o registo eleitoral e a emissão de votos

Nesta lição, continuaremos a desenvolver o nosso sistema de votação descentralizado implementando as funcionalidades de registo de eleitores e votação. Começaremos por expandir o nosso contrato de Eleitor e depois mergulharemos nos detalhes dos mapeamentos e matrizes do Solidity.

Expandir o Contrato de Eleitor

Vamos adicionar um sistema de propostas e uma opção para os eleitores registados votarem. Para isso, vamos precisar de uma matriz para armazenar as propostas e uma nova função para votar.

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

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

contrato Eleitor {
 Pessoa estruturada {
        bool voted;  
        uint vote;   
    }

    Estrutura Proposta {
        string name;   
        uint voteCount; 
    }

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

 função registerVoter () public {
        voters[msg.sender].voted = false;
    }

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

    função voto (uint _proposta) público { 
     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; 
    }
}

Compreender o Código

Vamos quebrar o novo código:

  1. Estrutura da proposta: Adicionámos uma nova estrutura, Proposta, que contém o nome da proposta e a contagem dos votos que recebeu.

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

  3. Adicionar função de proposta: A função AddProposta permite-nos adicionar uma nova proposta à matriz de propostas. O nome da proposta é passado como um parâmetro e a contagem de votos é inicialmente definida como zero.

  4. Função de voto: A função de voto permite que um eleitor registado dê o seu voto. Toma o índice de uma proposta como parâmetro e aumenta a contagem de votos da proposta em um. Verifica também se o eleitor já votou e atualiza o estatuto do eleitor.

Compilar e testar

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

Para testar o seu contrato, aceda ao separador “Implantar Transações de & Execução” (aquele abaixo do ícone do compilador Solidity) e clique no botão “Implantar”. Uma vez implementado o contrato, pode interagir com ele chamando as suas funções a partir deste separador. Tente registar um eleitor, adicionar uma proposta e votar para ver como funciona.

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

Exclusão de responsabilidade
* O investimento em criptomoedas envolve riscos significativos. Prossiga com cuidado. O curso não pretende ser um conselho de investimento.
* O curso é criado pelo autor que se juntou ao Gate Learn. Qualquer opinião partilhada pelo autor não representa o 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.