Ethereum e Hyperledger Fabric se están convirtiendo en el estándar de facto de la industria Blockchain:
El entorno de desarrollo se ve influenciado por los clientes más avanzados para Ethereum e Hyperledger Fabric, desarrollados en JavaScript.
Teniendo en cuenta estos factores, stacks tecnológicos como MEAN JS parecen proporcionar una solución que se adapta a estas necesidades:
Es importante destacar que MEAN JS no tiene que ser necesariamente un stack inamovible. Por ejemplo, reemplazando el frontend (AngularJS) por otro diferente (Bootstrap, React…). Adicionalmente a todo esto, y de cara a facilitar el despliegue de las aplicaciones/pruebas de concepto, una de las herramientas que permite realizar esta tarea de una forma más sencilla y orientada a microservicios es Docker, reduciéndose dicho despliegue a dos pasos:
Para la escalabilidad, y de cara a la promoción a entornos productivos, se puede emplear una plataforma cloud como AWS o Azure, permitiendo de esta forma:
A continuación se detalla un ejemplo de integración con Ethereum. En el próximo artículo abordaremos la integración de este stack con Hyperledger Fabric.
En primer lugar, será necesario “levantar” los nodos de la Blockchain:
2. Ejecutar “docker-compose up” levantará el nuevo contenedor a partir de la imagen añadida, junto al resto de contenedores existentes (Frontend, Backend, MongoDB).
Para la integración con la Blockchain desde el Backend, se hará uso de las siguientes librerías referenciándolas en el package.json:
Ejemplo de llamada que no implica transacción (sólo lee):
Para el desarrollo de los Smart Contracts, el lenguaje de programación más utilizado es Solidity. Este lenguaje, similar a JavaScript, permite la gestión de las direcciones y los permisos de uso para cada método.
Para un rol como proveedor de servicios de consultoría tecnológica, y teniendo en cuenta el estado actual de la tecnología Ethereum, la configuración de la misma para una prueba de concepto implicaría:
Por lo tanto, la arquitectura lógica a alto nivel de Ethereum, teniendo en cuenta el stack tecnológico mencionado anteriormente, quedaría de la siguiente forma:
En muchas ocasiones, es complicado mostrar al cliente que realmente se está ejecutando la aplicación sobre una red Blockchain, ya que la interfaz de usuario es la única parte que se ve y está orientada a funcionalidad, no a tecnología. Adicionalmente, la Blockchain se encuentra en la parte más inferior del stack tecnológico, lo que supone una dificultad añadida.
Por lo tanto, de cara a demostrar que las transacciones ejecutadas por pantalla se están persistiendo contra la Blockchain, es necesario el uso de aplicaciones satélite como un explorador de bloques o un monitor del estado de la red (mostrando información como bloques por segundo…). Estas aplicaciones satélite se añaden al proyecto Docker y leen directamente de la red Blockchain sin pasar por nuestra aplicación definida con MEAN JS. Netstats:
Para realizar el testing, a nivel de Backend Node.js se pueden utilizar el paquete NYC con Mocha, popular por su lenguaje descriptivo a la hora de definir dichas pruebas.
En la parte de Blockchain, se definirían tests unitarios con Truffle. Como se puede observar, teniendo en cuenta la aplicación de dicha herramienta, Truffle vendría a llevar un rol similar al de Maven/Gradle en Java.
En ambas capas de test, se utilizará el modo de sobrescritura de Docker-Compose (docker-compose –f
De cara a paralelizar el trabajo entre capas, se proporcionará una Swagger API que permitirá obtener respuestas desde un periodo temprano al desarrollador de Frontend en su modo mock (esta API deberá cambiar mínimamente durante el desarrollo). Para su despliegue se empleará también el modo sobrescritura de Docker-Compose, reemplazando de este modo el Backend de la aplicación y manteniendo la interfaz de la API.