Agosto de 2019
Volume 34 – Número 8
[Blockchain]
Proteja sua Cadeia de Fornecimento com o Azure IoT e a Nuvem de Blockchain
Por Stefano Tempesta | agosto de 2019
A adoção das tecnologias blockchain e IoT tem o potencial de ajudar a indústria de manufatura a tornar as cadeias de suprimentos mais seguras e os processos associados mais transparentes. Provavelmente, você já ouviu falar em blockchain apenas no contexto de criptomoeda, então, como o blockchain é relevante para as cadeias de suprimentos?
Um Exemplo de Cadeia de Fornecimento de Distribuição
A estrutura tradicional de gerenciamento da cadeia de suprimentos tem limitações na confiabilidade e precisão das medições e na transparência dos processos entre todas as partes envolvidas. As tecnologias de IoT e blockchain representam uma solução potencial para enfrentar esses desafios, introduzindo dispositivos para automatizar a coleta de métricas em qualquer estágio da cadeia de suprimentos, além de um razão digital distribuído para armazenar logs de transações de maneira imutável. Além disso, os contratos inteligentes de blockchain podem usar a inteligência baseada em regras para realizar a validação desses dados e atualizar o estado de cada estágio da cadeia de suprimentos para todas as partes envolvidas, de maneira totalmente confiável e transparente. Por exemplo, termos, condições e qualquer outra lógica podem ser codificados em um contrato inteligente para verificar a execução correta de uma transação de mercadorias entre dois estágios da cadeia de suprimentos.
A Figura 1 simplifica uma cadeia de suprimentos de distribuição na qual um produtor de alimentos transfere mercadorias para uma empresa de processamento de alimentos para embalagem e transporte. O produto é lacrado em um nível definido de temperatura e umidade e essas condições, ou similares, devem ser mantidas durante o transporte para o depósito e a loja de varejo.
Figura 1 Uma cadeia de suprimentos de distribuição usando um contrato inteligente
Essas condições são codificadas em um contrato inteligente de blockchain, conforme ilustrado posteriormente neste artigo. Dispositivos de IoT com sensores para medir temperatura e umidade são instalados nos contêineres e transportadoras que armazenam e transportam mercadorias. Os dados de telemetria são capturados em intervalos regulares durante as fases de armazenamento e distribuição, e as métricas reais são validadas com relação aos níveis definidos no contrato inteligente. Se os valores de temperatura ou umidade excederem esses níveis, o estado do transporte das mercadorias mudará para "fora de conformidade" e esse estado será refletido no log de transações armazenado dentro do razão digital do blockchain. Todos os participantes da cadeia de suprimentos podem visualizar o estado e os detalhes do contrato a qualquer momento. A contraparte responsável pelo armazenamento ou transporte de mercadorias especificará a próxima contraparte que manipulará as parcelas como o próximo estágio, e os dispositivos IoT registrados encaminharão os dados de telemetria para um hub IoT central. Isso permite que o iniciador da cadeia de suprimentos e todos os seus participantes identifiquem qual contraparte não cumpriu os regulamentos de conformidade se em algum momento do processo os requisitos de temperatura ou umidade não foram atendidos.
Uma cadeia de suprimentos requer um diagrama de transição de estado para articular os fluxos possíveis e as várias funções de transição em cada estado. Cada parceiro comercial da cadeia de suprimentos só pode executar determinadas ações, dependendo de sua função e do estado dos produtos transportados. Estados, fluxos de trabalho e partes envolvidas são descritos em um contrato inteligente e implantados no Azure Blockchain Workbench, conforme descrito posteriormente neste artigo. O exemplo fornecido aqui implementa os quatro estados mostrados na Figura 2.
Figura 2 Os quatro estados do exemplo da cadeia de suprimentos
Estado | Descrição |
Criado em | Indica que o contrato foi iniciado e o acompanhamento está em andamento. |
InTransit | Indica que uma contraparte atualmente tem a posse e é responsável pelas mercadorias que estão sendo transportadas. |
Concluído | Indica que o produto chegou ao destino pretendido. |
OutOfCompliance | Indica que os termos acordados para as condições de temperatura e umidade não foram cumpridos. |
Azure IoT Central
O exemplo neste artigo usa o Azure IoT Central (bit.ly/2X6Jlwe) para conectar os dispositivos IoT A IoT Central é uma solução SaaS (Software como Serviço) totalmente gerenciada que facilita a conexão, o monitoramento e o gerenciamento de dispositivos em escala. A configuração inicial dos dispositivos é simplificada com a adoção de modelos de dispositivos para uma variedade de plataformas, e a implementação do projeto do componente IoT da solução da cadeia de suprimentos pode se beneficiar da simulação do dispositivo para fins de teste.
A solução de IoT implementada para a cadeia de suprimentos de distribuição no exemplo atual consiste em um gateway baseado em nuvem que recebe dados de telemetria de sensores de dispositivo e os próprios dispositivos que se conectam à IoT Central. Antes de poder transmitir dados, os dispositivos IoT são registrados na plataforma em nuvem e recebem uma identidade. Ao conectar-se à IoT Central, um dispositivo envia suas informações de identidade, juntamente com os dados do sensor. Se o dispositivo não enviar essas informações de identidade, a conectividade falhará. Depois que uma conexão bem-sucedida é estabelecida entre os dispositivos e o gateway da nuvem, os dados são ingeridos em intervalos definidos. A Azure IoT Central facilita esse fluxo, fornecendo recursos de registro de dispositivo e ingestão de dados, além de visualização de pontos de telemetria em um painel, conforme mostrado na Figura 3.
Figura 3 O Painel do Azure IoT Central
A Figura 3 mostra as medidas produzidas por um dispositivo simulado. No Azure IoT Central, você pode definir um modelo de dispositivo para os dispositivos que se conectam ao seu aplicativo, uma espécie de blueprint que define as características e o comportamento de um tipo de dispositivo. Um modelo pode ser usado para conectar um dispositivo físico ou para simular o fluxo de dados dentro de certos limites. Dados simulados incluem:
- Propriedades do dispositivo que são definidas por um dispositivo e que são somente leitura no aplicativo.
- O status determina o comportamento do dispositivo.
- Medidas específicas para os sensores instalados.
A configuração de um aplicativo no IoT Central começa definindo pelo menos um modelo de dispositivo e adicionando um dispositivo, real ou simulado. Você pode acessar o painel da IoT Central em bit.ly/2RBtWD6 e, em seguida, navegue até a página do Gerenciador de Aplicativos da Azure IoT Central para começar a criar um novo aplicativo da Azure IoT Central. Depois de criar um aplicativo, acesse a seção Gerenciador de Dispositivos para adicionar um dispositivo real ou simulado associado a cada modelo de dispositivo no aplicativo. Quando você cria um modelo de dispositivo, o Azure IoT Central gera um dispositivo simulado a partir do modelo. O dispositivo simulado gera telemetria que permite testar o comportamento do seu aplicativo antes de conectar um dispositivo real. Na guia Medidas, você pode especificar as medidas, como telemetria, evento e estado, enviadas pelo dispositivo e definir as regras associadas ao dispositivo.
Depois de configurar um dispositivo e suas medidas, você pode usar eventos para definir dados pontuais que o dispositivo deve enviar quando ocorrer um evento como erro ou falha de componente. A Azure IoT Central pode simular eventos do dispositivo para permitir que você teste o comportamento do seu aplicativo antes de conectar um dispositivo real Após alguns instantes, a guia Medidas mostra um gráfico dos eventos gerados aleatoriamente a partir do seu dispositivo conectado simulado.
Por fim, você cria uma regra que executa uma ação personalizada quando a temperatura ou umidade medida excede as condições especificadas. Nesse caso, configurei uma ação do Microsoft Flow, conforme mostrado na Figura 4, para executar quando o nível de umidade for maior que 60 e a temperatura maior que 8.
Figura 4 Configuração de uma ação no Microsoft Flow
Microsoft Flow
Por que o Flow? As redes de blockchain são isoladas do mundo exterior, o que significa que nenhum dado produzido "fora da cadeia" pode ser trazido. Contratos inteligentes operam com dados armazenados no próprio blockchain. O Kit de Desenvolvimento de Blockchain do Azure ( bit.ly/2TkG23Z) é uma extensão dos recursos do Azure Blockchain Workbench (mais sobre isso em um momento). O Kit de Desenvolvimento do Blockchain incorpora serviços do Azure para gerenciamento de chaves, identidade e dados fora da cadeia, APIs de monitoramento e mensagens em uma arquitetura de referência que pode ser usada para criar rapidamente aplicativos baseados em blockchain que se integram a qualquer sistema externo. Com o Flow, é possível enviar uma mensagem ao Barramento de Serviço do Azure implantado como parte do Azure Blockchain Workbench e transferir dados, com segurança, para um razão digital de blockchain. A Figura 5 mostra o acionador do fluxo quando uma regra é disparada no IoT Central.
Figura 5 Como um fluxo é acionado na IoT Central
Uma mensagem é então preparada e, eventualmente, colocada no Barramento de Serviço do Azure Blockchain Workbench, de acordo com o padrão de integração baseado na API REST descrito em bit.ly/31WqmIs. Na preparação de mensagem a ser enviada ao Barramento de Serviço do Microsoft Azure, os seguintes parâmetros são criados como parte do fluxo em si:
- requestId: é um valor exclusivo para identificar uma solicitação. No Flow, ele pode ser implementado por uma variável com o guid de expressão.
- timestamp: é a data e hora da solicitação, no Flow ele pode ser obtido extraindo os tiques do instante de tempo atual. No entanto, já que existem 10 milhões de tiques em um segundo, isso resultaria em um número muito grande, portanto, normalmente calculo o tempo de época do Unix, que é o número de segundos decorridos desde 1º de janeiro de 1970 (meia-noite UTC).
No fluxo, um carimbo de hora pode ser calculado facilmente com a expressão de subtração:
sub(variables('TicksNow'), variables('TicksUnixEpoch'))
Aqui, TicksNow é uma variável inteira definida como ticks (utcNow ()) e TicksUnixEpoch é outra variável definida como ticks ('1970-01-01').
A mensagem do Barramento de Serviço também requer:
- userChainIdentifier: O endereço de blockchain do usuário ou do dispositivo que foi criado em uma rede de blockchain.
- contractLedgerIdentifier: O endereço de blockchain do contrato na razão.
- workflowFunctionName: O nome da função do contrato inteligente a ser invocado.
- Parâmetros: Uma matriz de objetos que identifica dados de telemetria.
O formato JSON desta mensagem é o seguinte:
{
"requestId": "",
"userChainIdentifier": "",
"contractLedgerIdentifier": "",
"workflowFunctionName": "ReadTelemetry",
"Parameters": [
{ "name": "humidity", "value": "" },
{ "name": "temperature", "value": "" }
{ "name": "timestamp", "value": "" }
]
}
Azure Blockchain Workbench
O objetivo inicial da tecnologia blockchain era facilitar transações fiscais confiáveis entre duas partes, sem a necessidade de terceiros, como um banco, estar envolvido. Como o blockchain depende de um sistema descentralizado e em rede, ele é mais difícil corromper. Se as informações de um dos blocos forem editadas, todas as outras que visualizarem esse bloco poderão ver as edições que foram feitas. A introdução da tecnologia blockchain nas cadeias de suprimentos pode ajudar a evitar problemas como fraude e falsificação. As transações de blockchain são armazenadas e distribuídas por vários nós na rede. Essas transações, ou registros, são muito seguras devido à forma como o blockchain funciona (veja meu artigo em bit.ly/2ZQcm16 para obter mais informações sobre segurança cibernética com blockchain), o que torna essa tecnologia o método perfeito para transparência e gravar transações com segurança em um log independente e imutável. No contexto de uma cadeia de suprimentos, além de um log de transações, os contratos inteligentes de blockchain verificam e impõem um acordo entre duas ou mais partes envolvidas em uma transação. Os contratos inteligentes permitem que transações confiáveis ocorram sem autorização e verificação por uma autoridade central. Além disso, essas transações são rastreáveis e irreversíveis.
O razão do blockchain nesta solução está hospedado no Azure. Especificamente, é uma instalação do Ethereum implantada como parte do Azure Blockchain Workbench. Com o Azure Blockchain Workbench (bit.ly/2XBhWqw), você pode configurar e implantar uma rede de consórcio em apenas alguns minutos, graças à implantação automática do razão, construção da rede e comandos pré-criados do blockchain que reduzem significativamente a infraestrutura tempo de implantação. Depois que a infraestrutura necessária for provisionada, você poderá codificar seus contratos inteligentes e implantá-los no Blockchain Workbench para execução. O Blockchain Workbench cria uma UI da Web automaticamente, sem codificação, após o fluxo de trabalho do seu contrato inteligente e permite acompanhar qualquer alteração de status. Por exemplo, a mensagem enviada pela IoT Central usando o Flow envia os valores medidos para temperatura e umidade. Um contrato inteligente valida esses valores e, se não atenderem às condições codificadas no próprio contrato inteligente, definirá o status dessa transação como Fora de conformidade. Esse estágio da cadeia de suprimentos é inválido e o processo não progredirá (ou não deve progredir) para o próximo estágio. A Figura 6 mostra o primeiro estágio da execução do contrato inteligente de Telemetria usado nesta solução da cadeia de suprimentos: Um novo contrato é criado entre duas partes envolvidas; um dispositivo está registrado para capturar dados de telemetria; e as condições iniciais de umidade e temperatura são definidas.
Figura 6 A primeira etapa da execução do contrato inteligente de telemetria
O contrato inteligente de Telemetria da Figura 7 implementado na linguagem de programação Solidity ( solidity.readthedocs.io ) para a plataforma Ethereum, define partes, propriedades e estados, que todos juntos são uma representação do status do contrato a qualquer momento. As partes da cadeia de suprimentos são identificadas por um endereço de blockchain; no Azure Blockchain Workbench, esse é o endereço do usuário ou dispositivo registrado na plataforma. Para acessar o Blockchain Workbench, as partes precisam ser registradas no Azure Active Directory. Os estados representam uma enumeração de estágios no processo da cadeia de suprimentos (contrato criado, mercadorias em trânsito, transação concluída ou fora de conformidade registrada), bem como os dois tipos diferentes de sensores em uso neste exemplo (umidade e temperatura). A enumeração permite que mais entradas sejam adicionadas facilmente, caso o processo da cadeia de suprimentos exija estágios adicionais ou introduza diferentes tipos de sensores.
Figura 7 O contrato inteligente de telemetria
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;
A interface do usuário para inserir um novo contrato no Blockchain Workbench é gerada automaticamente com base no construtor do contrato inteligente de Telemetria na Figura 8. Esse construtor define as condições iniciais para o processo de transporte que devem ser atendidas por todas as partes envolvidas na cadeia de suprimentos. Ele também define o estado inicial como StateType.Created.
Figura 8 O construtor de contrato inteligente de telemetria
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";
}
Finalmente, quando os dados de telemetria são transmitidos e uma exceção de regra ocorre na IoT Central, o fluxo descrito anteriormente é executado, que por sua vez envia uma mensagem ao Blockchain Workbench para chamar a função ReadTelemetry na Figura 9. Essa função valida os valores de entrada para umidade ou temperatura registrados pelo dispositivo IoT e aumenta o estado de não conformidade se as condições definidas no primeiro estágio não forem atendidas.
Figura 9 A função 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;
}
}
Da perspectiva da interface do usuário, o Blockchain Workbench registra automaticamente cada alteração de estado e atualiza o status geral do contrato de Telemetria de acordo, como mostra a Figura 10.
Figura 10 O contrato de telemetria atualizado
Conclusão
A plataforma Azure oferece uma coleção de serviços para a criação de soluções totalmente integradas para as necessidades da Indústria 4.0, incluindo a plataforma IoT e os serviços gerenciados de blockchain. Nesse artigo, descrevi um padrão comum de blockchain para o monitoramento de mercadorias habilitado para IoT à medida que elas se movem ao longo de uma cadeia de suprimentos de várias partes. Regras de conformidade específicas devem ser atendidas durante todo o processo de transporte. Nesse cenário, uma parte iniciante especifica as condições contratuais, como um intervalo de umidade e temperatura exigido, às quais um transportador da cadeia de suprimentos deve aderir. A qualquer momento, se o dispositivo fizer uma medição de temperatura ou umidade fora do intervalo, o estado do contrato inteligente será atualizado para indicar que está fora de conformidade, registrando uma transação no blockchain e acionando a correção de eventos no futuro.
Para os interessados em aprender mais, um ótimo ponto de partida é a arquitetura de referência do Azure para cadeia de suprimentos, que você encontrará em bit.ly/2X7NIr7.
Stefano Tempestaé Diretor Regional da Microsoft, MVP da Azure em Inteligência Artificial e Aplicativos de Negócios e membro do Blockchain Council. Um palestrante regular em conferências internacionais de TI, incluindo Microsoft Ignite e Tech Summit, os interesses do Tempesta vão além das tecnologias de blockchain e relacionadas com IA. Ele criou o Blogchain Space (blogchain.space), um blog sobre tecnologias de blockchain, escreve para a MSDN Magazine e MS Dynamics World e publica experimentos de aprendizado de máquina na Azure AI Gallery (Gallery.Azure.AI).
Agradecemos aos seguintes especialistas técnicos da Microsoft pela revisão deste artigo: Danilo Diaz