• 使用 Hyperledger Fabric SDK Node 进行测试
    • 主要依赖
    • 下载 Demo 工程
    • 构建Demo
    • 启动Fabric网络
      • 本地资源构建网络
      • 官方资源构建网络
      • 资源清单
    • 运行Demo
    • 持续更新

    使用 Hyperledger Fabric SDK Node 进行测试

    Hyperledger Fabric Client SDK 能够非常简单的使用API和 Hyperledger Fabric Blockchain 网络进行交互。其v1.1及其以上的版本添加了一个重要的功能Conection-Profile来保存整个network中必要的配置信息,方便client读取和配置。该Demo基于Connection-Profile测试了整个网络的如下功能:

    • Fabric CA 相关
      • Enroll用户
      • Register用户
    • Channel 相关
      • 创建Channel
      • 将指定Peer join Channel
      • 查询Channel相关信息
      • 动态更新Channel配置信息
    • Chaincode 相关
      • Install Chaincode
      • Instantiate Chaincode
      • Invoke Chaincode
      • Query Chaincode
      • 查询Chaincode相关信息

    主要依赖

    • Node v8.9.0 或更高 (注意目前v9.0+还不支持)
    • npm v5.5.1 或更高
    • gulp命令。 必须要进行全局安装 npm install -g gulp
    • docker运行环境
    • docker compose工具

    主要fabric环境可参考Fabric 1.0。

    下载 Demo 工程

    1. $ git clone https://github.com/Sunnykaby/Hyperledger-fabric-node-sdk-demo

    进入 Hyperledger-fabric-node-sdk-demo 目录,查看各文件夹和文件,功能如下。

    文件/文件夹 功能
    artifacts-local 本地准备好构建fabric网络的基础材料
    artifacts-remote 使用官方fabric-sample动态构建网络
    extra 一些拓展性的材料
    node 基于Fabric SDK Node的demo核心代码
    src 测试用chaincode
    Init.sh 构建Demo的初始化脚本

    构建Demo

    该项目提供两种Demo构建方式:

    • 利用本地已经准备好的相关网络资源,启动fabric network。
    • 利用官方fabric-sample项目,动态启动fabric network。

    当然,你也可以使用自己已经创建好的fabric network和其相关的connection-profile来测试Demo。

    1. ##进入项目根目录
    2. ##使用本地资源构建Demo
    3. ./Init.sh local
    4. ##使用官方资源构建Demo
    5. ./Init.sh remote

    执行之后,会在根目录中生成一个demo文件夹,其就是Demo程序的入口。

    清理Demo资源,使用./Init.sh clean

    启动Fabric网络

    首先,我们需要准备一个fabric网络来进行测试。进入到demo文件夹。

    本地资源构建网络

    进入资源目录,利用脚本启动网络即可。

    1. cd artifacts
    2. ##启动网络
    3. ./net.sh up
    4. ##关闭网络
    5. ./net.sh down

    用该脚本启动网络中包含:1个orderer, 2个organisation, 4个peer(每个组织有2个peer)和两个ca(每个组织一个)。

    官方资源构建网络

    在demo目录,利用脚本启动网络即可。

    1. ##启动网络,并配置本地资源
    2. ./net.sh init
    3. ##关闭网络并清理资源
    4. ./net.sh clean

    用该脚本启动网络中包含:1个orderer, 2个organisation, 4个peer(每个组织有2个peer)和两个ca(每个组织一个)。

    与本地资源启动不同,该方案主要有以下步骤:

    • 将官方fabric-sample项目clone到本地
    • 利用fabric-sample/first-network/bynf.sh up启动fabric脚本
    • 将一些资源文件连接到指定位置,方便node程序使用
    • 通过资源文件构建connection-profile(替换密钥等)
    • 创建一个新的channel的binary

    详细信息可以直接查看net.sh脚本。

    clean命令会将所有相关的docker 容器和remote的动态资源全部删除。还原到最初的demo文件状态。

    资源清单

    无论是remote还是local模式,最终资源和网络准备完成之后,核心资源列表如下:

    1. demo/artifacts/
    2. ├── channel-artifacts
    3. ├── channel2.tx
    4. ├── channel.tx
    5. ├── genesis.block
    6. ├── Org1MSPanchors.tx
    7. └── Org2MSPanchors.tx
    8. ├── connection-profile
    9. ├── network.yaml
    10. ├── org1.yaml
    11. ├── org2.yaml
    12. ├── crypto-config
    13. ├── ordererOrganizations
    14. └── example.com
    15. └── peerOrganizations
    16. ├── org1.example.com
    17. └── org2.example.com

    运行Demo

    网络和相关资源准备成功之后,进入demo/node目录。其主要结构为:

    1. ├── app //核心应用接口
    2. ├── api-handler.js //接口定义文件
    3. ├── *.js //应用实现模块
    4. ├── tools //通用工具类
    5. ├── ca-tools.js
    6. ├── config-tool.js
    7. └── helper.js
    8. ├── app-test.js //Demo程序启动文件
    9. ├── package.json
    10. └── readme.md

    使用命令node app-test.js即可进行一个完整workflow的测试,包括最开始我们提到的所有功能。同时可以使用node app-test.js -m ca|createChannel|joinChannel|install|instantiate|invoke|query|queryChaincodeInfo|queryChannelInfo来运行单个功能。

    程序使用的均为默认参数,其定义在app-test.js文件中。可以按照需求修改对应的参数,再运行程序即可。

    持续更新

    如果在使用途中发现任何问题,或者有任何需求可以在该项目的issue中提出改进方案或者建议。Github地址:Hyperledger-fabric-node-sdk-demo