Participe da Maratona Behind the Code! A competição de programação que mais te desafia! Inscreva-se aqui

Escute eventos de uma rede de blockchain distribuída

Neste tutorial, saiba como usar microsserviços Java para escutar eventos de uma rede de blockchain distribuída usando o Open Liberty. Envie transações e escute eventos usando o Hyperledger Fabric SDK para Java e Open Liberty.

Aprenda especificamente a:

  • Usar a extensão IBM Blockchain Platform para criar uma rede de blockchain local entre duas organizações distribuída e implementar um contrato inteligente de amostra denominado “FabCar”
  • Usar as ferramentas de desenvolvimento do Open Liberty para iniciar três microsserviços Java
  • Fazer transações na rede de blockchain a partir do microsserviço Java da Org1
  • Escutar eventos emitidos pelo Hyperledger Fabric no microsserviço Java da Org2
  • Atualizar o proprietário de um carro e visualizar o evento
  • Consultar carros por ID do carro e estado do livro-razão inteiro

O uso do blockchain fornece às cadeias de suprimentos um registro permanente de transações, que são agrupadas em blocos que não podem ser alterados, criando uma alternativa ao rastreamento em papel tradicional e sistemas de inspeção manuais capazes de deixar as cadeias de suprimentos vulneráveis a imprecisões e fraude.

Este tutorial demonstra o cenário de uma rede de blockchain distribuída que usa um vendedor (Organização 1) e um comprador (Organização 2) em uma cadeia de suprimentos para vendas de carros.

O vendedor adicionará um carro à rede de blockchain; o comprador será notificado quando um novo veículo tiver sido adicionado ao blockchain por meio de um evento emitido.

O comprador pode escutar os eventos de duas maneiras:

  • Consultando o último evento; ou
  • Escutando eventos por meio de uma interface da web que é atualizada automaticamente com novos dados de transações

Fluxo de arquitetura

drawing

  1. O desenvolvedor desenvolve um contrato inteligente usando Java (uma amostra “FabCar” pré-configurada).
  2. Use a extensão IBM Blockchain Platform para VS Code para empacotar o contrato inteligente “FabCar” descentralizado.
  3. Configure e lance o serviço IBM Blockchain Platform 2.0.
  4. O serviço IBM Blockchain Platform 2.0 permite a criação de uma rede em contêineres do Docker, possibilitando localmente a instalação e a instanciação do contrato inteligente “FabCar” na rede para duas organizações.
  5. O vendedor adiciona um novo carro ao livro-razão usando a Organização 1 no Open Liberty.
  6. O comprador usa o Open Liberty para escutar transações, interagindo subsequentemente com a rede implementada no IBM Blockchain Platform 2.0.
  7. O carro adicionado ao livro-razão emite automaticamente um evento de transação, e o comprador recebe a referida transação.
  8. O comprador pode consultar o último evento ou receber atualizações automáticas.

Pré-requisitos:

  • Java
  • Git
  • Maven
  • Docker
  • VS Code
  • Linux ou Mac OS

Etapas

  • Obter as ferramentas de desenvolvimento.
  • Importar os projetos Open Liberty para VS Code.
  • Importar o projeto do contrato inteligente de amostra FabCar para VS Code.
  • Iniciar uma rede de blockchain entre duas organizações e implementar o contrato para ambas.
  • Exportar credenciais para a Org1 e a Org2 para comunicação com a rede de blockchain.
  • Iniciar os microsserviços da Org1 e da Org2.
  • Adicionar um carro ao livro-razão como vendedor da Org1.
  • Consultar o estado do livro-razão como comprador da Org2.
  • Visualizar eventos do Hyperledger Fabric.
  • Escutar eventos por meio de uma interface da web.
  • Atualizar o proprietário de um carro no livro-razão da Org2.
  • Consultar um carro específico no livro-razão.
  • Interromper os microsserviços Open Liberty.
  • Interromper a rede de blockchain.
1

Obter as ferramentas de desenvolvimento

  1. Baixe e instale o Visual Studio Code, caso ainda não tenha feito isso.

  2. Instale a extensão do IBM Blockchain Platform para VS Code.

    Após a instalação, se pré-requisitos adicionais forem necessários, a extensão orientará você durante a instalação. Lembre-se de escolher os pré-requisitos do Docker, pois eles serão usados para criar sua rede Fabric.

  3. Instale as ferramentas do Open Liberty para VS Code.

2

Importar os projetos Open Liberty para VS Code

Como estamos demonstrando uma arquitetura de microsserviços orientada a eventos, há três microsserviços Java do Open Liberty sendo inicializados. O Org1-Functions faz transações com a rede de blockchain para o vendedor, o Org2-Functions faz transações com a rede de blockchain para o comprador e o Org2-Events escuta eventos para o comprador.

  1. Abra uma janela do terminal e clone o projeto de amostra no GitHub:

    git clone https://github.com/IBM/eventing-openliberty-blockchain.git

  2. Para adicionar o projeto Org1-Functions ao VS Code, selecione File > Open > eventing-openliberty-blockchain/microservices/org1-microservice/org1-OL-Blockchain-Functions e clique em Open.

    Isso adiciona o projeto da Org1 ao espaço de trabalho e adiciona automaticamente Liberty Dev Dashboard à extensão do VS Code. Para exibir org1-ol-blockchain-functions, é possível clicar em Liberty Dev Dashboard.

  3. Selecione File > New Window para abrir uma nova janela do VS Code e adicionar o projeto Org2-Functions.

  4. Para importar o projeto da Org2, selecione File > Open > eventing-openliberty-blockchain/microservices/org2-microservices/org2-OL-Blockchain-Functions e clique em Open.

    Abra Liberty Dev Dashboard para visualizar org2-ol-blockchain-functions.

  5. Selecione File > New Window para abrir uma nova janela do VS Code e adicionar o projeto Org2-Events.

  6. Para importar o projeto Org2-Events, selecione File > Open > eventing-openliberty-blockchain/microservices/org2-microservices/org2-OL-Blockchain-Events e clique em Open.

    Para exibir org2-ol-blockchain-events, clique em Liberty Dev Dashboard.

3

Importar o projeto do contrato inteligente de amostra FabCar para VS Code

  1. Clique no ícone do IBM Blockchain Platform no canto superior direito (se parece com um quadrado).

    drawing

    Pode demorar um pouco. A barra roxa na parte inferior dirá “Activating extension”.

  2. Selecione Sample Code: FabCar na seção “Other Resources”.

  3. Clique no botão Clone para fazer o clone git do código de amostra para a amostra FabCar. Depois, escolha um local conveniente para clonar a amostra Fabric.

  4. Selecione Clone.

    drawing

  5. Na lista de opções, escolha FabCar v1.0.0 Java.

  6. Clique em Open Locally.

    drawing

  7. Na paleta de comandos, clique em Add to workspace.

  8. Opcional: clique no botão File explorer no canto superior esquerdo. Você verá fabcar-contract-java, que é o projeto de contrato inteligente.

  9. Clique no ícone do IBM Blockchain Platform no lado esquerdo para navegar de volta à extensão do IBM Blockchain Platform para VS Code.

4

Iniciar uma rede de blockchain entre duas organizações e implementar o contrato

  1. Em FABRIC ENVIRONMENTS, selecione o ícone de adicionar (+) para criar uma rede de blockchain personalizada.

  2. Selecione Create new from template, usando uma estrutura de rede de blockchain de modelo.

  3. Como estamos criando uma rede entre duas organizações, selecione 2 Org template (2CAs, 2 peers, 1 channel).

    drawing

  4. Nomeie o ambiente como 2 Org Local Fabric.

    Levará de dois a cinco minutos para iniciar um novo ambiente local. Após ser concluído com sucesso, ele exibirá a mensagem “Successfully added a new environment”.

  5. Clique em 2 Org Local Fabric para conectar ao tempo de execução do Fabric local. Depois de se conectar ao ambiente “2 Org Local Fabric”, selecione Smart Contracts > Instantiated, + Instantiate.

  6. Escolha fabcar-contract-java Open Project (no prompt da paleta de comandos).

  7. Quando vir o prompt “Enter a name for your Java Package”, insira fabcar e pressione Enter.

  8. Quando vir o prompt “Enter a version for your Java package”, insira 2.0.0.

  9. Selecione todos os peers para instalar o contrato inteligente e pressione OK

    Em um ambiente de cadeia de suprimentos, o contrato inteligente é um acordo autoimpositivo entre as partes. Se todas as partes vinculadas ao contrato inteligente estiverem de acordo, dados poderão ser adicionados ao blockchain.

    Em nosso exemplo, o comprador e o vendedor estão de acordo com os termos e condições do contrato inteligente.

    drawing

  10. Quando “Optional functions” aparecer, insira initLedger. Isso inicializa o livro-razão com carros exclusivos. Se a função não for inserida, a rede de blockchain estará vazia.

    drawing

  11. Para todas as outras “Optional functions”, pressione Enter para pular.

  12. Selecione No para a pergunta “Do you want to provide a private data collection configuration file?”. Arquivos de configuração de dados privados não são necessários.

    A janela de notificação no canto inferior esquerdo dirá: “IBM Blockchain Platform extension: Instantiating Smart Contract”. Levará de dois a cinco minutos, aproximadamente, para instanciar o contrato inteligente.

5

Exportar credenciais para comunicar com a rede de blockchain

Para o Open Liberty se comunicar com a rede de blockchain, o Hyperledger Fabric tem recursos de segurança que impedem os aplicativos que tentam fazer transações, a menos que você tenha os perfis e autoridades de certificação específicos.

  1. Exportar os Fabric Gateways locais:

    1. No painel “FABRIC GATEWAYS”, selecione 2 Org Local Fabric.

      Como existem várias organizações, precisamos nos conectar como administradores à Org1 e à Org2 para exportar os perfis de conexão.

    2. Selecione Org1.

    3. “Choose an identity to connect with” aparecerá na paleta de comandos. Selecione admin.

    4. Passe o ponteiro do mouse sobre o título FABRIC GATEWAYS e clique em > Export connection profile.

      drawing

    5. A janela finder será aberta.

    6. Navegue até Users/Shared/.

    7. Crie uma nova pasta FabConnection.

      O diretório de caminho completo deve ser Users/Shared/FabConnection.

    8. Salve o arquivo .json como 2-Org-Local-Fabric-Org1_connection.json.

    9. Desconecte do Fabric Gateway da Org1.

      drawing

    10. Selecione Org2.

    11. “Choose an identity to connect with” aparecerá na paleta de comandos. Selecione admin.

    12. Passe o ponteiro do mouse sobre o título FABRIC GATEWAYS e clique em > Export connection profile.

    13. A janela finder será aberta.

    14. Navegue até Users/Shared/FabConnection.

    15. Salve o arquivo .json como 2-Org-Local-Fabric-Org2_connection.json.

  2. Exportar Fabric Wallets:

    1. No painel “FABRIC WALLETS”, selecione 2 Org Local Fabric e, em seguida, clique com o botão direito do mouse em Org1 e selecione Export Wallet.

      drawing

    2. Salve a pasta como org-1-wallet no diretório /Users/Shared/FabConnection/.

    3. Para exportar a carteira da Org2, selecione Org2 e, em seguida, clique com o botão direito do mouse e selecione Export Wallet.

    4. Salve a pasta como org-2-wallet no diretório /Users/Shared/FabConnection/.

6

Iniciar os microsserviços da Org 1 e da Org 2

  1. Três janelas do VS Code serão abertas. Navegue de volta para a janela do VS Code com o microsserviço Java da Org1. Como instalamos a Dev Tool para o Open Liberty, clique no ícone do Liberty Dev Dashboard. A extensão exibirá o projeto: org-1-ol-blockchain-functions.

  2. Clique com o botão direito do mouse em org1-ol-blockchain-functions e selecione Start.

    O serviço será rapidamente inicializado em dois a cinco segundos.

    org-1-ol-blockchain-functions está em execução na porta 9080.

  3. Navegue até as outras janelas do VS Code e clique no ícone do Liberty Dev Dashboard. A extensão exibirá o projeto.

    Clique com o botão direito do mouse em org2-ol-blockchain-events e selecione Start.

    org2-ol-blockchain-events está em execução na porta 9081.

    Clique com o botão direito do mouse em org2-ol-blockchain-functions e selecione Start.

    org2-ol-blockchain-functions está em execução na porta 9082.

7

Adicionar um carro ao livro-razão como vendedor

Como há duas organizações, testaremos o envio de uma transação do vendedor e, depois, visualizaremos o livro-razão atualizado como o comprador.

  1. Navegue até o microsserviço Java do vendedor na porta 9080:

    http://localhost:9080/openapi/ui/

  2. Navegue até POST /System/Resources/Car Add a car to the ledger.

  3. Clique em Try it out.

  4. Preencha o esquema de exemplo com os valores a seguir:

    {
      "make": "VW",
      "model": "Golf",
      "colour": "White",
      "owner": "Tom J",
      "key": "CAR20"
    }
    
8

Consultar o estado do livro-razão como comprador

Um comprador pode estar interessado em comprar um carro usado e consultará todos os carros no blockchain.

  1. Navegue até o microsserviço Java do comprador na porta 9082:

    http://localhost:9082/openapi/ui/

  2. Abra uma nova guia e navegue até GET /System/Resources/Cars Returns all cars > Try it out > Execute.

    Isso enviará uma solicitação ao livro-razão e retornará todos os carros.

    Uma resposta de sucesso deve ser assim:

    [
     {
       "owner": "Tomoko",
       "color": "blue",
       "model": "Prius",
       "make": "Toyota"
     },
     {
       "owner": "Brad",
       "color": "red",
       "model": "Mustang",
       "make": "Ford"
     },
     ...
     {
      "owner": "Tom",
      "color": "White",
      "model": "VW",
      "make": "Golf"
     }
    ]
    
9

Visualizar eventos do Hyperledger Fabric

O diagrama a seguir ilustra como o Open Liberty está escutando eventos do Hyperledger Fabric localmente.

Event listening diagram

  1. O vendedor envia uma transação. O microsserviço Java processa o carro e o adiciona à rede de blockchain.

    O veículo pode ser consultado por qualquer organização, como demonstrado na Etapa 8 das instruções do tutorial.

  2. Quando o comprador ou vendedor envia uma transação ao livro-razão, um evento é emitido do Hyperledger Fabric. A organização 1 não tem a configuração para escutar o referido evento, pois o vendedor não está interessado em ser notificado do evento.

  3. A organização 2 tem a configuração para escutar os eventos, o que faz com que ela receba o evento acionado pela Org1.

  4. Trata-se de uma arquitetura orientada a eventos entre a organização 1 e a organização 2. A organização 2 recebe automaticamente eventos emitidos pelo Hyperledger Fabric e os exibe por meio de um servlet (5).

Enviar uma nova transação

  1. Navegue até o microsserviço Java do vendedor na porta 9080:

    http://localhost:9080/openapi/ui

  2. Navegue até POST /System/Resources/Car Add a car to the ledger.

  3. Preencha o esquema de exemplo com os valores a seguir:

     {
      "make": "Audi",
      "model": "A6",
      "colour": "Black",
      "owner": "David J",
       "key": "CAR21"
     }
    
  4. A Org2 recebe automaticamente os dados do evento porque escuta o evento.

  5. Navegue até o microsserviço Java do comprador na porta 9081:

    http://localhost:9081/openapi/ui

  6. Navegue até GET /System/Resources/TransactionId Returns transactionId data.

  7. Visualize o conteúdo do evento que foi coletado.

    alt

  8. Opcional: preencha o esquema de exemplo com seus próprios carros e veja o evento recente deles.

  9. Navegue até GET /System/Resources/Events Returns events.

    alt

    Cada transação enviada ao Hyperledger Fabric tem um ID da transação exclusivo. Ao selecionar Execute, são retornados os dados do ID da transação exclusivo.

Escutar eventos por meio de uma interface da web

Abra outra guia no navegador da web de sua escolha e experimente a arquitetura orientada a eventos para escutar eventos.

  1. Navegue até:

    http://localhost:9081/org-2-ol-blockchain-events/servlet

    O Servlet na Org2 está escutando automaticamente eventos do Hyperledger Fabric usando um servlet.

    alt

  2. Navegue até Org1 e adicione um carro ao livro-razão: Post /System/Resources/Car Add a car to the ledger.

  3. Clique em Try it out.

  4. Preencha o esquema de exemplo com os valores a seguir, conforme ilustrado na figura acima:

    {
      "make": "Ford",
      "model": "Fiesta",
      "colour": "Blue",
      "owner": "Hannah J",
      "key": "CAR22"
    }
    

    O evento aparece com sucesso na janela do comprador, mostrando a transação mais recente que foi adicionada ao livro-razão. A janela é atualizada a cada cinco segundos que escuta um novo evento. No entanto, o evento pode levar mais alguns segundos para aparecer.

Para testar, adicione mais carros ao livro-razão e visualize os eventos no Hyperledger Fabric.

10. Atualizar o proprietário do carro

O comprador na organização 2 pode decidir que deseja comprar o carro do vendedor.

  1. Navegue até Org2:

    http://localhost:9082/openapi/ui/

Atualize o proprietário de um carro: PUT /System/Resources/Car Update the owner of a car in the ledger.

  1. Clique em Try it out.

  2. Preencha o esquema de exemplo com os valores a seguir:

    {
      "make": "string",
      "model": "string",
      "colour": "string",
      "owner": "Yasmin A",
      "key": "CAR22"
    }
    

11. Consultar um carro específico no livro-razão

Como o blockchain é distribuído, é possível consultar o carro específico de qualquer organização. No entanto, como o comprador concordou em comprar o carro, consulte da Org2:

http://localhost:9082/openapi/ui/

Além de um ID da transação exclusivo, há uma chave exclusiva para cada carro. A diferença entre um ID da transação e a chave é que, sempre que uma transação é feita, inclusive com a mesma chave, o ID da transação muda; a chave, não.

  1. Na interface do usuário da OpenAPI, selecione GET /System/Resources/Car Returns an individual car by key.

  2. Consulte novamente CAR22 para ver o proprietário atualizado.

    Para consultar o carro adicionado recentemente, insira o ID CAR22 e clique em Execute.

    A resposta de sucesso deve ser assim:

    {
      "owner": "Yasmin A",
      "color": "Blue",
      "model": "Fiesta",
      "make": "Ford"
    }
    

12. Interromper os microsserviços Open Liberty

Depois de terminar, para ambas as organizações, acesse VS Code > Liberty Dev Dashboard e pressione Stop. Isso interromperá o servidor do Open Liberty.

Agora, o servidor está desligado e o aplicativo não está mais em execução. Se você tentasse pressionar um dos endpoints, ele não seria encontrado.

13. Interromper a rede de blockchain

Opcional: é possível interromper a rede de blockchain e salvar o estado no livro-razão caso você decida retornar mais tarde. Clique no ícone do IBM Blockchain Platform no lado esquerdo. Em Fabric Environments, clique em > Stop Fabric Environment.

  1. É fácil iniciá-lo novamente clicando em 2 Org Local Fabric.

Para remover as imagens do Docker em que ele está em execução, em Fabric Environments, clique em > Teardown Fabric Environment.

Conclusão

Muito bem. Você criou uma rede de duas organizações, em que diferentes organizações enviam transações ao blockchain (adicionar, atualizar e consultar), além de escutar eventos de um blockchain usando o Hyperledger Java SDK e o Open Liberty.