Santiant
← Casos técnicos
Blockchain Quorum IoT Java RabbitMQ React

Sellado en blockchain permisionada de datos IoT del sector agrícola

Sistema full stack para sellar en una blockchain permisionada (Alastria/Quorum) los datos provenientes de sensores IoT de cultivo, con visualización on-chain mediante una interfaz React.

S
Santiago Moreno Arce ·

Resumen

Una empresa del sector agroalimentario necesitaba sellar de forma inmutable los datos generados por sensores IoT desplegados en parcelas de cultivo. El trabajo consistió en diseñar e implementar un sistema full stack que recibe los datos, los procesa de forma asíncrona, los sella en una blockchain permisionada (Alastria, basada en Quorum) y los expone a través de un visualizador web sencillo que permite consultar los registros directamente desde la cadena.

Contexto

La compañía operaba en un entorno donde la trazabilidad de los datos de cultivo (humedad, temperatura, riego, tratamientos, etc.) tiene implicaciones regulatorias y comerciales. Los datos llegaban desde sensores IoT en campo y se almacenaban en sistemas internos, pero no existía una garantía técnica de que esa información no se hubiera modificado tras su registro.

El entorno técnico incluía servicios backend en Java, infraestructura contenedorizada con Docker y un nodo en la red Alastria, una blockchain permisionada española basada en Quorum (variante empresarial de Ethereum). Las restricciones operativas eran claras: las escrituras on-chain tienen un coste y una latencia distintos a los de una base de datos tradicional, los sensores generan un flujo constante de eventos, y cualquier fallo en el sellado no podía bloquear la ingesta principal.

Problema

El sistema debía cumplir requisitos en tensión entre sí:

  • Sellar las lecturas relevantes de forma inmutable y verificable.
  • No introducir latencia ni acoplamiento fuerte entre la ingesta y la blockchain.
  • Tolerar caídas del nodo o congestión de la red sin perder eventos.
  • Permitir a usuarios autorizados consultar los datos sellados de forma sencilla, sin depender de herramientas técnicas externas tipo exploradores de bloques.

Un enfoque ingenuo —escribir cada lectura directamente en la cadena de bloques de forma síncrona desde el endpoint de ingesta— era inviable por rendimiento y acoplamiento operativo.

Objetivos

  • Implementar un mecanismo de sellado fiable, desacoplado del tiempo de respuesta de la blockchain.
  • Garantizar que ningún evento se perdiera ante fallos transitorios.
  • Exponer una interfaz web sencilla para visualizar los datos sellados directamente desde la cadena.
  • Mantener la solución desplegable y reproducible en entornos contenedorizados.

Enfoque técnico

La arquitectura se diseñó en capas con responsabilidades separadas: ingesta, procesamiento asíncrono, sellado on-chain y visualización.

Capa de ingesta. Un servicio backend en Java exponía un API REST para recibir los datos de los sensores. Su responsabilidad era validar, persistir el evento y publicarlo en una cola de RabbitMQ. Esto desacoplaba la ingesta del proceso de sellado y permitía absorber picos de tráfico sin presionar la blockchain.

Capa de procesamiento. Un worker dedicado consumía los mensajes de RabbitMQ, normalizaba el dato y preparaba la transacción que se enviaría a la cadena. El uso de cola permitía aplicar reintentos, backoff y aislar fallos sin afectar al endpoint de ingesta.

Capa de sellado on-chain. Un servicio Web3 en Java (Web3j) interactuaba con el nodo de Alastria/Quorum a través de un contrato inteligente que registraba los datos relevantes de cada lectura. El contrato se mantuvo deliberadamente simple: cuanta menos lógica vive on-chain, más barato y seguro resulta evolucionarla en el tiempo.

Capa de visualización. Se desarrolló una interfaz web en React, sencilla y orientada al usuario de negocio, que consultaba directamente la blockchain (a través de un endpoint Web3) para mostrar los registros sellados. La idea era que cualquier parte autorizada pudiera ver el dato tal cual está en la cadena, sin pasar por una base de datos intermedia que rompiera la cadena de confianza. La UI se enfocó en lo esencial: listado de lecturas, búsqueda por sensor o rango temporal y vista de detalle con la información on-chain.

Todo el sistema se empaquetó como contenedores Docker independientes (API de ingesta, worker, servicio Web3, RabbitMQ, base de datos, frontend), facilitando despliegue, escalado horizontal y aislamiento de fallos.

Se incorporaron además:

  • Reintentos con backoff en la capa de sellado para tolerar caídas temporales del nodo.
  • Idempotencia en el worker para evitar duplicados ante reentrega de mensajes.
  • Logs estructurados para poder auditar el pipeline en producción.

Decisiones y trade-offs

La primera decisión relevante fue desacoplar la ingesta del sellado mediante colas. Esto introduce una pequeña ventana entre el evento y su registro on-chain, pero a cambio el sistema sobrevive a caídas del nodo blockchain sin perder información ni bloquear el flujo principal.

La segunda fue mantener el contrato lo más simple posible. Se evitó deliberadamente meter lógica de negocio en el contrato inteligente; cuanta más lógica vive on-chain, más cara y arriesgada es su evolución. La lógica relevante quedó en el backend, donde puede iterarse sin migraciones costosas.

La tercera fue que el visualizador leyese directamente de la cadena, en lugar de una base de datos espejo. Esto encajaba con el propósito del proyecto: si el valor diferencial es la inmutabilidad, la UI debía reflejar la fuente de verdad real. A cambio, asumimos cierta latencia de lectura y dependencia del nodo, que se mitigó con caché ligera en el frontend.

Resultado

  • Pipeline funcional capaz de procesar de forma estable el flujo de eventos IoT y sellarlos en la blockchain permisionada sin acoplar la ingesta al nodo.
  • Tolerancia a fallos del nodo Quorum sin pérdida de eventos gracias al desacople por cola.
  • Visualizador web simple y usable que permite a usuarios autorizados consultar los datos directamente desde la cadena, manteniendo la trazabilidad extremo a extremo.
  • Infraestructura reproducible y desplegable mediante Docker.

Stack técnico

  • Java
  • Web3j
  • Quorum / Alastria (blockchain permisionada)
  • Solidity (contrato inteligente)
  • RabbitMQ
  • React
  • Docker
  • REST APIs

Qué demuestra este caso

Este caso demuestra capacidad para diseñar sistemas distribuidos que combinan tecnologías heterogéneas —IoT, mensajería, blockchain y frontend— manteniendo separación clara de responsabilidades, tolerancia a fallos y una experiencia de usuario coherente con el propósito del sistema. Refleja también criterio para decidir qué debe ir on-chain y qué no, y para alinear las decisiones técnicas (incluida la fuente de datos del visualizador) con el valor real del proyecto.

Versión corta para tarjeta

Title: Sellado de datos IoT en blockchain permisionada

Sector: AgTech / trazabilidad agroalimentaria

Problem: Sellar de forma inmutable un flujo continuo de lecturas IoT y permitir su consulta sin acoplar la ingesta al nodo blockchain.

Technical approach: Pipeline asíncrono con RabbitMQ y servicio Java/Web3j contra Alastria/Quorum, más un visualizador React que lee los datos directamente de la cadena.

Result: Sistema de sellado y visualización on-chain estable, tolerante a fallos del nodo y desplegable mediante Docker.

Tags: Blockchain, Quorum, IoT, Java, RabbitMQ, React

CTA opcional

Si tu empresa necesita garantizar trazabilidad o integridad de datos críticos —en producción, supply chain o entornos regulados— puedo ayudarte a evaluar si una solución basada en blockchain tiene sentido y, si lo tiene, cómo diseñarla sin sobreingeniería.