超级账本HyperLedger:Fabric nodejs SDK的使用(附视频讲解)

自古美人都是妖i 提交于 2021-02-13 07:34:29

作者: 李佶澳   转载请保留:原文地址   发布时间:2018/04/25 11:11:00

说明

这是“网易云课堂IT技术快速入门学院”使用的素材。

操作、配置文件和代码讲解视频在网易云课堂《HyperLeger Fabric进阶实战课》第五章中。

当前(2018-04-25 11:16:23)fabric的SDK只有java和node是正式的,他倆的文档也是最丰富的。当前支持的node版本是v8.9.0~v9.0,v9.0以上版本不支持(2018-07-15 14:11:01)。

Hyperledger Fabric SDK for node.js

准备合适的node版本

当前支持的node版本是v8.9.0~v9.0,v9.0以上版本不支持(2018-07-15 14:11:01)。

在mac上可以用brew安装node8:

$ brew install node@8
$ echo 'export PATH="/usr/local/opt/node@8/bin:$PATH"' >> ~/.bash_profile
$ source ~/.bash_profile
$ node --version
v8.11.3

或者直接下载安装:nodejs download

用npm管理依赖包

创建文件package.json:

$ cat package.json
{
    "dependencies": {
        "fabric-ca-client": "1.1.2",
        "fabric-client": "1.1.2",
        "grpc": "^1.6.0"
    },
    "author": "Anthony O'Dowd",
    "license": "Apache-2.0",
    "keywords": [
        "Hyperledger",
        "Fabric",
        "Car",
        "Sample",
        "Application"
    ]
}

用npm安装依赖包:

npm config set registry https://registry.npm.taobao.org  (设置淘宝提供的镜像源)
npm install

Example

调用mychannel中的mycc合约的query接口,参数为key:

node ./01-query-chaincode.js

代码如下:

/*
 * client.js
 * Copyright (C) 2018 lijiaocn <lijiaocn@foxmail.com>
 *
 * Distributed under terms of the GPL license.
 */

var fs = require('fs');
var Fabric_Client = require('fabric-client');

//创建一个Client
Fabric_Client.newDefaultKeyValueStore({ path: '/tmp/xx/' }).then((state_store) => {
    client=new Fabric_Client();
    client.setStateStore(state_store)

    //设置用户信息    
    var userOpt = {
        username: 'Admin@member1.example.com',
        mspid: 'peers.member1.example.com',
        cryptoContent: { 
            privateKey: './msp/keystore/09dd09cf530d8f0fa6cb383b5b409ae8e895d32d31f75823f3bdb3c1f3ee180a_sk',
            signedCert: './msp/signcerts/Admin@member1.example.com-cert.pem'
        }
    }

    return client.createUser(userOpt)

}).then((user)=>{

    //设置要连接的Channel
    var channel = client.newChannel('mychannel');

    //设置要连接的Peer
    var peer = client.newPeer(
        'grpcs://peer0.member1.example.com:7051',
        {
            pem: fs.readFileSync('./tls/ca.crt', { encoding: 'utf8' }),
            clientKey: fs.readFileSync('./tls/client.key', { encoding: 'utf8' }),
            clientCert: fs.readFileSync('./tls/client.crt', { encoding: 'utf8' }),
            'ssl-target-name-override': 'peer0.member1.example.com'
        }
    );

    channel.addPeer(peer);

    //调用chaincode
    const request = {
        chaincodeId: 'mycc',   //chaincode名称
        fcn: 'query',          //调用的函数名
        args: ['key1']         //参数
    };

    // send the query proposal to the peer
    return channel.queryByChaincode(request);

}).then((response)=>{
    console.log('Response is', response.toString());
})

Hyperledger Fabric SDK for node.js中有每个类说明,上面示例的源代码托管在Github上: hyperledger-fabric-sdks-usage

HyperLedger官方源代码中还有更多的例子:fabric node sdk example

使用过程遇到的问题记录在: 《超级账本HyperLedger:Fabric的Node.js SDK使用时遇到的问题》

更多关于超级账本和区块链的文章

参考

  1. Hyperledger Fabric SDK for node.js
  2. Setting up the Application Developer’s Environment
  3. fabric node sdk example
  4. Operation initiated from the Hyperledger Fabric Client SDK for Node.js results in TSI error
  5. 使用Fabric Node SDK进行Invoke和Query
  6. nodejs download
  7. 《超级账本HyperLedger:Fabric的Node.js SDK使用时遇到的问题》
  8. hyperledger-fabric-sdks-usage

限时活动,每邀请一人即返回25元!

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!