您的位置:首页 > Web前端 > Node.js

使用Node.JS访问Hyperledger Fabric的gRPC服务

2016-11-26 19:23 696 查看
在即将正式发布的Hyperledger Fabric SDK 1.0中,Hyperledger Fabric通过gRPC提供服务接口以取代现有的REST API。本文介绍了如何使用Node.JS访问Hyperledger Fabric的gRPC服务。

Hyperledger Fabric的gRPC服务接口可以通过安装Hyperledger fabric Client (HFC)获取。

在工作目录下运行如下
npm
命令以安装HFC。

npm install hfc

gRPC接口定义文件(.proto)都在HFC的
lib\protos


api.proto
ca.proto
chaincode.proto
chaincodeevent.proto
devops.proto
events.proto
fabric.proto
server_admin.proto

其中的
api.proto
定义了名为
Openchain
的服务, 该服务提供了若干个接口以获取Hyperledger Fabric区块网络的具体信息。

// Interface exported by the server.
service Openchain {

// GetBlockchainInfo returns information about the blockchain ledger such as
// height, current block hash, and previous block hash.
rpc GetBlockchainInfo(google.protobuf.Empty) returns (BlockchainInfo) {}

// GetBlockByNumber returns the data contained within a specific block in the
// blockchain. The genesis block is block zero.
rpc GetBlockByNumber(BlockNumber) returns (Block) {}

// GetBlockCount returns the current number of blocks in the blockchain data
// structure.
rpc GetBlockCount(google.protobuf.Empty) returns (BlockCount) {}

// GetPeers returns a list of all peer nodes currently connected to the target
// peer.
rpc GetPeers(google.protobuf.Empty) returns (PeersMessage) {}
}

以下代码使用
GetBlockCount
接口获取区块总数。

var fs = require('fs');
var grpc = require('grpc');
var ProtoBuf = require("protobufjs");

var apiProto = grpc.load("./protos/api.proto").protos;

var client = new apiProto.Openchain('192.168.99.100:7051',  grpc.credentials.createInsecure());

client.getBlockCount({}, function(err, blockCount) {
if (err) {
console.log("Error :" + err);
} else if (blockCount) {
console.dir(blockCount, { depth: null });
}
});

GetBlockCount
接口返回一个
BlockCount
消息, 该消息包含一个
count
成员, 也就是当前网络中的区块总数。

message BlockCount {

uint64 count = 1;

}

以下代码则使用
GetBlockByNumber
接口获取某个区块的信息。

function callbackForBlock(blockNumber) {
return function(err, block) {
console.log("Block[" + blockNumber.number + "]");
if (err) {
console.log("Error :" , err);
} else if (block) {
console.dir(block, { depth: null });
}
console.log("=======================");
};
}

for (var n=0; n<blockCount.count; n++) {

var blockNumber = {
number : n
};

client.getBlockByNumber(blockNumber, callbackForBlock(blockNumber));
}

GetBlockByNumber
接口需要一个输入参数, 用于指定区块号码,其返回消息则是一个
Block
消息, 其数据结构定义在
fabric.proto
中。

总结

本文介绍了一个使用Node.JS访问Hyperledger Fabric gRPC服务的示例程序。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: