¿Cómo conectar un usuario de la aplicación de Android a la red ethereum?

Estoy trabajando en el desarrollo de una aplicación descentralizada que requiere que cada usuario de la aplicación de Android tenga una cuenta separada que contenga su información de saldo de éter y otra información específica del usuario.

Leí sobre el concepto light-clientsy full-nodesme enteré de que el cliente ligero oficial de Ethereum todavía está en desarrollo.

Luego me topé con estos artículos sobre el uso de ethereum en Android y Iphone . Entonces sugirieron crear un Full-Ethereumnodo y hacer que su aplicación interactúe con este nodo usando JSON-RPC protocol. Así que se me ocurrió la siguiente arquitectura:

Aplicación de Android (contiene la clave privada y los datos del usuario) ----> Servidor de nodo completo de Ethereum (Configurar usando clientes disponibles para ethereum (en python)) -----> Máquina virtual de Ethereum.

Tengo algunas preguntas de la siguiente manera:

  1. ¿Es segura la arquitectura anterior? (Qué sucede si el servidor está comprometido o el servidor está sesgado)

  2. ¿Necesito crear un cliente Ethereum de nodo completo correspondiente a cada usuario de la aplicación de Android?

  3. ¿Qué tipo de datos de usuario necesitará el servidor de nodo completo para procesar una transacción en su nombre?

El último está un poco fuera de contexto y puede ser muy vago. Dada una biblioteca JSON-RPC como [web3j][3] y un cliente de nodo completo como [pyethapp][4] ejecutándose en un dispositivo diferente, ¿cómo haría el web3jinteractuar conpyethapp

Hola. Es posible que desee consultar esta publicación de blog. web3j.github.io/web3j/infura.html Descargo de responsabilidad: Soy el fundador de INFURA.
@HermanJunge ¿Es posible usar testrpcen lugar de Infura? Porque no tengo Ethers para probar en la red en vivo.
¿Y podemos conectar mi cliente ethereum remoto a la aplicación de Android usando web3j y un servicio como ngrok?
Considere investigar la aplicación móvil Status; presentado actualmente aquí: status.im

Respuestas (1)

  1. ¿Es segura la arquitectura anterior? (¿Qué sucede si el servidor está comprometido o el servidor está sesgado?)

Siempre que las claves de los usuarios se almacenen solo localmente en el dispositivo de los usuarios, esta es una arquitectura bastante segura. Sin embargo, puedo imaginar un posible vector de ataque donde el tráfico entre sus usuarios y su nodo se ve comprometido, y se proporciona información incorrecta sobre la declaración de la red, lo que hace que sus usuarios realicen transacciones desaconsejables. No estoy seguro de qué tan probable es eso para su aplicación, pero si parece algo de lo que debería defenderse, entonces sería útil usar una fuente secundaria de la verdad.

  1. ¿Necesito crear un cliente Ethereum de nodo completo correspondiente a cada usuario de la aplicación de Android?

No

  1. ¿Qué tipo de datos de usuario necesitará el servidor de nodo completo para procesar una transacción en su nombre?

Ninguna, siempre que todas las transacciones estén correctamente firmadas antes de enviarlas

Para interactuar con el nodo remoto, solo puede proporcionar la IP y el puerto a web3.js de esta manera:

web3.setProvider(new web3.providers.HttpProvider('http://ipaddress:port'));