Paquete de Contratos Inteligentes escritos en AssemblyScript para un sistema de votación online usando blockchain.
El objetivo de esta aplicación es crear un sistema de votación simple y seguro. Se usa NEAR como protocolo de blockchain.
Puedes acceder al prototipo de la aplicacion en este enlace, o descarga la aplicación justinmind y abre en ella el archivo blockVote.vp de este repositorio.
- Clona este repo, antes de compilar el código, necesitarás instalar Node.js ≥ 12
- En caso de ser necesario, instala yarn vía npm:
npm install --global yarn
. - Ejecuta
yarn
desde el directorio raiz del repo de la aplicación.
Para este proyecto desarrollamos 4 contratos inteligentes para satisacer la logica de negocio, el código se encuentra en ../assembly/index.ts
. Los contratos son:
- incrementVotes: Incrementa el voto de un candidato.
- getVotes: Obtiene los votos de un usucandidatoario
- recordUser: Registra que un usuario ha votado.
- userDidParticipate: Verifica si un usuario ya votó.
- Tests: El código de pruebas se encuentra en
../assembly/__tests__/main.spec.ts
. - Primero compila el paquete usando
yarn asb
. - Después ejecuta
yarn test
para correr los tests. Esto corre las pruebas estándar de AssemblyScript tests usando as-pect.
- Se verifica primero que nadie haya votando por un candidato.
- Se extrae la cantidad de votos de un candidato y se aumentan los votos en una unidad.
- Se verifica que un usuario no ha votado.
- Se verifica que un usuario ha votado.
- Desde la raíz del proyecto, deployar el paquete con
near dev-deploy build/release/votescontract.wasm
. - Copiar el accountIdy sustituirlo en los siguientes comandos para probar el funcionamiento de los contratos.
near call <accountId> incrementVotes '{"candidate":"amlo"}' --account-id <accountId>
near view <accountId> getVotes '{"candidate":"amlo"}' --account-id <accountId>
near call <accountId> recordUser '{"user":"jorge"}' --account-id <accountId>
near view <accountId> userDidParticipate '{"user":"jorge"}' --account-id <accountId>