Vamos começar adicionando a função winningProposal
ao nosso contrato. Esta função irá iterar sobre todas as propostas e retornar aquela com mais votos. Além disso, criaremos uma função winnerName
para retornar o nome da proposta vencedora. Aqui está a versão final do nosso contrato:
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;
}
funções winProposal() retornos de visualização pública (uint winProposal_) {
uint winVoteCount = 0;
para (uint p = 0; p < propostas.comprimento; p++) {
if (proposals[p].voteCount > winVoteCount) {
winningVoteCount = proposals[p].voteCount;
winningProposal_ = p;
}
}
}
função vencedorName() retornos de visualização pública (string memória vencedorName_) {
winnerName_ = proposals[winningProposal()].name;
}
}
Vamos explicar as novas adições:
Função de proposta vencedora: esta função percorre todas as propostas e encontra aquela com a maior contagem de votos. Retorna o índice desta proposta no array proposals
. É uma função view
, o que significa que não modifica o estado do contrato e apenas lê os dados.
Função Winner Name: Esta função chama a função winningProposal
para obter o índice da proposta vencedora e então retorna o nome desta proposta.
Compile seu contrato clicando no ícone do compilador Solidity na barra lateral esquerda e depois clicando no botão “Compilar”.
Implante seu contrato na guia “Implantar e executar transações” e interaja com ele. Cadastre alguns eleitores, adicione algumas propostas, vote e, por fim, confira o vencedor.
Na próxima lição, discutiremos as interações contratuais e o registro de eventos. Aprenderemos como os contratos podem interagir entre si e como registrar e monitorar atividades no blockchain. Parabéns por construir seu primeiro sistema de votação descentralizado no Ethereum!
Vamos começar adicionando a função winningProposal
ao nosso contrato. Esta função irá iterar sobre todas as propostas e retornar aquela com mais votos. Além disso, criaremos uma função winnerName
para retornar o nome da proposta vencedora. Aqui está a versão final do nosso contrato:
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;
}
funções winProposal() retornos de visualização pública (uint winProposal_) {
uint winVoteCount = 0;
para (uint p = 0; p < propostas.comprimento; p++) {
if (proposals[p].voteCount > winVoteCount) {
winningVoteCount = proposals[p].voteCount;
winningProposal_ = p;
}
}
}
função vencedorName() retornos de visualização pública (string memória vencedorName_) {
winnerName_ = proposals[winningProposal()].name;
}
}
Vamos explicar as novas adições:
Função de proposta vencedora: esta função percorre todas as propostas e encontra aquela com a maior contagem de votos. Retorna o índice desta proposta no array proposals
. É uma função view
, o que significa que não modifica o estado do contrato e apenas lê os dados.
Função Winner Name: Esta função chama a função winningProposal
para obter o índice da proposta vencedora e então retorna o nome desta proposta.
Compile seu contrato clicando no ícone do compilador Solidity na barra lateral esquerda e depois clicando no botão “Compilar”.
Implante seu contrato na guia “Implantar e executar transações” e interaja com ele. Cadastre alguns eleitores, adicione algumas propostas, vote e, por fim, confira o vencedor.
Na próxima lição, discutiremos as interações contratuais e o registro de eventos. Aprenderemos como os contratos podem interagir entre si e como registrar e monitorar atividades no blockchain. Parabéns por construir seu primeiro sistema de votação descentralizado no Ethereum!