Lección 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!

Descargo de responsabilidad
* La inversión en criptomonedas implica riesgos significativos. Proceda con precaución. El curso no pretende ser un asesoramiento de inversión.
* El curso ha sido creado por el autor que se ha unido a Gate Learn. Cualquier opinión compartida por el autor no representa a Gate Learn.
Catálogo
Lección 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!

Descargo de responsabilidad
* La inversión en criptomonedas implica riesgos significativos. Proceda con precaución. El curso no pretende ser un asesoramiento de inversión.
* El curso ha sido creado por el autor que se ha unido a Gate Learn. Cualquier opinión compartida por el autor no representa a Gate Learn.
It seems that you are attempting to access our services from a Restricted Location where Gate.io is unable to provide services. We apologize for any inconvenience this may cause. Currently, the Restricted Locations include but not limited to: the United States of America, Canada, Cambodia, Thailand, Cuba, Iran, North Korea and so on. For more information regarding the Restricted Locations, please refer to the User Agreement. Should you have any other questions, please contact our Customer Support Team.