Este es el trabajo final de la materia Seminario de Lenguajes opción Rust, consta de un sistema de votación electrónica seguro y transparente utilizando tecnología blockchain. Este sistema permitirá la participación de diferentes roles de usuario y asegurará que los resultados de la votación se mantengan confidenciales hasta el cierre oficial de la elección.
El sistema está conformado por dos contratos inteligentes basados en Ink!, uno se encarga de administrar la elección, junto con los candidatos y sus electores, y otro se encarga de reportar resultados e información sobre el primero.
Este contrato se encarga de lo siguiente:
- Administrar usuarios.
- Gestionar roles.
- Controlar y verificar permisos.
- Llevar a cabo elecciones de manera transparente y segura.
Entre otras cosas.
Para lograr lo anterior, el contrato recibe los siguientes mensajes:
registrarUsuario
: Registra un usuario en el sistema.registrarEnEleccion
: Registra a un usuario del sistema en una elección determinada.crearEleccion
: Permite al administrador del sistema crear una elección.delegarAdmin
: Permite ceder los privilegios de administrador.consultarMiembrosNoVerificados
: Consulta los electores o candidatos pendientes de aprobación.consultarCandidatosDisponibles
: Consulta los candidatos aprobados para una elección.cambiarEstadoAprobacion
: Permite al administrador aprobar o rechazar a un elector o candidato.consultarEstado
: Consulta el estado actual de una elección.votar
: Permite a un elector emitir su voto.consultarInfoVotantesAprobados
: Consulta la información de los electores aprobados para una elección.establecerContratoReportes
: Establece el contrato que podrá acceder a información del sistema.
Nota: En la anterior lista se obviaron mensajes que son usados exclusivamente por el otro contrato o internamente.
Este contrato se encarga de reportar información de una elección mediante los siguientes mensajes:
reporteVotantes
: Informa los electores aprobados.reporteParticipacion
: Informa la cantidad de votos emitidos y porcentaje de participación.reporteResultado
: Informa los candidatos y sus votos obtenidos.
Para iniciar el sistema correctamente se deben seguir los pasos descritos a continuación:
-
Compilar ambos contratos:
$ cargo contract build
-
Instanciar el sistema de votación:
-
Instanciar el contrato de reportes con el sistema de votación:
-
Establecer el contrato de reportes en el sistema de votación:
Los integrantes del trabajo son: