在即将正式发布的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服务的更多相关文章

  1. Node.js是一个事件驱动I/O服务端JavaScript环境

    Node.js是一个事件驱动I/O服务端JavaScript环境,基于Google的V8引擎.目的是为了提供撰写可扩充网络程序,如Web服务.第一个版本由Ryan Dahl于2009年发布,后来,Jo ...

  2. Node.js SDK与fabric链码交互开发

    1.本篇背景 前面已经对链码开发作了比较详细的介绍,并且对官方提供的 fabcar 链码进行了解读,本篇将介绍如何使用 Node.js SDK 与区块链网络中的链码进行交互. 本篇内容基本来自官方 H ...

  3. 2.MongoDB 基于node.js访问和操作集合

    对于频繁使用的Node.js来说,常见的任务是集合的动态操控. 较大的安装给每个大客户一个单独的集合,以便客户登入或离开时.根据需要添加或删除集合. MongoDB Node.js 驱动程序 Db和C ...

  4. node.js 访问sql server的 node_modules “msnodesql"的安装编译方法

    http://stackoverflow.com/questions/19661811/unable-to-download-msnodesql-0-2-1-v0-10-x64-msi 首先要满足以下 ...

  5. Node.js中实现套接字服务

    后端服务的一个重要的部分是通过套接字进行通信的能力. 套接字允许一个进程通过一个IP地址和端口与另一个进程通信 同一个服务器上的两个不同进程的进程间通信(IPC)或者访问一个完全不同 的服务器上运行的 ...

  6. Node.js Koa2开发微信小程序服务端

    1.promise.async.await const Koa = require('koa') const app = new Koa() // 应用程序对象 有很多中间件 // 发送HTTP KO ...

  7. Node.js 使用 soap 模块请求 WebService 服务接口

    项目开发中需要请求webservice服务,前端主要使用node.js 作为运行环境,因此可以使用soap进行请求. 使用SOAP请求webservice服务的流程如下: 1.进入项目目录,安装 so ...

  8. 前端使用node.js+express+mockjs+mysql实现简单服务端,2种方式模拟数据返回

    今天,我教大家来搭建一个简单服务端 参考文章: https://www.jianshu.com/p/cb89d9ac635e https://www.cnblogs.com/jj-notes/p/66 ...

  9. Node.js 使用jQuery取得Nodejs http服务端返回的JSON数组示例

    server.js代码: // 内置http模块,提供了http服务器和客户端功能(path模块也是内置模块,而mime是附加模块) var http=require("http" ...

随机推荐

  1. html2canvas插件对整个网页或者网页某一部分截图并保存为图片

    html2canvas能够实现在用户浏览器端直接对整个或部分页面进行截屏.这个脚本将当前页面渲染成一个canvas图片,通过读取DOM并将不同的样式应用到这些元素上实现.它不需要来自服务器任何渲染,整 ...

  2. 算法:x的n次方

    该题是用来公司教学,并无难度.用于说明算法效率差异以及循环和递归的效率差别. package practice; import java.math.BigDecimal; /** * @author ...

  3. 人人都是 DBA(XV)锁信息收集脚本汇编

    什么?有个 SQL 执行了 8 秒! 哪里出了问题?臣妾不知道啊,得找 DBA 啊. DBA 人呢?离职了!!擦!!! 程序员在无处寻求帮助时,就得想办法自救,努力让自己变成 "伪 DBA& ...

  4. 嗅探、中间人sql注入、反编译--例说桌面软件安全性问题

    嗅探.中间人sql注入.反编译--例说桌面软件安全性问题 今天这篇文章不准备讲太多理论,讲我最近遇到的一个案例.从技术上讲,这个例子没什么高深的,还有一点狗屎运的成分,但是它又足够典型,典型到我可以讲 ...

  5. HTML5+flash打造兼容各浏览器的文件上传方案

    上一篇文章介绍了HTML5版的文件上传插件,相比flash,采用HTML5的新技术无疑可以提升程序的加载速度.但是在目前的情况看来,HTML5的特性支持度不高,插件的可用性范围确实比较窄.例如,我在插 ...

  6. Sublime Text 2—解决中文乱码

    Sublime Text 2是一个非常棒的代码及文本编辑器,绿色小巧.速度飞快,跨平台支持Win/Mac/Linux,支持32与64位,支持各种流行编程语言的语法高亮.代码补全等,有着许多其他编辑器没 ...

  7. ubuntu 13.04下MYSQL 5.5环境搭建

    解决的问题: 安装mysql server和mysql client 5.5 新建远程账户 远程访问权限 MYSQL默认字符集修改为UTF8 检查防火墙 一.安装 BTW:可以使用查找命令查看安装包 ...

  8. .NET Framework中重点类型的继承关系

    继承关系 Object ├─Array │ └─T[] ├─ArrayList ├─List<T> └─String 集合类型的接口 下图展示了集合类型的各种接口的相互关系.注意,下图中所 ...

  9. 据说每个大牛、小牛都应该有自己的库——Ajax

    蹉跎到今天终于要写Ajax部分了,平时工作中除了选择器我用jQuery的最多的就是ajax,所以这部分在自己的框架中必不可少. XMLHttpRequest 我以为对每个使用过Ajax的人来说XMLH ...

  10. Git学习笔记(2)——版本的回退,和暂存区的理解

    本文主要记录了版本的回退,以及工作区,暂存区概念的理解. //开始之前,先回顾上次的内容,修改文件如下,并提交到版本库. Git is a distributed version control sy ...