05/07/2019 | Blockchain,Desarrollo de software

Uso de Websockets en la red T de Alastria

¡Hola a todos! En la entrada de hoy os vamos a enseñar cómo conectarse a un nodo regular de la Red T a través de una conexión websocket. Para poneros en un poco de contexto, la red T es una red pública permisionada que pertenece a Alastria, una de las redes de blockchain más grandes a nivel europeo. Para entrar en la misma nos tienen que dar permiso de acceso. Esta es una red Quorum que utiliza el algoritmo de consenso IBFT

Websocket

El motivo por el cual intentamos realizar conexiones de tipo websocket a un nodo regular de una red Quorum, se debe al interés que teníamos en escuchar eventos en “tiempo real” emitidos por la blockchain. 

Este tutorial se realiza sobre un nodo regular de la Red T, desplegado en un docker dentro de una instancia. Si quieres instalar el tuyo propio aquí tienes una guía para la Instalación de un nodo regular en la red T.

No hace falta que nuestro nodo esté desplegado con docker, como ya hicimos en la antigua Testnet de Alastria. Uno de los factores diferenciales entre estas instalaciones es la inclusión de un Access Point que filtra las peticiones desde fuera de la red por medio de un proxy(por defecto nginx), así que tendremos que configurar estos accesos. Si tenemos la opción de elegir es recomendable instalar el nodo a través de docker, para tener un control más exhaustivo de las conexiones a nuestro nodo.

Para realizar las conexiones vamos habilitar un puerto específico de tipo websocket, en nuestro caso de prueba hemos elegido el 22001, hay que tener cuidado con no seleccionar uno de los puertos que ya están en uso, ya que nos causará bastantes problemas.

Primeros pasos

El primer paso es incluir en nuestro nodo geth las apis/flags que habilitarán la conexión websocket. Para ello tendremos que modificar el script que inicia el nodo (./start.sh). Principalmente modificaremos la variable $GLOBAL_ARGS

Dentro de start.sh modificamos la variable $GLOBAL_ARGS en la línea 76 (la numeración podría variar) añadiendo los flags específicos de websocket. Con ellos le decimos al proceso que habilite las conexiones de tipo websocket y que les asigne el puerto específico.

Aunque no lo parezca el siguiente es uno de los paso más comprometidos, parece raro que no podamos añadir el flag de –wsorigins directamente en la línea 76, no lo hacemos de esta forma simplemente porque no funciona. Así que modificamos $GLOBAL_ARGS en las líneas 124 y 126 (la numeración podría variar) añadiendo el siguiente valor a la variable $GLOBAL_ARGS:

Con ello estamos aceptando las peticiones de conexión websocket que tengan como parámetro de origen a “test.com”

A continuación guardamos los cambios que hemos realizado en el ejecutable start.sh. Para que estos cambios sean efectivos paramos el nodo y lo volvemos a levantar.

Ahora vamos a realizar los cambios necesarios en el proxy para poder habilitar la conexión websocket. La configuración del proxy se encuentra el archivo access-point.conf 

Accederemos al archivo de configuración y habilitaremos una location específica para los websockets:

Añadimos a la configuración, teniendo en cuenta que ya habíamos elegido el puerto 22001 para las conexiones websocket. En la configuración del proxy tendremos que especificar el puerto ya asignado:

Y dentro de «server» añadimos una nueva «location»:

Guardamos los cambios y realizados y recargamos la configuración de nginx:

Realizando estas modificaciones ya podremos establecer conexiones a nuestro nodo vía websocket.

Si quieres probar un código que usa conexiones websocket para escuchar eventos, aquí te dejamos un ejemplo de prueba. Si esto no es suficiente y tienes alguna duda no dudes en ponerte en contacto con nosotros. Por correo o creando una «issue» en el repositorio de github.

¡Gracias por leernos y nos vemos dentro de poco!

Compartir en:

Relacionados