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