En este artículo presentamos un proyecto que he desarrollado en el Ajuntament de Valls. Se trata de un caso de uso sencillo de la tecnología de registro distribuido aplicado a la presentación y publicación de datos. El proyecto Open Valls Chain, es un portal de datos abiertos distribuido, desarrollado en el Ajuntament de Valls. Supone el primer caso práctico de la aplicación de la tecnología de registro distribuido, blockchain en una EELL. Se puso en producción en noviembre de 2019 y se publicó en la modalidad centralizada y distribuida.
- Servicio centralizado:https://dadesobertes.valls.cat
- Servicio distribuido http://open.vallschain.io
Descripción
El proyecto Open Valls Chain nace con el objetivo de proveer a la ciudadanía de Valls y al empleado público un conjunto de datos estructurados y interoperable. El ayuntamiento de Valls está inmerso en un proceso de transformación digital y el portal de datos abiertos es una de las herramientasv utilizadas para visualizar este proceso y entregar valor a través de la publicación de datos.
La solución, a parte de presentarla de manera centralizada (portal de datos abiertos estándar), se presenta y publica de manera distribuida, utilizando tecnologías de registro distribuido (blockchain)
Esto hace que proporcionemos los conjuntos de datos abiertos de forma persistente en local y al mismo tiempo registrados en un red distribuida de manera inmutable. Se registran todas las actualizaciones de datos y además se publica el propio recurso (dataset) de forma distribuida.
Se utiliza este proyecto para dinamizar y modernizar las operaciones del departamento de TI, desplegando servicios en una arquitectura flexible de contenedores. Introducimos en este proyecto metodología de desarrollo DevOps.
Adicionalmente se quiere mejorar el servicio de Transparencia, automatizando el proceso de publicación.
Carácter innovador
El proyecto se ha desarrollado para proveer por primera vez en el ayuntamiento de Valls (y quizás en la administración local del estado) un servicio público distribuido, en el que la no dependencia de una entidad centralizadora que publica y mantiene la información, entrega un valor al ciudadano o al consumidor de datos superior al que tradicionalmente se aporta:
-
Resiliencia de datos: la publicación de manera distribuida asegura la disponibilidad del dato.
-
Persistencia y inmutabilidad: Los datos no pueden cambiar. Una vez se adquiere el compromiso de publicación, estos datos permanecen publicados de manera inmutable.
-
Trazabilidad: Se puede controlar todos los eventos de publicación de datos, evidenciando el origen de la publicación (ajuntament de Valls) y ‘notarizando’ el histórico y la secuencia de publicación
-
Distribución: Publicamos las evidencias de publicación en una red blockchain pública y el dato propiamente a través de un servicio de almacenaje distribuido P2P (IPFS)
Todas estas características hacen que en la provisión de datos se ‘empodere’ al ciudadano, en el sentido que él es el que decide acceder a la información cuando y como quiere, sin posibilidad que la administración publicadora pueda deshacer este compromiso de publicación o modifique la información entregada.
Problemática
Hasta ahora, los portales web, entre los que se incluyen los portales de datos abiertos, son servicios centralizados: estos pueden cerrarse en cualquier momento. Si el portal ‘cae’, el acceso a los datos publicados es imposible.
La mayoría de servicios públicos digitales en entorno web se acogen al modelo A, centralizado. Si evolucionamos el modelo, publicaríamos en un sistema descentralizado (asimilable al cloud computing). La propuesta es pasar al modelo C, totalmente descentralizado, en el que no se depende de un nodo central (A) o de sistemas autónomos dependientes de un nodo central (B)
También existe la problemática de segurizar la manera de probar el origen de los datos, aunque este punto se pude solucionar con una autoridad de certificación y un sello de tiempo por cada publicación. Pero volvemos a depender de un tercero centralizador que nos certifique.
Por último, los usuarios tampoco saben qué cambios se han producido en un recurso de datos publicado.
Otro elemento central del proyecto es poder proveer contenidos autogestionados. Esto significa, que no hay intervención humana en la publicación. Una vez se programa qué publicar y la periodicidad, el portal se auto-abastece.
La solución por tanto debe cumplir:
-
Descentralización por defecto
-
Evidencia de la procedencia del dato publicador
-
Registro de cambios en los recursos publicados
-
Almacenamiento persistente y distribuido en nodos descentralizados, incluso en nodos que pueda disponer el propio cliente consumidor de datos.
-
Autogestión de contenidos
Solución planteada
La solución planteada se basa en una arquitectura abierta desarrollada sobre productos de código abierto.
El diseño y desarrollo de la solución ha sido realizado íntegramente por el personal del departamento de Sistemas de la Información y Comunicaciones del ayuntamiento de Valls
Como esquema principal de la solución tenemos los diferentes elementos:
-
Fuentes de información: Conjunto de orígenes de datos que la organización (Ajuntament de Valls) quiere consumir y publicar. Entre los diferentes orígenes de datos tenemos:
- Sistemas de información departamentales: servicios económicos, registro, contratación …
- Bases de datos
- Sistemas ad-hoc: Estación meteorológica
- Otras web: otros portales de datos
-
Procesador de datos (‘broker’). Para ello utilizamos la herramienta ‘Logstash’. Esta herramienta forma parte del ‘ELK Stack’ (www.elastic.co) y habitualmente se utiliza para proceso de logs. En nuestro caso, se convierte en la interfaz de ‘ingestión’ de datos, ‘proceso’ y ‘publicación’, a través de las 3 fases de trabajo de la herramienta:
Este elemento de software es el que estandariza el proceso de publicación de datos, definiendo el flujo de información por software. Esto quiere decir, que todo queda definido en un fichero de configuración (YML) por recurso a publicar: origen de datos, proceso, salidas y periodicidad de publicación. Nos permite poner el foco en la configuración y no en la herramienta propiamente.
Como salidas al proceso de publicación tenemos el portal centralizado de datos (3) y la red de registro distribuido (4)
-
Portal centralizado de datos: Utilizamos el software de código libre ‘CKAN’ (https://ckan.org/ ). Este portal nos provee de las funcionalidades básicas que debe tener un portal de datos abiertos y asegura un evolutivo acorde a los estándares de mercado. El elemento principal para interactuar con el portal es la API, que servirá para crear el contenido de manera dinámica, a cada llamada del intermediario (2)
-
API de intercambio con red distribuida. Se ha desarrollado un API para interactuar con la red de registro distribuido. Esta API, basada en Nodejs, recibe las peticiones del intermediario (2), gestiona la publicación de la información a la red blockchain (Ethereum) a través de un Contrato Inteligente y distribuye la información en una red de almacenaje distribuido (IPFS)
Una vez transacciona con la red distribuida, para dejar evidencias del proceso, se publica en el portal centralizado (3) información sobre las diferentes transacciones realizadas.
Todos los elementos de la solución están desplegados en producción usando tecnología de contenedores ‘Docker’ (www.docker.com). Esto nos ha proporcionado facilidad en el despliegue y una mejora del mantenimiento de la solución.
Detalles de la solución
Como se ha explicado en el apartado anterior se destacan 3 elementos: intermediario de datos (Logstash), portal de datos abierto (CKAN) y API intermediaria con la red de registro distribuido.
Nos centraremos en el apartado diferenciador del proyecto, la API de intercambio con la red distribuida.
La API es el mecanismo para interconectar los diferentes sistemas de forma estándar:
-
CKAN, a través de la API para consultar información de los recursos y para actualizar el portal
-
Logstash: La salida de este intermediario activa la API para comunicar con el entorno Blockchain
-
Redes distribuidas: Transacciona con Etehreum a través del ‘Smart Contract’ desarrollado y publica el dato propiamente en una red IPFS
-
REST: LA API no tiene estados, interfaz uniforme, estandar http
-
Nodejs: ExpressJs, Body-Parser. Permite desarrollo rápido de aplicaciones tipo API utilizando javascript
El esquema de este elemento de software es:
Los clientes interactúan con al API y esta transacciona con los diferentes elementos de la solución.
Centrándonos en la comunicación con la red blockchain, el esquema de publicación es el siguiente:
El esquema presenta el proceso de publicación:
-
La aplicación distribuida, en este caso la API, publica en la red Ethereum. El identificador (wallet) que publica es: 0x9EcA25ee04FDCc9d9CDFF377aa8da019Dba38437 que es único en la red blockchain Ethereum y identifica al emisor, en este caso el Ajuntament de Valls.
-
Para publicar en la red Ethereum se utiliza el Smart Contract identificado por 0x2a36487e0a6e4593b4b1312ed4c095f3290693bb . Este software, que se ejecuta de forma distribuida en la red blockchain mantiene las interfaces de consulta de datos / actualización. La información que se guarda es la siguiente:
Una organización contiene información de identificación y datasets publicados.
Cada dataset es un conjunto de recursos y el recurso, es propiamente, los datos (fichero de datos) que queremos publicar. Para visualizar un ejemplo podemos mostrar esta información:
La Organización (Ajuntament de Valls), publica el Dataset “Registro de Facturas”, el recurso “Registro de Facturas de 2019”.
La red Ethereum no está diseñada, al menos en la versión actual, para almacenar conjuntos grandes de datos. Un recurso de datos puede consistir en un fichero con miles de entradas, de orden de magnitud de kb o Mb. Almacenar el fichero en la red blockchain no es escalable, por los costes de transacción y el rendimiento de la propia transacción. Por ese motivo, se ha utilizado un servicio complementario IPFS (Interplanetary File System https://ipfs.io)
IPFS funciona con identificadores únicos de ficheros inmutables dentro de la red de pares que forman los nodos P2P de la red. Esto quiere decir que no existen duplicados en la red y que cada cambio de un fichero, genera un nuevo identificador.
Por cada recurso de datos a publicar, se genera este identificador único. Este identificador nos permite acceder al recurso de manera unívoca. En la red Ethereum publicamos este identificador, de manera que dejamos constancia del dato en la propia red distribuida.
Nota: En la implementación, usamos una red pública abierta Ethereum, pero no la productiva, sino una red de test llamada ‘Ropsten’. El motivo principal son los costes de transacción en la red Etehreum de producción. Para validar el modelo, es suficiente usar la red pública de test, puesto que permite acreditar perfectamente todas las transacciones realizadas y nos ayuda a validar el modelo distribuido. Otro motivo de peso es la dificultad para contratar la adquisición ‘criptomoneda’ y explicarlo dentro de la organización sin morir en el intento…
Para acreditar las transacciones que realizamos en la red Etehreum podemos utilizar el servicio de acceso público ‘Etherescan’ (https://etherscan.io)
Accediendo a https://ropsten.etherscan.io/address/0x9eca25ee04fdcc9d9cdff377aa8da019dba38437 se detallan todas las transacciones sobre la red que estamos realizando:
Si se accede al detalle de una transacción (Tnx Hash) se detalla información sobre la comunicación con el Smart Contract, incluyendo los datos publicados.
De igual forma, cualquiera que tenga un nodo IPFS podrá recuperar cualquier recurso de datos publicado. Para validar públicamente esta información, podemos utilizar el Gateway Público de IPFS y recupera cualquier dato publicado (https://ipfs.io/ipfs/identificadorpublicado)
Para evidenciar esta información en el portal centralizado, se actualiza en la descripción del ‘Dataset’, información sobre la publicación en la red distribuida, para dejar evidencias accesibles sobre estas transacciones:
El producto final es el portal de datos abiertos centralizado, que se ha publicado bajo el dominio:
https://dadesobertes.valls.cat
Este portal es lo que denominamos ‘front-end’ y nos da acceso centralizado a los datos (back-end). Estos datos estan publicados de manera centralizada (el propio portal de datos) y de form descentralizada (en Ethereum + IPFS). En caso que el portal centralizado no estuviese disponible, el acceso a los datos siempre se podría realizar interactuando con el Contrato Inteligente sobre la red Ethereum.
Para completar la prueba de servicio público distribuido, se ha publicado un front-end distribuido web con funcionalidades básicas.
Para ello hemos utilizado el servicio IPNS (Inter-Planetary Name System) que nos proporciona el framework IPFS. Este servicio de nombres resuelve la problemática de tener contenido inmutable. Bajo un link invariable, vamos publicando el contenido web (que puede cambiar, manteniendo siempre el link inicial operativo) Esta URL, a través del gateway público de IPFS.io es: Ejemplo a IPFS
Cualquier usuario que tenga un cliente IPFS podría disponer de esta propia web en local, accediendo al recurso identificado por QmS4sKXTmxgMiU3E6AJaFbxw15NaG9jNvm4y5yo8resXo7
Igualmente, podemos vincular esta url a un dominio estándar de internet, donde publicaremos el front-end de forma distribuida. La url de acceso es http://open.vallschain.io
Es una prueba de concepto para la publicación de servicios web distribuidos, sin la funcionalidad del portal centralizado (CKAN), pero publicando y actualizando los enlaces a los datos publicados en la red distribuida (Ethereum y IPFS)
Ventajas
Se cumplen los objetivos planteados en la definición de alcance del proyecto:
-
Portal de datos abiertos
-
Publicación automatizada (definida por software)
-
Publicación de datos de manera centralizada y distribuida
-
Validación de la tecnología Blockchain
-
Generación de conocimiento entorno a esta tecnología y aplicabilidad en la administración local
-
Mejora imagen del departamento de TI y ayuntamiento entorno al proceso de transformación digital de la organización
Dificultades y costes
-
No existencia de referentes que utilicen tecnología de registro distribuido aplicado a la publicación de datos.
-
Dispersión de información para el desarrollo. Formación y auto-formación
-
No disponer de redes públicas distribuidas para realizar este tipo de proyectos.
-
Comunicación interna y externa: explicar bien el proyecto y los beneficios del uso de tecnología de registro distribuido
Bonus track
El proyecto OpenVallsChain ha estado galardonado en la quinta edición de los Premios Alfons Ortuño a la innovación y Buenas prácticas en materia de gestión pública que concede la Escuela de Administración Pública de Cataluña (EAPC). El jurado ha otorgado al Ayuntamiento el primer premio en la categoría de Servicios Finalistas papel carácter pionero e innovador del proyecto Impulsado papel departamento de Comunicación y Sistemas de la Información de la concejalía de Transparencia, Oficina de Atención al Ciudadano y Tecnologías de la información del Consistorio vallense.
Los premios Alfons Ortuño, creados por la EAPC el año 2012, tenencia como Objetivo reconocer honoríficamente los Actuaciones de innovación y Buenas prácticas en el Ámbito de las Administraciones Públicas catalanes. Además del proyecto de Valls que ha recibido el primer premio en la categoría de Servicios Finalistas, han estado distinguido també iniciativas impulsadas por la Diputación de Girona (categoría Organización, Procesos y Gestión Económica), la Universidad Pompeu Fabra (Transparencia, Buen Gobierno, Evaluación y Calidad) y el Instituto Catalán de Salud (Desarrollo de Equipos y Personas).