レッスン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!

免責事項
* 暗号資産投資には重大なリスクが伴います。注意して進めてください。このコースは投資アドバイスを目的としたものではありません。
※ このコースはGate Learnに参加しているメンバーが作成したものです。作成者が共有した意見はGate Learnを代表するものではありません。
カタログ
レッスン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!

免責事項
* 暗号資産投資には重大なリスクが伴います。注意して進めてください。このコースは投資アドバイスを目的としたものではありません。
※ このコースはGate Learnに参加しているメンバーが作成したものです。作成者が共有した意見はGate Learnを代表するものではありません。