Lesson 2

Implementación del registro de votantes y emisión de votos

En esta lección, continuaremos desarrollando nuestro sistema de votación descentralizado implementando las funcionalidades para el registro de votantes y la emisión de votos. Comenzaremos ampliando nuestro contrato de votantes y luego profundizaremos en los detalles de las asignaciones y matrices de Solidity.

Ampliación del contrato de votantes

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; 
    }
}

Comprender el código

Analicemos el nuevo código:

  1. Estructura de propuesta: hemos agregado una nueva estructura, Proposal, que contiene el nombre de la propuesta y el recuento de votos que ha recibido.

  2. Matriz de propuestas: la matriz proposals contiene todas las propuestas en el sistema de votación.

  3. 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.

  4. 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.

Compilación y prueba

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!

Disclaimer
* Crypto investment involves significant risks. Please proceed with caution. The course is not intended as investment advice.
* The course is created by the author who has joined Gate Learn. Any opinion shared by the author does not represent Gate Learn.
Catalog
Lesson 2

Implementación del registro de votantes y emisión de votos

En esta lección, continuaremos desarrollando nuestro sistema de votación descentralizado implementando las funcionalidades para el registro de votantes y la emisión de votos. Comenzaremos ampliando nuestro contrato de votantes y luego profundizaremos en los detalles de las asignaciones y matrices de Solidity.

Ampliación del contrato de votantes

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; 
    }
}

Comprender el código

Analicemos el nuevo código:

  1. Estructura de propuesta: hemos agregado una nueva estructura, Proposal, que contiene el nombre de la propuesta y el recuento de votos que ha recibido.

  2. Matriz de propuestas: la matriz proposals contiene todas las propuestas en el sistema de votación.

  3. 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.

  4. 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.

Compilación y prueba

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!

Disclaimer
* Crypto investment involves significant risks. Please proceed with caution. The course is not intended as investment advice.
* The course is created by the author who has joined Gate Learn. Any opinion shared by the author does not represent Gate Learn.