完成构建后,$GOPATH/ChaincodeTutorial 目录(您之前已从 GitHub 将代码克隆到这里)下有一个子目录 build/distributions,它包含您的链代码(这应该看起来很熟悉,因为本教程前面的 hello 示例中已经这么做过)。
构建 Java 链代码后,就可以在本地区块链网络中部署和运行它,并在它之上调用交易。
部署并运行 Java 链代码在本节中,将会启动并注册您的链代码,部署它,并通过 Hyperledger Fabric REST 接口在链代码之上调用交易,就像本教程前面对 hello 示例所做的一样。确保本地区块链正在运行(如想温习一下相关内容,请参阅 “启动区块链网络” 部分)。
您将执行以下步骤:
注册 Java 链代码。
部署 Java 链代码。
在 Java 链代码上调用交易。
1.注册 Java 链代码您需要提取 build/distributions/ChaincodeTutorial.zip 文件并运行链代码脚本,就像本教程前面运行 hello 示例时一样(参见 “注册示例” 部分)。
运行 ChaincodeTutorial 脚本时,输出应如下所示:
$ ./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现在您的 Java 链代码已向本地区块链网络注册,您已准备好部署和测试链代码了。
2.部署 Java 链代码就像对 hello 示例链代码执行的操作一样,将会使用该结构的 REST 接口部署 Java 链代码,并在它之上调用交易。
打开 SoapUI。如果愿意的话,可以自行创建一个新 REST 项目和它的所有请求,或者可以导入我包含在之前克隆的 GitHub 项目中的 SoapUI REST 项目。该 SoapUI 项目位于 $GOPATH/ChaincodeTutorial 目录中。
要部署链代码,可以导航到 ChaincodeLog Deploy 请求(如图 15 所示)并提交该请求。
如果没有使用来自 GitHub 的 SoapUI 项目(或者使用不同的 HTTP 客户端),那么应该提交的 JSON 请求如下所示:
{ "jsonrpc": "2.0", "method": "deploy", "params": { "type": 4, "chaincodeID":{ "name": "ChaincodeLogSmartContract" }, "ctorMsg": { "args": ["init", "KEY-1", "Chaincode Initialized"] } }, "id": 1 }提交请求。如果请求被成功处理,您会获得以下 JSON 响应:
{ "jsonrpc": "2.0", "result": { "status": "OK", "message": "ChaincodeLogSmartContract" }, "id": 1 }现在您的链代码已部署并准备好运行。
3.在 Java 链代码上调用交易部署并初始化 Java 链代码后,就可以在它之上调用交易了。在本节中,将会调用 log 和 query 函数作为交易。
要调用 log 函数,可以打开 ChaincodeLog Log 请求并提交它。(参见图 16。)
如果没有使用来自 GitHub 的 SoapUI 项目(或者使用不同的 HTTP 客户端),那么应该提交的 JSON 请求如下所示:
{ "jsonrpc": "2.0", "method": "invoke", "params": { "type": 1, "chaincodeID":{ "name": "ChaincodeLogSmartContract" }, "CtorMsg": { "args": ["log", "KEY-2", "This is a log message."] } }, "id": 2 }如果请求被成功处理,您会获得以下 JSON 响应:
{ "jsonrpc": "2.0", "result": { "status": "OK", "message": "a6f7a4fc-2980-4d95-9ec2-114dd9d0e4a5" }, "id": 2 }要调用 query 函数,可以打开 ChaincodeLog Query 请求并提交它。(参见图 17。)
如果没有使用来自 GitHub 的 SoapUI 项目(或者使用不同的 HTTP 客户端),那么应该提交的 JSON 请求如下所示:
{ "jsonrpc": "2.0", "method": "invoke", "params": { "type": 1, "chaincodeID":{ "name": "ChaincodeLogSmartContract" }, "ctorMsg": { "args": ["query", "KEY-1", "KEY-2"] } }, "id": 3 }如果请求被成功处理,您会获得以下 JSON 响应:
{ "jsonrpc": "2.0", "result": { "status": "OK", "message": "84cbe0e2-a83e-4edf-9ce9-71ae7289d390" }, "id": 3 }