quarta-feira, 17 de maio de 2017

Blockchain chaincode para desenvolvedores Java – parte 01c

Por Steve Perry em 08/05/2017 no site iMasters.

4. Invoque uma transação no exemplo

Finalmente, você irá invocar o método hello e vê-lo aparecer nas mensagens de log da janela do terminal executando o seu chaincode.
Sob o recurso chaincode em SoapUI, clique com o botão direito do mouse no Method 1 e escolha Clone Method. Chame o método Invoke e clique em OK. Abra Request 1 no seu novo método Invoke e cole nesta solicitação JSON:
1{
2"jsonrpc": "2.0",
3  "method": "invoke",
4  "params": {
5    "type": 1,
6    "chaincodeID":{
7        "name": "hello"
8    },
9    "CtorMsg": {
10        "args": ["hello"]
11    }
12  },
13  "id": 2
14}
Quando você executar a solicitação, você deve ver esta resposta JSON:
1{
2   "jsonrpc": "2.0",
3   "result":    {
4      "status": "OK",
5      "message": "1c1811d0-a958-4c58-ab1d-e1df550c18a3"
6   },
7   "id": 2
8}
A Figura 7 mostra uma imagem da tela de como isso se apresenta em SoapUI.


Figura 7. SoapUI – Solicitação de invocação do Chaincode

O resultado do log de rede deve incluir linhas que devem se apresentar assim:
1.
2.
3vp0_1         | 21:44:35.143 [rest] ProcessChaincode -> INFO 555 REST processing chaincode request...
4vp0_1         | 21:44:35.143 [rest] processChaincodeInvokeOrQuery -> INFO 556 REST invoke chaincode...
5vp0_1         | 21:44:35.143 [devops] invokeOrQuery -> INFO 557 Transaction ID: 1c1811d0-a958-4c58-ab1d-e1df550c18a3
6vp0_1         | 21:44:35.143 [devops] createExecTx -> DEBU 558 Creating invocation transaction (1c1811d0-a958-4c58-ab1d-e1df550c18a3)
7vp0_1         | 21:44:35.143 [devops] invokeOrQuery -> DEBU 559 Sending invocation transaction (1c1811d0-a958-4c58-ab1d-e1df550c18a3) to validator
8vp0_1         | 21:44:35.143 [peer] sendTransactionsToLocalEngine -> DEBU 55a Marshalling transaction CHAINCODE_INVOKE to send to local engine
9vp0_1         | 21:44:35.143 [peer] sendTransactionsToLocalEngine -> DEBU 55b Sending message CHAIN_TRANSACTION with timestamp seconds:1487799875 nanos:143438691  to local engine
10vp0_1         | 21:44:35.143 [consensus/noops] RecvMsg -> DEBU 55c Handling Message of type: CHAIN_TRANSACTION
11vp0_1         | 21:44:35.143 [consensus/noops] broadcastConsensusMsg -> DEBU 55d Broadcasting CONSENSUS
12vp0_1         | 21:44:35.143 [peer] Broadcast -> DEBU 55e Broadcast took 1.249s
13vp0_1         | 21:44:35.143 [consensus/noops] RecvMsg -> DEBU 55f Sending to channel tx uuid: 1c1811d0-a958-4c58-ab1d-e1df550c18a3
14vp0_1         | 21:44:35.143 [rest] processChaincodeInvokeOrQuery -> INFO 560 Successfully submitted invoke transaction with txid (1c1811d0-a958-4c58-ab1d-e1df550c18a3)
15vp0_1         | 21:44:35.143 [rest] ProcessChaincode -> INFO 561 REST successfully submitted invoke transaction: {"jsonrpc":"2.0","result":{"status":"OK","message":"1c1811d0-a958-4c58-ab1d-e1df550c18a3"},"id":2}
16.
17.
E o resultado do log do chaincode assim:
1$ ./build/distributions/Example/bin/Example
2Hello world! starting [Ljava.lang.String;@7ef20235
3Feb 22, 2017 3:26:57 PM example.Example main
4INFO: starting
5Feb 22, 2017 3:26:57 PM org.hyperledger.java.shim.ChaincodeBase newPeerClientConnection
6INFO: Inside newPeerCLientConnection
7Feb 22, 2017 3:26:57 PM io.grpc.internal.TransportSet$1 call
8INFO: Created transport io.grpc.netty.NettyClientTransport@765e4953(/127.0.0.1:7051) for /127.0.0.1:7051
9Feb 22, 2017 3:27:02 PM io.grpc.internal.TransportSet$TransportListener transportReady
10INFO: Transport io.grpc.netty.NettyClientTransport@765e4953(/127.0.0.1:7051) for /127.0.0.1:7051 is ready
11Feb 22, 2017 3:27:24 PM example.Example run
12INFO: In run, function:
13Feb 22, 2017 3:27:24 PM example.Example run
14SEVERE: No matching case for function:
15Feb 22, 2017 3:30:55 PM example.Example run
16INFO: In run, function:hello
17hello invoked
Mais uma vez, mostrei todo o resultado do chaincode. Você pode ver onde a função hello foi invocada (linha 16).
Agora você já viu como construir, implantar e executar o chaincode Java em sua rede local blockchain. Na próxima parte deste artigo, você escreverá um programa chaincode (quase) a partir do zero usando o Eclipse IDE, criará o programa chaincode usando o Gradle e o exercitará isto usando SoapUI.
***
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

Nenhum comentário:

Postar um comentário