使用Node.JS访问Hyperledger Fabric的gRPC服务
在即将正式发布的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服务的示例程序。
使用Node.JS访问Hyperledger Fabric的gRPC服务的更多相关文章
- Node.js是一个事件驱动I/O服务端JavaScript环境
Node.js是一个事件驱动I/O服务端JavaScript环境,基于Google的V8引擎.目的是为了提供撰写可扩充网络程序,如Web服务.第一个版本由Ryan Dahl于2009年发布,后来,Jo ...
- Node.js SDK与fabric链码交互开发
1.本篇背景 前面已经对链码开发作了比较详细的介绍,并且对官方提供的 fabcar 链码进行了解读,本篇将介绍如何使用 Node.js SDK 与区块链网络中的链码进行交互. 本篇内容基本来自官方 H ...
- 2.MongoDB 基于node.js访问和操作集合
对于频繁使用的Node.js来说,常见的任务是集合的动态操控. 较大的安装给每个大客户一个单独的集合,以便客户登入或离开时.根据需要添加或删除集合. MongoDB Node.js 驱动程序 Db和C ...
- node.js 访问sql server的 node_modules “msnodesql"的安装编译方法
http://stackoverflow.com/questions/19661811/unable-to-download-msnodesql-0-2-1-v0-10-x64-msi 首先要满足以下 ...
- Node.js中实现套接字服务
后端服务的一个重要的部分是通过套接字进行通信的能力. 套接字允许一个进程通过一个IP地址和端口与另一个进程通信 同一个服务器上的两个不同进程的进程间通信(IPC)或者访问一个完全不同 的服务器上运行的 ...
- Node.js Koa2开发微信小程序服务端
1.promise.async.await const Koa = require('koa') const app = new Koa() // 应用程序对象 有很多中间件 // 发送HTTP KO ...
- Node.js 使用 soap 模块请求 WebService 服务接口
项目开发中需要请求webservice服务,前端主要使用node.js 作为运行环境,因此可以使用soap进行请求. 使用SOAP请求webservice服务的流程如下: 1.进入项目目录,安装 so ...
- 前端使用node.js+express+mockjs+mysql实现简单服务端,2种方式模拟数据返回
今天,我教大家来搭建一个简单服务端 参考文章: https://www.jianshu.com/p/cb89d9ac635e https://www.cnblogs.com/jj-notes/p/66 ...
- Node.js 使用jQuery取得Nodejs http服务端返回的JSON数组示例
server.js代码: // 内置http模块,提供了http服务器和客户端功能(path模块也是内置模块,而mime是附加模块) var http=require("http" ...
随机推荐
- 解剖SQLSERVER 第十三篇 Integers在行压缩和页压缩里的存储格式揭秘(译)
解剖SQLSERVER 第十三篇 Integers在行压缩和页压缩里的存储格式揭秘(译) http://improve.dk/the-anatomy-of-row-amp-page-compre ...
- Rubinius 2.0 发布,Ruby 虚拟机
Rubinius 2.0 发布了,官方发行说明请看这里. Rubinius是一个运行Ruby程序的虚拟机,其带有Ruby的核心库. Rubinius的设计决定了其调试功能的强大,使得在运行时常规的Ru ...
- 如何查看Android的Keystore文件的SHA1值
像使用百度地图api时候,一般需要获取keystore的SHA1值,这里就手把手教大家如何查看Android的keystore文件中的SHA1值. 第一步: 打开cmd,切换到keystore所在的文 ...
- 你写的return null正确吗?
上次一篇“你写的try…catch真的有必要吗”引起了很多朋友的讨论.本次我在code review又发现了一个问题,那就是有人有意无意的写出了return null这样的代码,例如: public ...
- 海量用户-高并发SAAS产品测试上线流程
海量用户高并发SAAS产品测试上线流程 SAAS产品测试上线流程-以Web插件产品为例子 1 概述 在互联网产品中,IT公司之间更加注重产品功能之间的协作,SAAS形态的产品扮演着越来越重要的作用 ...
- Web前端技术研究:Css hack技术---令人沮丧的技术
我最近想好好整理下csshack技术,但是结果很沮丧,下面我将我最初写的笔记和大家分享下. 我在单位整理的研究笔记: 不同的浏览器对某些CSS代码解析会存在一定的差异,因此就会导致不同浏览器下给用户展 ...
- windows 8.1 试用感受:蛋疼感大幅降低
众所周知windows 8 的最大使用感受就是蛋疼. 无论是微软MVP,还是我这样的万年不悔微软小白鼠,普通用户,小白用户,或多或少的都对这款操作系统感到蛋疼. 槽点太多,以至于大家都懒得批判了.好在 ...
- [源码]NumberToUpper 数字转中文
使用时需开启unsafe选项 构造函数有4个参数 number : 数字文本 isSimplified : 是否只使用简体中文,默认:false isMoney : 是否是金额模式(忽略小数点后3位, ...
- Senparc.Weixin.MP SDK 微信公众平台开发教程(十四):请求消息去重
为了确保信息请求消息的到达率,微信服务器在没有及时收到响应消息(ResponseMessage)的情况下,会多次发送同一条请求消息(RequestMessage),包括MsgId等在内的所有文本内容都 ...
- springmvc下实现登录验证码功能
总体思路,简单讲,就是后台生成图片同时将图片信息保存在session,前端显示图片,输入验证码信息后提交表单到后台,取出存放在session里的验证码信息,与表单提交的验证码信息核对. 点击验证码图片 ...