Este proyecto desarrolla un sistema de votación electrónica seguro y transparente utilizando tecnología blockchain. El sistema permite la participación de diferentes roles de usuario y asegura que los resultados de la votación se mantengan confidenciales hasta el cierre oficial de la elección por parte del Administrador Electoral.
El flujo del sistema comienza con la creación de una elección por parte del Administrador Electoral. La elección puede ser para una posición de cargo específica, como presidente de una organización. El Administrador Electoral configura los detalles de la elección, incluyendo la fecha de inicio y cierre de la votación.
Una vez creada la elección, los usuarios pueden registrarse en el sistema, eligiendo uno de los dos roles disponibles: candidato o votante. Un usuario no puede registrarse en ambos roles simultáneamente.
Los usuarios que desean postularse para la posición de presidente se registran como candidatos. Su registro incluye información relevante que será verificada y aprobada por el Administrador Electoral.
Los usuarios que desean participar en la elección como votantes se registran proporcionando su información personal. Esta información será verificada y aprobada por el Administrador Electoral para asegurar que solo los votantes autorizados puedan participar en la elección.
El sistema contempla tres roles principales:
- Administrador Electoral: Responsable de configurar las elecciones, verificar los registros de votantes y candidatos, generar reportes y gestionar el sistema en su totalidad. Tiene la autoridad para aprobar o rechazar registros y configurar los parámetros de cada elección.
- Candidato: Los individuos que se postulan para la posición de presidente. Pueden registrarse y presentar su candidatura para ser votados por los electores.
- Votante: Los usuarios que emitirán su voto en la elección. Cada votante registrado y aprobado tendrá la capacidad de votar de manera segura y anónima.
- Inicio de la Elección: La votación comienza una vez alcanzada la fecha de inicio configurada por el Administrador Electoral.
- Fin de la Elección: La votación se cierra al llegar a la fecha de fin configurada, pero los resultados no son visibles hasta que esto suceda.
- Conteo y Publicación de Resultados: Los votos serán contados y los resultados serán publicados de manera transparente, mostrando el número de votos recibidos por cada candidato y los resultados finales.
Para garantizar que los resultados no sean visibles hasta el cierre de la elección y asegurar el anonimato de los votos, no se podrá conocer o calcular la votación hasta que la elección haya concluido.
El sistema genera varios reportes desde otro contrato con los permisos pertinentes:
- Reporte de Registro de Votantes: Detalla los votantes registrados y aprobados para una determinada elección.
- Reporte de Participación: Indica la cantidad de votos emitidos y el porcentaje de participación, una vez cerrada la elección.
- Reporte de Resultado: Muestra el número de votos recibidos por cada candidato y los resultados finales, una vez cerrada la elección. Este reporte muestra de manera descendente los votos, donde el primer candidato es el ganador de la elección.
- Cobertura del 85% en ambos contratos.
- Todo el código debe incluir documentación estándar.
- Las direcciones (address) de ambos contratos deben estar desplegadas y probadas, es decir, funcionales.
- Testnet: Rococo.
- Adrres contrato Reporte: 0x777a7c782b33e6bad6e3d6c0cce906c8471819e7e687bc84b556b5b2df4901e7
- Adrres contrato Sistema Votacion: 0x716a3f381346fdeeafa18aec3bf1e23476a84df9bb7ab6763558b5d2f4bf0588
-
Clonar el repositorio:
git clone https://github.com/NahuelArn/Sistema-de-Votacion-Electronica-con-Blockchain.git cd Sistema-de-Votacion-Electronica-con-Blockchain/
-
Instalar las dependencias:
cargo build
-
Desplegar los contratos:
cargo contract build
- Configurar y crear una elección.
- Registrar candidatos y votantes.
- Iniciar y finalizar la votación según las fechas configuradas.
- Generar y revisar los reportes.
Este proyecto está licenciado bajo los términos de la MIT License.