使用Hyperledger Composer将业务网络部署到单个组织的Hyperledger Fabric区块链上

时间:2022-09-17 12:16:36

转载请标明出处: 
http://blog.csdn.net/qq_27818541/article/details/78727076 
本文出自:【BigManing的博客】

前言

Hyperledger Composer官方一直在维护更新中,写作本文时最新release版本为0.16,从0.15的更新带来了新的特性:card,也就是对用户身份的封装。如果你在以前的版本中使用过composer,你对身份并不会陌生,例如部署到fabric网络时需要用到PeerAdmin身份。这篇文章的目的就是使用最新版本的composer部署业务网络,我会详细记录操作流程,以便他人或者自查,对于你熟知的步骤,可以跳过。

我的环境

Ubuntu 16.04   //我的操作系统
Hyperledger Composer 0.16      
Hyperledger Fabric 1.0.4    

先前准备

1、先满足下列环境要求

Operating Systems: Ubuntu Linux 14.04 / 16.04 LTS (both 64-bit), or Mac OS 10.12
Docker Engine: Version 17.03 or higher
Docker-Compose: Version 1.8 or higher
Node: 8.9 or higher (note version 9 is not supported)
npm: v5.x
git: 2.9.x or higher
Python: 2.7.x
A code editor of your choice, we recommend VSCode.推荐 VSCode. 

2、安装Hyperledger Composer开发工具

Composer相关工具:

npm install -g composer-cli
npm install -g generator-hyperledger-composer
npm install -g composer-rest-server
npm install -g yo

3、下载Hyperledger Fabric网络相关工具

mkdir ~/fabric-tools && cd ~/fabric-tools

curl -O https://raw.githubusercontent.com/hyperledger/composer-tools/master/packages/fabric-dev-servers/fabric-dev-servers.zip

unzip fabric-dev-servers.zip

一、 开启Fabric区块链网络

1、执行下面命令启动网络

cd ~/fabric-tools
./stopFabric.sh
./teardownFabric.sh
./downloadFabric.sh
./startFabric.sh

2、删除以前的 business network card(新增的特性)

composer card delete -n PeerAdmin@fabric-network
composer card delete -n admin@tutorial-network

二、 详解Fabric区块链网络

这部分主要是了解区块链网络的相关配置以各个组件的作用,如果你很熟悉这部分知识,可以跳过。

1、配置文件

使用Hyperledger Fabric配置工具cryptogenconfigtxgen配置开发环境中提供的简单Hyperledger Fabric网络。 
cryptogen需要用到的配置文件:

~/fabric-tools/fabric-scripts/hlfv1/composer/crypto-config.yaml

configtxgen需要用到的配置文件:

~/fabric-tools/fabric-scripts/hlfv1/composer/configtx.yaml

2、组织

本文中的Fabric网络只有一个组织Org1,域名为org1.example.com。此外,该组织的成员资格服务提供商(MSP)称为Org1MSP。 在本事例中,您将部署只有组织Org1可以与之交互的区块链业务网络。

3、网络组件

docker ps 如下:

CONTAINER ID        IMAGE                                     COMMAND                  CREATED             STATUS              PORTS                                            NAMES
4730f8767eac        hyperledger/fabric-peer:x86_64-1.0.4      "peer node start -..."   10 minutes ago      Up 10 minutes       0.0.0.0:7051->7051/tcp, 0.0.0.0:7053->7053/tcp   peer0.org1.example.com
2c55a035a7dc        hyperledger/fabric-orderer:x86_64-1.0.4   "orderer"                10 minutes ago      Up 10 minutes       0.0.0.0:7050->7050/tcp                           orderer.example.com
02ca6ce17128        hyperledger/fabric-couchdb:x86_64-1.0.4   "tini -- /docker-e..."   10 minutes ago      Up 10 minutes       4369/tcp, 9100/tcp, 0.0.0.0:5984->5984/tcp       couchdb
83f3fe63f43a        hyperledger/fabric-ca:x86_64-1.0.4        "sh -c 'fabric-ca-..."   10 minutes ago      Up 10 minutes       0.0.0.0:7054->7054/tcp                           ca.org1.example.com
  • peer 
    • 这个peer节点是org1的,而且只有这一个节点。多个端口号以分开。
  • ca 
    • org1服务的证书颁发机构。
  • order 
    • 交易排序的节点。
  • couchdb 
    • 数据存储的媒介,如果没有配置这个 默认是leveldb

4、用户

Admin@org1.example.com

org1中配置的管理员用户,他的证书材料以及私钥在~/fabric-tools/fabric-scripts/hlfv1/composer/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp路径里。

他拥有的权限:

  • 可以部署BNA代码
  • 可以运行BNA业务网络

admin

CA(证书机构)服务中默认的用户,他就没有部署BNA的权限。

5、channel

定义

fabric-tools/fabric-scripts/hlfv1/composer/configtx.yaml

Profiles:

    ......

    ComposerChannel:
        Consortium: ComposerConsortium
        Application:
            <<: *ApplicationDefaults
            Organizations:
                - *Org1   // 可以看出这个只有`org1`的成员可以加入

    ......

生成channel

在实例中channel文件已经被生成好了,channelId为composerchannel,文件地址:~/fabric-tools/fabric-scripts/hlfv1/composer/composer-channel.tx

生成channel的命令:

configtxgen -profile ComposerChannel -outputCreateChannelTx ./composer-channel.tx -channelID composerchannel

三、 生成连接Fabric区块链网络的配置文件

新建一个文件夹(connection):

cd ~/fabric-tools/fabric-scripts/hlfv1
mkdir connection

创建配置文件connection.json

cd connection/
touch connection.json

打开connection.json,配置内容如下:

{
  "name": "fabric-network",
  "type": "hlfv1",
  "mspID": "Org1MSP",
  "peers": [ { "requestURL": "grpc://localhost:7051", "eventURL": "grpc://localhost:7053" } ],
  "ca": { "url": "http://localhost:7054", "name": "ca.org1.example.com" },
  "orderers": [ { "url" : "grpc://localhost:7050" } ],
  "channel": "composerchannel",
  "timeout": 300 }

字段详解请看这里

四、 找到Fabric网络的管理员证书以及私钥

前面已经说过了,只有Fabric的管理员身份才能部署BNA文件(业务网络),我们来看看他长什么样子吧。

1、管理员证书

~/fabric-tools/fabric-scripts/hlfv1/composer/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/signcerts/Admin@org1.example.com-cert.pem

这个是用户身份的公共部分:

使用Hyperledger Composer将业务网络部署到单个组织的Hyperledger Fabric区块链上

2、管理员私钥

~/fabric-tools/fabric-scripts/hlfv1/composer/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/keystore/114aab0e76bf0c78308f89efc4b8c9423e31568da0c340ca187a9b17aa9a4457_sk

签名交易时使用:

使用Hyperledger Composer将业务网络部署到单个组织的Hyperledger Fabric区块链上

3、把上面的两个文件复制到配置文件所在的目录

 cp   ~/fabric-tools/fabric-scripts/hlfv1/composer/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/signcerts/Admin@org1.example.com-cert.pem    ~/fabric-tools/fabric-scripts/hlfv1/connection
 cp   ~/fabric-tools/fabric-scripts/hlfv1/composer/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/keystore/114aab0e76bf0c78308f89efc4b8c9423e31568da0c340ca187a9b17aa9a4457_sk   ~/fabric-tools/fabric-scripts/hlfv1/connection

五、 为Hyperledger Fabric管理员创建一个业务网络访问卡(business network card)

1、card介绍

目前在~/fabric-tools/fabric-scripts/hlfv1/connection目录中有如下文件:

.    // 管理员私钥
├── 114aab0e76bf0c78308f89efc4b8c9423e31568da0c340ca187a9b17aa9a4457_sk
    // 管理员证书
├── Admin@org1.example.com-cert.pem
    // 连接配置文件
└── connection.json

使用这些文件可以生成business network card,其作用为:

// 1 可以连接Fabric区块链网络
// 2 可以连接`business network `(业务网络)

2、生成card

执行如下命令:

cd  ~/fabric-tools/fabric-scripts/hlfv1/connection

composer card create \
-p connection.json \ -u PeerAdmin \ -c Admin@org1.example.com-cert.pem \ -k 114aab0e76bf0c78308f89efc4b8c9423e31568da0c340ca187a9b17aa9a4457_sk \ -r PeerAdmin -r ChannelAdmin

使用Hyperledger Composer将业务网络部署到单个组织的Hyperledger Fabric区块链上

执行成功后,在当前目录(connection)下会多出一个.card文件:

使用Hyperledger Composer将业务网络部署到单个组织的Hyperledger Fabric区块链上

3、生成card命令的详解

生成card命令的详细介绍请看这里。

六、 为Hyperledger Fabric管理员导入业务网卡

执行下面命令:

cd ~/fabric-tools/fabric-scripts/hlfv1/connection

composer card import -f PeerAdmin@fabric-network.card

使用Hyperledger Composer将业务网络部署到单个组织的Hyperledger Fabric区块链上

导入成功后,使用composer card list 查看详情:

使用Hyperledger Composer将业务网络部署到单个组织的Hyperledger Fabric区块链上

七、 安装 Hyperledger Composer runtime

这一步骤的操作如同Hyperledger Fabric 术语里面的安装chaincode

根据官网的描述,Hyperledger Composer runtime 就是一个chaincode,需要把它安装到peer节点(配置文件上定义的)上。同时需要为区块链业务网络(blockchain business network)定义一个名称。 
执行下面命令:

composer runtime install -c PeerAdmin@fabric-network -n tutorial-network

安装成功:

使用Hyperledger Composer将业务网络部署到单个组织的Hyperledger Fabric区块链上

八、 运行区块链业务网络(blockchain business network)

1、准备BNA文件(业务网络文件)

这里借用下官方示例basic-sample-network

执行下面命令:

cd ~

# git官方示例
git clone https://github.com/hyperledger/composer-sample-networks.git

# 使用其中的一个示例
cp -r ./composer-sample-networks/packages/basic-sample-network/  ./

# 进入到这个目录
cd basic-sample-network

#安装依赖 
# npm install

修改package.json里面的两个地方:

使用Hyperledger Composer将业务网络部署到单个组织的Hyperledger Fabric区块链上 
使用Hyperledger Composer将业务网络部署到单个组织的Hyperledger Fabric区块链上

生成bna文件:

使用Hyperledger Composer将业务网络部署到单个组织的Hyperledger Fabric区块链上

复制bna文件到connection文件夹下:


cp  ~/basic-sample-network/dist/tutorial-network.bna  ~/fabric-tools/fabric-scripts/hlfv1/connection/

2、运行业务网络(初始化chaincode)

这一步骤的操作如同Hyperledger Fabric 术语里面的初始化chaincode

composer network start -c PeerAdmin@fabric-network -a tutorial-network.bna -A admin -S adminpw

运行结果:

使用Hyperledger Composer将业务网络部署到单个组织的Hyperledger Fabric区块链上

docker ps 查看此时的容器:

CONTAINER ID        IMAGE                                                                                                                 COMMAND                  CREATED             STATUS              PORTS                                            NAMES
// 这个步骤 就相当于 初始化 chaincode 自动生成合约镜像
e3df6b05dc64        dev-peer0.org1.example.com-tutorial-network-0.16.2-3f443591c7f8b7c2cfb3c343bf26b99fd7c39b97ca8327bd8c07ee99460b01d4   "chaincode -peer.a..."   4 hours ago         Up 4 hours                                                           dev-peer0.org1.example.com-tutorial-network-0.16.2
195793779b99        hyperledger/fabric-peer:x86_64-1.0.4                                                                                  "peer node start -..."   4 days ago          Up 4 days           0.0.0.0:7051->7051/tcp, 0.0.0.0:7053->7053/tcp   peer0.org1.example.com
98ad2ad2224d        hyperledger/fabric-ca:x86_64-1.0.4                                                                                    "sh -c 'fabric-ca-..."   4 days ago          Up 4 days           0.0.0.0:7054->7054/tcp                           ca.org1.example.com
2907f48a3f02        hyperledger/fabric-orderer:x86_64-1.0.4                                                                               "orderer"                4 days ago          Up 4 days           0.0.0.0:7050->7050/tcp                           orderer.example.com
d00f2d5fcc28        hyperledger/fabric-couchdb:x86_64-1.0.4                                                                               "tini -- /docker-e..."   4 days ago          Up 4 days           4369/tcp, 9100/tcp, 0.0.0.0:5984->5984/tcp       couchdb

九、 导入业务网络管理员身份

composer card import -f admin@tutorial-network.card

导入后,我们查看下钱包中维护的身份:

使用Hyperledger Composer将业务网络部署到单个组织的Hyperledger Fabric区块链上

十、 测试下到业务网络的连接是否通常

composer network ping -c admin@tutorial-network

使用Hyperledger Composer将业务网络部署到单个组织的Hyperledger Fabric区块链上

十一、 生成REST API

 composer-rest-server

执行效果:

使用Hyperledger Composer将业务网络部署到单个组织的Hyperledger Fabric区块链上

进入http://localhost:3000/explorer ,每个模块都可以CRUD,你可以愉快的编写WEB引用或者移动应用了:

使用Hyperledger Composer将业务网络部署到单个组织的Hyperledger Fabric区块链上