Diseñar una aplicación de Ethereum representa una serie de nuevos desafíos que tenemos que superar. Pero, claro está, si tenemos paciencia y aplicamos correctamente nuestros conocimientos podremos lograr nuestro cometido sin problema alguno. Este nueva era supone que tenemos que sumar un nuevo factor. Ahora no solo se trata de cliente y servidor, sino que también ha llegado blockchain.
1.- El cliente- blockchain es la nueva era tecnológica en Ethereum
Esto es de suma importancia debido a que ahora el flujo de datos y las operaciones que se realicen pasan a través de blockchain. Es decir, se crea una relación directa entre la cadena de bloques y el cliente.
El primer paso aquí es distribuir realmente el código del cliente a sus usuarios. La forma más fácil es configurar una página estática que contenga una aplicación web habilitada para web3. Dicha página puede alojarse en cualquier lugar. Ya sea AWS S3 , Google Cloud , páginas de Github, otros proveedores de la nube o tu propio servidor. Además, si puedes contar con que tus clientes tengan el soporte de protocolo bzz o ambos ipfs todo sería más sencillo. Incluso puedes distribuirlo a través de Swarm o IPFS para una descentralización total.
2.- Permitir que blockchain tenga acceso a la información
Ahora lo más importante es que la app pueda estar en plena capacidad de leer información de la cadena de bloques. Para poder hacer esto realidad necesitarás una conexión a un nodo de Ethereum que esté totalmente activo. Este paso será puesto en marcha por tu servidor de web3 ya que es el que realmente puede crear un vínculo sostenido con el nodo.
Algunos de los usuarios ya pueden tener una conexión establecida con un nodo. Por ejemplo, a través del cliente oficial de Mist, o mediante un complemento de navegador como el muy popular Metamask. Este actúa como un cliente liviano de la cadena de bloques. Tus preguntas frecuentes incluso proporcionan un fragmento de código sobre cómo detectar si está disponible un cliente y lo utilizan como proveedor para web3.
¿Qué hacer entonces para aquellos usuarios que no tienen Mist o Metamask? Si solo los necesitas para consultar blockchain sin enviar ninguna transacción, puedes establecer una conexión con un nodo público de Ethereum. Este debería ser un nodo geth o de paridad abierta al público. Pero sin exponer la API para administrar cuentas, y sin ninguna cuenta desbloqueada. Tal nodo solo actuará como una puerta de enlace para consultar funciones contractuales constantes.
De esta forma, los usuarios con una infraestructura Ethereum en ejecución pueden usar tus conexiones a tus propios nodos de confianza. Los beneficiarios menos expertos en tecnología podrán usar los nodos públicos. Esto implica que los últimos usuarios eligen confiar en la información provista por el nodo controlado por terceros debido a la facilidad de uso.
3.- El objetivo más importante, el envío de transacciones
Como pudiste observar, realizar consultas por medio de blockchain es una tarea no tan difícil. Pero, en caso de que los usuarios quieran realizar transacciones todo se complicará mucho más. Esto se debe a que las transacciones hacen que los contratos inteligentes se modifiquen por completo.
Si lo usuarios poseen Mist o Metamask no habrá ningún tipo de problema debido a que estos proporcionan una forma de administrar las cuentas de usuario y solicitar al individuo que apruebe una transacción a solicitud de la aplicación. Mist proporcionará una puerta de enlace al nodo local del usuario y sus cuentas para firmar transacciones. Metamask, por su parte, firmará las transacciones del lado del cliente y las retransmitirá a los nodos públicos Metamask.
En cuanto al resto de sus usuarios, si no requiere que instalen Metamask o que utilicen Mist para usar tu aplicación. Deberás indicarles que envíen manualmente las transacciones para interactuar con tu app desde la billetera con la que trabajen.
La mayoría de las aplicaciones implementan esto pidiéndole al usuario que envíe una cierta cantidad de ETH a una dirección. Incluyendo opcionalmente un botón QR o una copia en el portapapeles.
Tu aplicación del lado del cliente puede entonces monitorear los eventos del contrato para actualizar la interfaz del usuario. Esto gracias a que se ejecuta la transacción enviada fuera de banda. Como ver eventos es simplemente una forma de consultar blockchain, puede hacerse fácilmente a través de un nodo público.
Ahora, para ejecutar funciones contractuales. Puedes necesitar solicitar al usuario que envíe ETH junto con datos adicionales para realizar una función específica. Puedes utilizar el request de una función de contrato para obtener fácilmente los datos necesarios para ejecutar un método y presentarlo al usuario junto con la dirección de destino.
4.- Implementación del patrón
Personalmente, no soy un gran admirador de este patrón. Esto se debe a que requiere una interacción bastante compleja por parte del usuario. No todos los beneficiarios son conscientes de cómo funcionan los datos adicionales en Ethereum. Y mucho menos de cómo enviarlos en una transacción.
Si necesitas implementarlo, asegúrate de que la función de respaldo de tu contrato rechace todos los pagos o tenga un comportamiento predeterminado razonable. De modo que si el usuario olvida incluir los datos adicionales al enviar manualmente la transacción, no pierda los fondos enviados.
Ten en cuenta que, en muchos escenarios. Una función de reserva inteligentemente diseñada en realidad siempre puede ejecutar el comportamiento esperado para el usuario que envía una transacción. De esta forma, tus contratos inteligentes solo reaccionan a los usuarios que envían fondos y ejecutan diferentes funciones dependiendo del estado actual.
Otro truco es agregar contratos proxy, donde cada uno de ellos ejecuta una función particular en tu contrato principal al recibir ETH. Como un ejemplo simple, digamos que estás implementando una aplicación de votación binaria. Tiene su contrato principal con un voto-sí y un voto-sin función. En lugar de pedir al usuario que incluya el indicador de sí o no en su transacción. Puedes implementar dos contratos adicionales. Excepto para llamar al voto-sí o al voto-no en el contrato principal en nombre del remitente del mensaje al recibir cualquier transacción. A menudo puedes ayudar a reducir la complejidad para los usuarios que no tienen software compatible con Ethereum en sus navegadores. Esto te será de gran ayuda y las personas podrán acoplarse de mejor manera a la app.