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;
}
}
Vamos detalhar o novo código:
Estrutura da proposta: adicionamos uma nova estrutura, Proposal
, que contém o nome da proposta e a contagem de votos que ela recebeu.
Matriz de propostas: A matriz proposals
contém todas as propostas no sistema de votação.
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.
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.
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!
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;
}
}
Vamos detalhar o novo código:
Estrutura da proposta: adicionamos uma nova estrutura, Proposal
, que contém o nome da proposta e a contagem de votos que ela recebeu.
Matriz de propostas: A matriz proposals
contém todas as propostas no sistema de votação.
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.
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.
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!