zoukankan      html  css  js  c++  java
  • 使用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的libprotos

        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服务的示例程序。

  • 相关阅读:
    Oracle存储过程(Stored Procedure)使用自定义类实体参数
    RTF格式富文本图片文本导出到Excel
    将EXCEL表格文字图片信息转成RTF格式写入数据库BLOB字段
    C# 阿拉伯数字转换为中文数字/中文数字转换为阿拉伯数字
    JavaScript操作select下拉框
    JavaScript操作浏览器一直往下滚动
    Microsoft Office 2003 Web Components 自动计数/自动求和
    SQLite递归
    WPF获取验证码倒计时
    System.UnauthorizedAccessException: 对路径“***”的访问被拒绝。
  • 原文地址:https://www.cnblogs.com/huyouhengbc/p/6104993.html
Copyright © 2011-2022 走看看