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:
- Registre seu chaincode Java.
- Implante seu chaincode Java.
- 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