Last active
December 1, 2020 01:28
-
-
Save jdmedeiros/9e1452a0f73d9dca4766e8b8f82469cc to your computer and use it in GitHub Desktop.
Eleição do delegado de turma do curso GRSI 2020/2021 na ENTA - Escola de Novas Tecnologias dos Açores usando o Ethereum blockchain
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// SPDX-License-Identifier: GPL-3.0 | |
pragma solidity 0.7.5; | |
pragma experimental ABIEncoderV2; | |
// https://kovan.etherscan.io/address/0x18c0417f85ae320d35138b0bb289532156a92356 | |
contract ElegerDelegado { | |
string[15] nomes; | |
struct Eleitor { | |
uint autorizado; | |
bool votou; | |
} | |
struct Candidato { | |
string nome; | |
uint votos; | |
} | |
address formador; | |
mapping(address => Eleitor) eleitores; | |
Candidato[15] public candidatos; | |
constructor() { | |
nomes[0] = "Alexandre"; | |
nomes[1] = "Bruno"; | |
nomes[2] = "Carlos"; | |
nomes[3] = "Carreira"; | |
nomes[4] = "Freitas"; | |
nomes[5] = "Mendonca"; | |
nomes[6] = "Edgar"; | |
nomes[7] = "Francisco"; | |
nomes[8] = "Goncalo"; | |
nomes[9] = "Henrique"; | |
nomes[10] = "Joao"; | |
nomes[11] = "Leandro"; | |
nomes[12] = "Messias"; | |
nomes[13] = "Roberto"; | |
nomes[14] = "Ruben"; | |
formador = msg.sender; | |
eleitores[formador].autorizado = 1; | |
for (uint i = 0; i < nomes.length; i++) { | |
candidatos[i].nome = nomes[i]; | |
candidatos[i].votos = 0; | |
} | |
autorizarEleitor(0xFd7F22da2928a57968B783a82Df8EebFccBB5bCE); | |
autorizarEleitor(0x6d2313648035d5080014839f3059E6dB12F492e0); | |
autorizarEleitor(0x16cD420a18AaF2f4B7E5E9409c7eB30fF59E89c4); | |
autorizarEleitor(0x935162877B880b26bdE2454B9dEB9eb40fc28585); | |
autorizarEleitor(0xB335ff85539011d6d23540535F32C2ac07f740E6); | |
autorizarEleitor(0xb499e4ADa0B3158181a36ca99F54D2e24F6cE0E0); | |
autorizarEleitor(0xBa473b1e76727252E6D582f8d3143bDd36DA7f8e); | |
autorizarEleitor(0xe96Bc7dfCbEce412844a6061cd4cC3Af15fD4897); | |
autorizarEleitor(0x2D268DD4c8D3863759215D9244DF632c76F4db74); | |
autorizarEleitor(0x1db8FFEf75e93c1F72487CC9F2EeF0dc69072DAd); | |
autorizarEleitor(0xF8963e9B8F2E8201758E58d89C7b3d7f3e66f12e); | |
autorizarEleitor(0xd10D34bc328161b11da26ea464D51aA5cF171047); | |
autorizarEleitor(0x83782A472E9636ca7a4BBC41b9B45FDAa609Cd51); | |
autorizarEleitor(0x4dCA4C4392A52b87BA18fDa072C8c830B1c0D3e3); | |
autorizarEleitor(0xCEA1A0bae978566c8d9701872C98c47169176f6e); | |
autorizarEleitor(0xAb61f978367b601db3d0899429aCcAB2A5319De7); | |
} | |
function autorizarEleitor(address oEleitor) private { | |
eleitores[oEleitor].autorizado = 1; | |
} | |
function votar(string memory candidato) public { | |
uint idxCandidato = validarCandidato(candidato); | |
Eleitor storage remetente = eleitores[msg.sender]; | |
require(remetente.autorizado != 0, unicode"Não está autorizado a votar."); | |
require(!remetente.votou, unicode"Eleitor já votou."); | |
require( | |
idxCandidato < nomes.length, | |
string(abi.encodePacked("Candidato '", candidato, "' inexistente!")) | |
); | |
remetente.votou = true; | |
candidatos[idxCandidato].votos += remetente.autorizado; | |
} | |
function validarCandidato(string memory oCandidato) private view returns(uint) { | |
uint i; | |
for (i = 0; i < nomes.length; i++) { | |
if (keccak256(abi.encodePacked(nomes[i])) == keccak256(abi.encodePacked(oCandidato))) { | |
return i; | |
} | |
} | |
return i; | |
} | |
function resultados() public view | |
returns(string memory vencedor) { | |
vencedor = candidatos[0].nome; | |
uint quantosVotos = candidatos[0].votos; | |
for (uint p = 1; p < candidatos.length; p++) { | |
if (candidatos[p].votos > quantosVotos) { | |
quantosVotos = candidatos[p].votos; | |
vencedor = candidatos[p].nome; | |
} | |
else if (candidatos[p].votos == quantosVotos) { | |
vencedor = unicode"Há mais do que um candidato com o mesmo número de votos!"; | |
} | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment