Compartir a través de



Agosto de 2019

Volumen 34, número 8

[Cadena de bloques]

Proteja la cadena de suministro con la IoT de Azure y la nube de cadena de bloques

Por Stefano Tempesta | Agosto de 2019

La adopción de tecnologías de IoT y cadena de bloques tiene el potencial de ayudar al sector industrial a proteger las cadenas de suministro y hacer más transparentes los procesos asociados. Probablemente haya oído hablar de la cadena de bloques solo en el contexto de las criptomonedas. ¿Cómo es relevante la cadena de bloques para las cadenas de suministro?

Un ejemplo de cadena de suministro de distribución

La estructura de administración de la cadena de suministro tradicional tiene limitaciones en la confiabilidad y la precisión de las medidas, así como en la transparencia de los procesos entre todas las partes implicadas. Las tecnologías de IoT y la cadena de bloques representan una posible solución a estos retos, ya que incorporan dispositivos para automatizar la recopilación de métricas en cualquier etapa de la cadena de suministro, así como un libro de contabilidad digital distribuida para almacenar los registros de transacción de modo inmutable. Además, los contratos inteligentes de la cadena de bloques pueden usar inteligencia basada en reglas para realizar la validación en estos datos y actualizar el estado de cada fase de la cadena de suministro de todas las partes involucradas, de manera completamente confiable y transparente. Por ejemplo, los términos, condiciones y cualquier otra lógica pueden programarse en un contrato inteligente para comprobar la correcta ejecución de una transacción de mercancías entre dos fases de la cadena de suministro.

La figura 1 simplifica una cadena de suministro de distribución en la que un productor de alimentos transfiere mercancías a una empresa de procesamiento de alimentos para el empaquetado y envío. El producto se sella a una temperatura y nivel de humedad establecida y estas condiciones u otras similares deben mantenerse durante el transporte al almacén y el establecimiento comercial.

Cadena de suministro de distribución con un contrato inteligente
Figura 1 Cadena de suministro de distribución con un contrato inteligente

Estas condiciones se codifican en un contrato inteligente de cadena de bloques, como se muestra más adelante en este artículo. Los dispositivos IoT con sensores para medir la temperatura y la humedad se instalan en los contenedores y los operadores que almacenan y envían las mercancías. Se capturan datos de telemetría a intervalos regulares durante las fases de almacenamiento y distribución, y se validan las métricas actuales respecto a los niveles definidos en el contrato inteligente. Si los valores de temperatura o humedad superan dichos niveles, el estado del transporte de mercancías cambia a "no conforme" y este estado se refleja en el registro de transacciones almacenado en el libro de contabilidad digital de la cadena de bloques. Todos los participantes en la cadena de suministro pueden ver el estado y los detalles del contrato en cualquier momento. La contraparte responsable del almacenamiento o transporte de mercancías especificará la próxima contraparte controlando los paquetes como la siguiente fase y los dispositivos IoT registrados reenviarán los datos de telemetría a un centro de IoT central. Esto permite que el iniciador de la cadena de suministro y todos sus participantes identifiquen qué contraparte no cumple las regulaciones de conformidad si en algún momento del proceso no se cumplieron los requisitos de temperatura o humedad.  

Una cadena de suministro requiere un diagrama de transición de estado para expresar los flujos posibles y las distintas funciones de transición en cada estado. Cada parte de la cadena de suministro solo puede realizar determinadas acciones según su rol y el estado de los productos que se transportan. Los estados, los flujos de trabajo y las partes interesadas se describen en un contrato inteligente e implementado en Azure Blockchain Workbench, como se describe más adelante en el artículo. En el ejemplo que se proporciona aquí se implementan los cuatro estados que se muestran en la figura 2.

Figura 2 Los cuatro estados de la cadena de suministro de ejemplo

Estado Descripción
Creado Indica que se inició el contrato y seguimiento está en curso.
InTransit Indica que actualmente una contraparte está en posesión y es responsable de bienes que se están transportando.
Completado Indica que el producto llegó a su destino.
OutOfCompliance Indica que los términos acordados para las condiciones de temperatura y humedad no se cumplieron.

Azure IoT Central

El ejemplo de este artículo usa Azure IoT Central (bit.ly/2X6Jlwe) para conectar los dispositivos IoT. IoT Central es una solución de software como servicio (SaaS) totalmente administrada que permite conectar, supervisar y administrar dispositivos a escala. Se ha simplificado la configuración inicial de dispositivos mediante la adopción de plantillas de dispositivo para una variedad de plataformas, y la implementación de proyecto del componente de IoT de la solución de la cadena de suministro puede beneficiarse de la simulación de dispositivo con fines de prueba.

La solución de IoT implementada para la cadena de suministro de distribución en el ejemplo actual consta de una puerta de enlace basada en la nube que recibe datos de telemetría de sensores de dispositivos y los propios dispositivos que se conectan a IoT Central. Antes de que se les permita transmitir datos, los dispositivos IoT se registran con la plataforma en la nube y se les asigna una identidad. Al conectarse a IoT Central, un dispositivo envía su información de identidad, junto con los datos del sensor. Si el dispositivo no envía esta información de identidad, se producirá un error en la conectividad. Una vez establecida una conexión correcta entre los dispositivos y la puerta de enlace en la nube, los datos se ingieren a intervalos establecidos. Azure IoT Central facilita este flujo proporcionando funcionalidades de ingesta de datos y registro de dispositivos, así como la visualización de los puntos de telemetría en un panel, como se muestra en la figura 3.

Panel de Azure IoT Central
Figura 3 Panel de Azure IoT Central

La figura 3 muestra medidas que produce un dispositivo simulado. En Azure IoT Central, puede definir una plantilla de dispositivo para los dispositivos que se conectan a la aplicación, una especie de plano técnico que define las características y el comportamiento de un tipo de dispositivo. Una plantilla puede usarse para conectar un dispositivo físico o para simular la transmisión por secuencias de datos dentro de ciertos límites. Los datos simulados incluyen:

  • Propiedades del dispositivo que define un dispositivo y son de solo lectura en la aplicación.
  • El estado, que determina el comportamiento del dispositivo.
  • Medidas específicas para los sensores instalados.

La configuración de una aplicación en IoT Central empieza por la definición de al menos una plantilla de dispositivo. A continuación, se agrega un dispositivo real o simulado. Solo puede acceder al panel de IoT Central en bit.ly/2RBtWD6. A continuación, vaya a la página Administrador de aplicaciones de Azure IoT Central para empezar a crear una nueva aplicación de Azure IoT Central. Después de crear una aplicación, acceda a la sección Device Explorer para agregar un dispositivo real o simulado con cada plantilla de dispositivo de la aplicación. Cuando se crea una plantilla de dispositivo, Azure IoT Central genera un dispositivo simulado a partir de la plantilla. El dispositivo simulado genera datos de telemetría que le permiten probar el comportamiento de la aplicación antes de conectarse a un dispositivo real. En la pestaña Medidas, puede especificar las medidas, como datos de telemetría, los eventos y el estado, que envía el dispositivo y definir las reglas asociadas con el dispositivo.

Después de configurar un dispositivo y sus medidas, puede usar eventos para definir datos puntuales que el dispositivo debe enviar cuando tenga lugar un evento como un error o un error de componente. Azure IoT Central puede simular eventos de dispositivo que le permiten probar el comportamiento de la aplicación antes de conectarse a un dispositivo real. Después de un tiempo, la pestaña Medidas mostrará un gráfico de los eventos generados aleatoriamente desde el dispositivo simulado conectado.

Por último, cree una regla que ejecute una acción personalizada cuando la temperatura o la humedad medidas superen las condiciones especificadas. En este caso, configuré una acción de Microsoft Flow, como se muestra en la figura 4, que se ejecutará cuando el nivel de humedad sea mayor que 60 y la temperatura superior a 8.

Configuración de una acción de Microsoft Flow
Figura 4 Configuración de una acción de Microsoft Flow

Microsoft Flow

¿Por qué Flow? Las redes de la cadena de bloques están aisladas del mundo exterior, lo que significa que no se puede incorporar ningún dato producido "fuera de la cadena". Los contratos inteligentes operan con datos almacenados dentro de la propia cadena de bloques. El kit de desarrollo de Azure Blockchain (bit.ly/2TkG23Z) es una extensión de las funcionalidades de Azure Blockchain Workbench (más información a continuación). El kit de desarrollo de cadenas de bloques incorpora servicios de Azure para la administración de claves, identidad fuera de la cadena y API de datos, supervisión y mensajes en una arquitectura de referencia que se puede usar para crear rápidamente aplicaciones basadas en la cadena de bloques que se integren con cualquier sistema externo. Con Flow, es posible enviar un mensaje a Azure Service Bus implementado como parte de Azure Blockchain Workbench y transferir datos de forma segura a un libro de contabilidad digital de cadena de bloques. La figura 5 muestra el desencadenador del flujo cuando se activa una regla en IoT Central.

¿Cómo se desencadena un flujo en IoT Central?
Figura 5 ¿Cómo se desencadena un flujo en IoT Central?

A continuación, se prepara un mensaje y, finalmente, se coloca en Service Bus en Azure Blockchain Workbench, de acuerdo con el patrón de integración basado en la API REST que se describe en bit.ly/31WqmIs. Al preparar el mensaje que se enviará a Service Bus, se crean los parámetros siguientes como parte del propio flujo:

  • requestId: Este es un valor único para identificar una solicitud. En Flow, esto se puede implementar mediante una variable con el identificador único global de la expresión.
  • timestamp: Es la fecha y hora de la solicitud. En Flow, puede obtenerse mediante la extracción de los tics instantáneos de la hora actual. Sin embargo, ya que hay 10 millones de tics en un segundo, se generaría un número muy grande, por lo que suelo calcular la hora de la época Unix actual, que es el número de segundos que han transcurrido desde el 1 de enero de 1970 (medianoche UTC).

En Flow, se puede calcular fácilmente una marca de tiempo con la expresión de sustracción:

sub(variables('TicksNow'), variables('TicksUnixEpoch'))

En este caso, TicksNow es una variable de entero definida como ticks(utcNow()) y TicksUnixEpoch es otra variable que se define como ticks("1970-01-01").

El mensaje de Service Bus también requiere:

  • userChainIdentifier: La dirección de la cadena de bloques del usuario o dispositivo que se creó en la red de la cadena de bloques.
  • contractLedgerIdentifier: La dirección de la cadena de bloques del contrato en el libro de contabilidad.
  • workflowFunctionName: El nombre de la función del contrato inteligente que debe invocarse.
  • Parámetros: Una matriz de objetos que identifican datos de telemetría.

El formato JSON de este mensaje es el que se indica a continuación:

{
  "requestId": "",
  "userChainIdentifier": "",
  "contractLedgerIdentifier": "",
  "workflowFunctionName": "ReadTelemetry",
  "Parameters": [
    { "name": "humidity", "value": "" },
    { "name": "temperature", "value": "" }
    { "name": "timestamp", "value": "" }
  ]
}

Azure Blockchain Workbench

El objetivo inicial de la tecnología de cadena de bloques era facilitar las transacciones fiscales de confianza entre dos partes sin la necesidad de un tercero, como un banco. Dado que la cadena de bloques se basa en un sistema descentralizado en red, es más difícil de dañar. Si se edita la información en uno de los bloques, el resto de personas que vean el bloque podrán ver las los cambios que se han realizado. La introducción de la tecnología de cadena de bloques en cadenas de suministro puede ayudar a evitar problemas como fraude y falsificación. Las transacciones en la cadena de bloques se almacenan y distribuyen en varios nodos dentro de la red. Estas transacciones o registros son muy seguros debido al funcionamiento de la cadena de bloques (consulte mi artículo en bit.ly/2ZQcm16 para obtener más información acerca de la ciberseguridad con la cadena de bloques), lo que hace de esta tecnología el método perfecto para registrar transacciones de forma transparente y segura en un registro independiente e inmutable. En el contexto de una cadena de suministro, además de un registro de transacciones, los contratos inteligentes de cadena de bloques comprueban y aplican un acuerdo entre dos o más entidades implicadas en una transacción. Los contratos inteligentes permiten que se produzcan transacciones creíbles sin autorización ni verificación por parte de una autoridad central. Además, se puede hacer un seguimiento de estas transacciones y son irreversibles.

El libro de contabilidad de la cadena de bloques de esta solución está hospedado en Azure. En concreto, es una instalación Ethereum implementada como parte de Azure Blockchain Workbench. Con Azure Blockchain Workbench (bit.ly/2XBhWqw), puede configurar e implementar una red de consorcio en cuestión de minutos gracias a la implementación del libro de contabilidad automático, la construcción de redes y los comandos de cadena de bloques preintegrados que reducen en gran medida el tiempo de implementación de la infraestructura. Una vez aprovisionada la infraestructura necesaria, puede programar sus contratos inteligentes y, a continuación, implementarlos en Blockchain Workbench para su ejecución. Blockchain Workbench genera una interfaz de usuario web automáticamente, sin programación, después del flujo de trabajo del contrato inteligente, y le permite realizar un seguimiento de cualquier cambio de estado. Por ejemplo, el mensaje enviado por IoT Central mediante Flow envía los valores medidos de temperatura y humedad. Un contrato inteligente valida estos valores y, si no cumplen las condiciones programadas en el propio contrato inteligente, se establece el estado de esta transacción como no conforme. En ese caso, esta fase de la cadena de suministro no es válida y el proceso no seguirá (o no debería) a la siguiente fase. La figura 6 muestra la primera fase de ejecución del contrato inteligente de telemetría que se usa en esta solución de la cadena de suministro: Se crea un nuevo contrato entre dos partes implicadas; se registra un dispositivo para capturar los datos de telemetría y se establecen las condiciones iniciales de temperatura y humedad.

Primera fase de ejecución del contrato inteligente de telemetría
Figura 6 Primera fase de ejecución del contrato inteligente de telemetría

El contrato inteligente de telemetría de la figura 7 implementado en el lenguaje de programación Solidity (solidity.readthedocs.io) para la plataforma Ethereum define las entidades, las propiedades y los Estados, que, juntos, son una representación del estado del contrato en cualquier momento dado. Las partes de la cadena de suministro se identifican mediante una dirección de cadena de bloques; en Azure Blockchain Workbench, es la dirección del dispositivo o el usuario registrada en la plataforma. Para acceder a Blockchain Workbench, las partes deben estar registradas en Azure Active Directory. Los estados representan una enumeración de fases en el proceso de la cadena de suministro (contrato creado, bienes en tránsito, transacción completada o no conforme), así como los dos tipos diferentes de sensores en uso de este ejemplo (temperatura y humedad). La enumeración permite agregar más entradas fácilmente si el proceso de la cadena de suministro requiere fases adicionales o introduce tipos diferentes de sensor.

Figura 7 Contrato inteligente de telemetría

contract Telemetry
{
  // States
  enum StateType { Created, InTransit, Completed, OutOfCompliance }
  enum SensorType { None, Humidity, Temperature }
  // Parties
  address public Owner;
  address public InitiatingCounterparty;
  address public Counterparty;
  address public PreviousCounterparty;
  address public Device;
  address public SupplyChainOwner;
  address public SupplyChainObserver;
  // Properties
  StateType public State;
  SensorType public ComplianceSensorType;
  int public MinHumidity;
  int public MaxHumidity;
  int public MinTemperature;
  int public MaxTemperature;
  int public ComplianceSensorReading;
  bool public ComplianceStatus;
  string public ComplianceDetail;
  int public LastSensorUpdateTimestamp;

La interfaz de usuario para acceder a un nuevo contrato de Blockchain Workbench se genera automáticamente a partir del constructor del contrato inteligente de telemetría de la figura 8. Este constructor establece las condiciones iniciales para el proceso de transporte que deben cumplir todas las partes implicadas en la cadena de suministro. También define el estado inicial como StateType.Created.

Figura 8 Constructor de contrato inteligente de telemetría

constructor(address device, address supplyChainOwner, address supplyChainObserver,
  int minHumidity, int maxHumidity, int minTemperature, int maxTemperature) public
{
  ComplianceStatus = true;
  ComplianceSensorReading = -1;
  InitiatingCounterparty = msg.sender;
  Owner = InitiatingCounterparty;
  Counterparty = InitiatingCounterparty;
  Device = device;
  SupplyChainOwner = supplyChainOwner;
  SupplyChainObserver = supplyChainObserver;
  MinHumidity = minHumidity;
  MaxHumidity = maxHumidity;
  MinTemperature = minTemperature;
  MaxTemperature = maxTemperature;
  State = StateType.Created;
  ComplianceDetail = "N/A";
}

Por último, cuando se transmiten los datos de telemetría y se produce una excepción de regla en IoT Central, se ejecuta el flujo descrito anteriormente, que, a su vez envía un mensaje a Blockchain Workbench para invocar la función ReadTelemetry de la figura 9. Esta función valida los valores de entrada de humedad o temperatura que registra el dispositivo IoT y genera un estado no conforme si no se cumplen las condiciones establecidas en la primera fase.

Figura 9 Función ReadTelemetry

function ReadTelemetry(int humidity, int temperature, int timestamp) public
{
  if (Device != msg.sender)
  {
    revert();
  }
  if (State == StateType.Completed || State == StateType.OutOfCompliance)
  {
    revert();
  }
  LastSensorUpdateTimestamp = timestamp;
  if (humidity < MinHumidity || humidity > MaxHumidity)
  {
    ComplianceSensorType = SensorType.Humidity;
    ComplianceSensorReading = humidity;
    ComplianceDetail = "Humidity value out of range.";
    ComplianceStatus = false;
  }
  else if (temperature < MinTemperature || temperature > MaxTemperature)
  {
    ComplianceSensorType = SensorType.Temperature;
    ComplianceSensorReading = temperature;
    ComplianceDetail = "Temperature value out of range.";
    ComplianceStatus = false;
  }
  if (ComplianceStatus == false)
  {
    State = StateType.OutOfCompliance;
  }
}

Desde una perspectiva de la interfaz de usuario, Blockchain Workbench registra automáticamente cada cambio de estado y actualiza automáticamente el estado general del contrato de telemetría según corresponda, como se muestra en la figura 10.

Contrato de telemetría actualizado
Figura 10 Contrato de telemetría actualizado

Resumen

La plataforma Azure ofrece una colección de servicios para compilar soluciones completamente integradas para las necesidades de la industria 4.0, incluida la plataforma de IoT y los servicios administrados de la cadena de bloques. En este artículo, describí un patrón común de cadena de bloques para la supervisión de bienes con IoT habilitado mientras se desplazan a lo largo de una cadena de suministro de varias partes. Es necesario cumplir las reglas de cumplimiento específicas a lo largo del proceso de transporte. En este escenario, una entidad iniciadora especifica condiciones contractuales, como un intervalo necesario de temperatura y humedad que los operadores de la cadena de suministro deben cumplir. En cualquier momento, si el dispositivo tiene una medida de temperatura o humedad que está fuera del intervalo, el estado de contrato inteligente se actualizará para indicar que no está conforme, se registrará una transacción en la cadena de bloques y se desencadenarán eventos de corrección de nivel inferior.

Para quienes estén interesados en aprender más, un excelente punto de partida es la arquitectura de referencia de Azure para la cadena de suministro, disponible en bit.ly/2X7NIr7.


Stefano Tempesta es director regional de Microsoft, MVP de Azure, AI y Business Applications y miembro de Blockchain Council. Los intereses de Tempesta, orador frecuente en conferencias de TI internacionales, como Microsoft Ignite y Tech Summit, se extienden a las tecnologías de cadena de bloques y relacionadas con la inteligencia artificial. Creó Blockchain Space (blogchain.space), un blog sobre tecnologías de cadena de bloques, escribe para MSDN Magazine y MS Dynamics World, y publica experimentos de Machine Learning en Azure AI Gallery (gallery.azure.ai).

Gracias al siguiente experto técnico de Microsoft por revisar este artículo: Danilo Diaz


Comente este artículo en el foro de MSDN Magazine