Back-End

16 mai, 2017

Blockchain chaincode para desenvolvedores Java – parte 03

Publicidade

Continuando o que vimos na parte 01 e na parte 02 desta série, nesta seção, você iniciará e registrará seu chaincode, fará o deploy e invocará transações nele através da interface REST do Hyperledger Fabric, como fez anteriormente no tutorial com o exemplo hello. Certifique-se de que o seu blockchain local está em execução.

Implante e execute o seu chaincode Java

Aqui estão os passos que você irá seguir:

  1. Registre seu chaincode Java.
  2. Implante seu chaincode Java.
  3. Invoque transações no seu chaincode Java.

1. Registre seu chaincode Java

Você precisará extrair o arquivo build/distributions/ChaincodeTutorial.zip e executar o script chaincode, exatamente como fez anteriormente neste tutorial ao executar o exemplo hello.

Quando você executa o script ChaincodeTutorial, o resultado deve ser algo como isto:

$ ./ChaincodeTutorial/bin/ChaincodeTutorial
Feb 28, 2017 4:18:16 PM org.hyperledger.java.shim.ChaincodeBase newPeerClientConnection
INFO: Inside newPeerCLientConnection
Feb 28, 2017 4:18:16 PM io.grpc.internal.TransportSet$1 call
INFO: Created transport io.grpc.netty.NettyClientTransport@10bf86d3(/127.0.0.1:7051) for /127.0.0.1:7051
Feb 28, 2017 4:18:21 PM io.grpc.internal.TransportSet$TransportListener transportReady
INFO: Transport io.grpc.netty.NettyClientTransport@10bf86d3(/127.0.0.1:7051) for /127.0.0.1:7051 is ready

Agora o seu chaincode Java está registrado com sua rede local blockchain e você está pronto para implantar e testar seu chaincode.

2. Implante seu chaincode Java

Como você fez com o chaincode de exemplo hello, você usará a interface REST do fabric para implantar e invocar transações em seu chaincode Java.

Abra SoapUI. Se você estiver confortável em fazê-lo, pode criar um novo projeto REST e todas as suas solicitações você mesmo, ou pode importar o projeto SoapUI REST que incluí no projeto GitHub que você clonou anteriormente. O projeto SoapUI está localizado no diretório $GOPATH/ChaincodeTutorial.

Para implantar o seu chaincode, navegue até a solicitação ChaincodeLog Deploy e envie a solicitação.

Se você não estiver usando o projeto SoapUI do GitHub (ou estiver usando um cliente HTTP diferente), a solicitação JSON que você deve enviar deve se parecer com isso:

{
"jsonrpc": "2.0",
  "method": "deploy",
  "params": {
    "type": 4,
    "chaincodeID":{
        "name": "ChaincodeLogSmartContract"
    },
    "ctorMsg": {
        "args": ["init", "KEY-1", "Chaincode Initialized"]
    }
  },
  "id": 1
}

Envie a solicitação. Se tiver êxito, você deve obter uma resposta JSON como esta:

{
   "jsonrpc": "2.0",
   "result":    {
      "status": "OK",
      "message": "ChaincodeLogSmartContract"
   },
   "id": 1
}

Agora, seu chaincode está implantado e pronto para ser executado.

3. Invoque transações no seu chaincode Java

Agora que seu chaincode Java está implantado e inicializado, você pode invocar transações nele. Nesta seção, você invocará as funções log e query como transações.

Para invocar a função log, abra a solicitação ChaincodeLog Log e envie a solicitação.

Se você não estiver usando o projeto SoapUI do GitHub (ou estiver usando um cliente HTTP diferente), a solicitação JSON que você deve enviar deve se parecer com isto:

{
"jsonrpc": "2.0",
  "method": "invoke",
  "params": {
    "type": 1,
    "chaincodeID":{
        "name": "ChaincodeLogSmartContract"
    },
    "CtorMsg": {
        "args": ["log", "KEY-2", "This is a log message."]
    }
  },
  "id": 2
}

Se a solicitação foi bem-sucedida, você deve obter uma resposta JSON como esta:

{
   "jsonrpc": "2.0",
   "result":    {
      "status": "OK",
      "message": "a6f7a4fc-2980-4d95-9ec2-114dd9d0e4a5"
   },
   "id": 2
}

Para invocar a função query, abra a solicitação ChaincodeLog Query e envie a solicitação.

Se você não estiver usando o projeto SoapUI do GitHub (ou estiver usando um cliente HTTP diferente), a solicitação JSON que você deve enviar deve se parecer com isto:

{
"jsonrpc": "2.0",
  "method": "invoke",
  "params": {
    "type": 1,
    "chaincodeID":{
        "name": "ChaincodeLogSmartContract"
    },
    "ctorMsg": {
        "args": ["query", "KEY-1", "KEY-2"]
    }
  },
  "id": 3
}

Se a solicitação for bem-sucedida, você deve obter uma resposta JSON como esta:

{
   "jsonrpc": "2.0",
   "result":    {
      "status": "OK",
      "message": "84cbe0e2-a83e-4edf-9ce9-71ae7289d390"
   },
   "id": 3
}

O resultado da janela de terminal do código de solução tem esta aparência:

$ ./ChaincodeTutorial/bin/ChaincodeTutorial
Feb 28, 2017 4:18:16 PM org.hyperledger.java.shim.ChaincodeBase newPeerClientConnection
INFO: Inside newPeerCLientConnection
Feb 28, 2017 4:18:16 PM io.grpc.internal.TransportSet$1 call
INFO: Created transport io.grpc.netty.NettyClientTransport@10bf86d3(/127.0.0.1:7051) for /127.0.0.1:7051
Feb 28, 2017 4:18:21 PM io.grpc.internal.TransportSet$TransportListener transportReady
INFO: Transport io.grpc.netty.NettyClientTransport@10bf86d3(/127.0.0.1:7051) for /127.0.0.1:7051 is ready
Feb 28, 2017 4:34:52 PM com.makotojava.learn.blockchain.chaincode.AbstractChaincode run
INFO: Greetings from run(): function -> init | args -> [KEY-1, Chaincode Initialized]
Feb 28, 2017 4:34:52 PM com.makotojava.learn.blockchain.chaincode.solution.ChaincodeLog handleLog
INFO: *** Storing log message (K,V) -> (ChaincodeLogSmartContract-CLSC-KEY-1,Chaincode Initialized) ***
Feb 28, 2017 4:50:27 PM com.makotojava.learn.blockchain.chaincode.AbstractChaincode run
INFO: Greetings from run(): function -> log | args -> [KEY-2, This is a log message.]
Feb 28, 2017 4:50:27 PM com.makotojava.learn.blockchain.chaincode.solution.ChaincodeLog handleLog
INFO: *** Storing log message (K,V) -> (ChaincodeLogSmartContract-CLSC-KEY-2,This is a log message.) ***
Feb 28, 2017 5:02:13 PM com.makotojava.learn.blockchain.chaincode.AbstractChaincode run
INFO: Greetings from run(): function -> query | args -> [KEY-1, KEY-2]
Feb 28, 2017 5:02:13 PM com.makotojava.learn.blockchain.chaincode.solution.ChaincodeLog handleQuery
INFO: *** Query: For key 'ChaincodeLogSmartContract-CLSC-KEY-1, value is 'Chaincode Initialized' ***
Feb 28, 2017 5:02:13 PM com.makotojava.learn.blockchain.chaincode.solution.ChaincodeLog handleQuery
INFO: *** Query: For key 'ChaincodeLogSmartContract-CLSC-KEY-2, value is 'This is a log message.' ***

Parabéns! Você acabou de dar o primeiro passo para o seu futuro.

Eu o incentivo a brincar com o projeto ChaincodeTutorial, adicionar métodos a ele, alterar as implementações, e assim por diante. Fique confortável com a escrita chaincode. Boa sorte e divirta-se!

Conclusão

Este tutorial deu-lhe uma breve visão geral da tecnologia blockchain e do contrato inteligente, que é implementado como um programa chaincode e o panorama tecnológico atual em relação blockchain.

Passamos pelas etapas para configurar seu ambiente de desenvolvimento de chaincode Java, incluindo o software que você precisa instalar, como definir e executar sua rede local de blockchain e como implantar e invocar transações contra um dos exemplos de programas de chaincode Java do projeto Hyperledger Fabric no GitHub.

Você aprendeu a usar o Eclipse, o JUnit e o Gradle para escrever e construir seu primeiro programa chaincode Java e, em seguida, implantar e invocar transações em contraste com seu programa chaincode Java.

Você deu uma olhada prática na tecnologia blockchain e contratos inteligentes e estão perfeitamente posicionados para escrever chaincode Java mais complexo à medida em que a tecnologia blockchain amadurece e prolifera no mercado.

Quer rever tudo? Leia novamente a primeira e a segunda parte deste tutorial.

E agora, para onde você vai, a partir daqui?

***

Steve Perry faz parte do time de colunistas internacionais do iMasters. A tradução do artigo é feita pela Redação iMasters, com autorização do autor, e você pode acompanhar o artigo em inglês no link: https://www.ibm.com/developerworks/library/j-chaincode-for-java-developers/index.html