在即将正式发布的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. 千呼万唤始出来!—— GG(高仿QQ)终于有移动端了!(技术原理、实现、源码)

    首先要感谢大家一直以来对于GG的关注和支持!GG的不断完善与大家的支持分不开! 从2013年最初的GG1.0,到后来陆续增加了网盘功能.远程协助功能.离线文件功能.群聊功能.语音聊天功能.视频聊天功能 ...

  2. 作业三:PSP记录耗时情况

    PSP2.1 Personal Software Process Stage Time planning 计划 15min Estimate 估计这个任务多久完成 130min Developing ...

  3. 【读书笔记】.Net并行编程(三)---并行集合

    为了让共享的数组,集合能够被多线程更新,我们现在(.net4.0之后)可以使用并发集合来实现这个功能.而System.Collections和System.Collections.Generic命名空 ...

  4. java输出任意两个日期之间有多少天

    package JingDian; import java.text.ParseException; import java.text.SimpleDateFormat; import java.ut ...

  5. 在js中对时间类型格式化字符串

    Date.prototype.toString = function (format) { if (format == null) { format = "yyyy-MM-dd HH:mm: ...

  6. Springlake-01 介绍&功能&安装

    1. 简介与功能 1)Springlake 是一个企业内容平台SECP 2)是一个可配置的系统,80%内容可以配置 3)允许建立和配置垂直解决方案 4)敏捷和占用空间小,可伸缩 5)端到端的安全性与性 ...

  7. PHP-CS-Fixer:格式化你的PHP代码

    简介 良好的代码规范可以提高代码可读性,团队沟通维护成本.最推荐大家遵守的是 php-fig(PHP Framework Interop Group) 组织定义的 PSR-1 . PSR-2 两个.不 ...

  8. iOS中app启动闪退的原因

    这种情况应和所谓的内存不足关系不大,很少有程序会在初始化时载入大量内容导致崩溃,并且这类问题也很容易在开发阶段被发现,所以内存不足造成秒退的可能性低(内存不足退,通常是程序用了一段时间,切换了几个画面 ...

  9. 【WPF】制作自定义的列表项面板

    我们在使用像ListBox的列表控件时,我们都知道可以通过其ItemsPanel的依赖项属性来自定义一个面板来放置列表控件中的列表项.除了CLR库提供的几个面板外,我们完全可以把自己写的面板作为项列表 ...

  10. 【Discuz】云平台服务:出了点小错,由于站点ID/通信KEY等关键信息丢失导致Discuz!云平台服务出现异常

    提示信息 出了点小错,由于站点ID/通信KEY等关键信息丢失导致Discuz!云平台服务出现异常 版本X3.2.20160601 解决方案 Step1.修改云平台开通状态为未开通状态 Step2.访问 ...