Agregaremos un sistema de propuestas y una opción para que los votantes registrados voten. Para ello, necesitaremos una matriz para almacenar las propuestas y una nueva función para votar.
En el contrato Voter
, agregue las siguientes líneas de código:
Solidez
// Identificador de licencia SPDX: GPL-3.0
pragma solidez >=0.7.0 <0.9.0;
contrato Votante {
struct Persona {
bool voted;
uint vote;
}
struct Propuesta {
string name;
uint voteCount;
}
Propuesta[] propuestas públicas;
mapeo (dirección => Persona) votantes públicos;
función registrarVoter() público {
voters[msg.sender].voted = false;
}
función agregarPropuesta(cadena memoria _nombre) público {
proposals.push(Proposal(_name, 0));
}
función votar(uint _propuesta) 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;
}
}
Analicemos el nuevo código:
Estructura de propuesta: hemos agregado una nueva estructura, Proposal
, que contiene el nombre de la propuesta y el recuento de votos que ha recibido.
Matriz de propuestas: la matriz proposals
contiene todas las propuestas en el sistema de votación.
Función Agregar propuesta: La función addProposal
nos permite agregar una nueva propuesta a la matriz proposals
. El nombre de la propuesta se pasa como parámetro y el recuento de votos se establece inicialmente en cero.
Función de voto: La función vote
permite a un votante registrado emitir su voto. Toma el índice de una propuesta como parámetro y aumenta el recuento de votos de la propuesta en uno. También verifica si el elector ya votó y actualiza el estado del elector.
Ahora que hemos agregado más funciones a nuestro contrato, es hora de compilarlo y probarlo. En Remix IDE, haga clic en el icono del compilador Solidity en la barra lateral izquierda y luego haga clic en el botón "Compilar".
Para probar su contrato, vaya a la pestaña "Implementar y ejecutar transacciones" (la que se encuentra debajo del icono del compilador de Solidity) y haga clic en el botón "Implementar". Una vez implementado el contrato, puede interactuar con él llamando a sus funciones desde esta pestaña. Intente registrar a un votante, agregar una propuesta y emitir un voto para ver cómo funciona.
En la próxima lección, implementaremos la funcionalidad para contar los votos y anunciar el resultado del proceso de votación. Hasta entonces, siéntete libre de explorar y experimentar con el contrato. Solidity ofrece muchas más funciones que pueden hacer que su contrato sea más sólido y seguro. ¡Feliz codificación!
Agregaremos un sistema de propuestas y una opción para que los votantes registrados voten. Para ello, necesitaremos una matriz para almacenar las propuestas y una nueva función para votar.
En el contrato Voter
, agregue las siguientes líneas de código:
Solidez
// Identificador de licencia SPDX: GPL-3.0
pragma solidez >=0.7.0 <0.9.0;
contrato Votante {
struct Persona {
bool voted;
uint vote;
}
struct Propuesta {
string name;
uint voteCount;
}
Propuesta[] propuestas públicas;
mapeo (dirección => Persona) votantes públicos;
función registrarVoter() público {
voters[msg.sender].voted = false;
}
función agregarPropuesta(cadena memoria _nombre) público {
proposals.push(Proposal(_name, 0));
}
función votar(uint _propuesta) 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;
}
}
Analicemos el nuevo código:
Estructura de propuesta: hemos agregado una nueva estructura, Proposal
, que contiene el nombre de la propuesta y el recuento de votos que ha recibido.
Matriz de propuestas: la matriz proposals
contiene todas las propuestas en el sistema de votación.
Función Agregar propuesta: La función addProposal
nos permite agregar una nueva propuesta a la matriz proposals
. El nombre de la propuesta se pasa como parámetro y el recuento de votos se establece inicialmente en cero.
Función de voto: La función vote
permite a un votante registrado emitir su voto. Toma el índice de una propuesta como parámetro y aumenta el recuento de votos de la propuesta en uno. También verifica si el elector ya votó y actualiza el estado del elector.
Ahora que hemos agregado más funciones a nuestro contrato, es hora de compilarlo y probarlo. En Remix IDE, haga clic en el icono del compilador Solidity en la barra lateral izquierda y luego haga clic en el botón "Compilar".
Para probar su contrato, vaya a la pestaña "Implementar y ejecutar transacciones" (la que se encuentra debajo del icono del compilador de Solidity) y haga clic en el botón "Implementar". Una vez implementado el contrato, puede interactuar con él llamando a sus funciones desde esta pestaña. Intente registrar a un votante, agregar una propuesta y emitir un voto para ver cómo funciona.
En la próxima lección, implementaremos la funcionalidad para contar los votos y anunciar el resultado del proceso de votación. Hasta entonces, siéntete libre de explorar y experimentar con el contrato. Solidity ofrece muchas más funciones que pueden hacer que su contrato sea más sólido y seguro. ¡Feliz codificación!