转载请标明出处:
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配置工具cryptogen和configtxgen配置开发环境中提供的简单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
的,而且只有这一个节点。多个端口号以,
分开。
- 这个peer节点是
-
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
这个是用户身份的公共部分:
2、管理员私钥
~/fabric-tools/fabric-scripts/hlfv1/composer/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/keystore/114aab0e76bf0c78308f89efc4b8c9423e31568da0c340ca187a9b17aa9a4457_sk
签名交易时使用:
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
执行成功后,在当前目录(connection
)下会多出一个.card
文件:
3、生成card命令的详解
六、 为Hyperledger Fabric管理员导入业务网卡
执行下面命令:
cd ~/fabric-tools/fabric-scripts/hlfv1/connection
composer card import -f PeerAdmin@fabric-network.card
导入成功后,使用composer card list
查看详情:
七、 安装 Hyperledger Composer runtime
这一步骤的操作如同Hyperledger Fabric 术语里面的安装chaincode
根据官网的描述,Hyperledger Composer runtime 就是一个chaincode,需要把它安装到peer节点(配置文件上定义的)上。同时需要为区块链业务网络(blockchain business network)定义一个名称。
执行下面命令:
composer runtime install -c PeerAdmin@fabric-network -n tutorial-network
安装成功:
八、 运行区块链业务网络(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
里面的两个地方:
生成bna文件:
复制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
运行结果:
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
导入后,我们查看下钱包中维护的身份:
十、 测试下到业务网络的连接是否通常
composer network ping -c admin@tutorial-network
十一、 生成REST API
composer-rest-server
执行效果:
进入http://localhost:3000/explorer
,每个模块都可以CRUD,你可以愉快的编写WEB引用或者移动应用了: