Desarrollo de aplicaciones de pila completa de Ethereum

Soy desarrollador de solidez novato y estoy tratando de desarrollar una aplicación de votación en ethereum

Los requisitos de la aplicación son -

1) Debe haber un formulario de registro de candidatos y votantes.

2) El votante debe poder iniciar sesión utilizando algún mecanismo de autenticación como nombre de usuario, contraseña

3) Cada votante debe poder votar una sola vez

4) El resultado de la votación debe ser visible para todos.

Cosas que he probado -

Desarrollé un contrato inteligente para votar en el structtipo de candidato y votante en el que se almacenan los atributos respectivos de candidato y votante.

Los datos de candidatos y votantes se almacenan en una serie de estructuras. Las funciones están escritas en un contrato inteligente para votar, para contar el no. de votantes y candidatos, para insertar un votante y candidato, etc.

Problemas a los que me enfrento -

1) ¿Cómo debo autenticar al votante y al candidato?

2) ¿Debo crear una nueva cuenta usando personal.newAccount()el comando para cada candidato y votante?

3) ¿Puede una cuenta tener varias direcciones? para que pueda crear varias direcciones para diferentes votantes y candidatos?

4) Según la respuesta a esta pregunta message.sender() , se utilizará para autenticar al usuario. No puedo entender cómo cada usuario tendrá direcciones diferentes. ¿Es la dirección de la cuenta que podemos crear usando personal.newAccount()el comando?

5) Como ethereum es una cadena de bloques sin permiso, ¿cómo implementar/simular la autenticación y autorización con la ayuda de la cual se puede controlar quién puede participar en una red de cadena de bloques privada?

Respuestas (1)

Recientemente creé un pequeño proyecto, no relacionado con la votación, que podría responder algunas de sus preguntas. Verifique la carpeta 'html' en el archivo zip.

https://github.com/matheswarwan/capestoneEthILP/blob/master/Capestone_17%20April.zip

En su caso de uso, cada proyecto es una cuenta separada, ¿verdad? Corrígeme si estoy equivocado. Pero no puedo obtener cómo se realiza la autenticación para el aprobador del lago y el aprobador del bosque. La segunda cosa que he observado y que es un problema potencial es que está utilizando direcciones de cuenta y sus respectivas claves privadas para la autenticación, que son muy difíciles de recordar en comparación con el nombre de usuario y la contraseña. ¿Tenemos alguna otra solución?
El nombre de usuario+contraseña de DApp es algo fuera de línea de la red eth (es decir, específico de dapp) y no está relacionado con la red ethereum. Es algo así como, digamos que tiene una cuenta con zebpay, tendrá nombre de usuario + contraseña (+ móvil + autenticador) para iniciar sesión en zebpay. Una vez que inicie sesión, como parte de los datos de su perfil, zebpay mantendrá de forma segura una lista de números de cuenta de ethereum (0x123.. + contraseña + información de clave privada, etc.), que puede continuar y usar o agregar algunas cuentas más si lo desea. querer.
Para responder preguntas específicas: en mi caso de uso, la estructura Land no tendrá cuentas separadas. Se identifica por id de tipo bytes32. La autenticación para Lake/Forest no está configurada, es decir, cualquier persona con una dirección válida + gas puede aprobarlos (lo solucionará). Estoy usando dirección + contraseña (que es independiente de la clave privada; use web3.personal.newAccount ("contraseña") para configurar pwd), que el usuario puede recordar.
Como parte de la lista de aprobadores, he creado una función en el contrato como aquí y luego verifico de esta manera ` function isValidLakeApprover(dirección _lakeApprover) devuelve (bool){ return lakeApprover[_lakeApprover]; }`