使用Hyperledger Composer將業務網路部署到單個組織的Hyperledger Fabric區塊鏈上
前言
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、使用者
org1
中配置的管理員使用者,他的證書材料以及私鑰在~/fabric-tools/fabric-scripts/hlfv1/composer/crypto-config/peerOrganizations/org1.example.com/users/[email protected]/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/[email protected]/msp/signcerts/[email protected]
這個是使用者身份的公共部分:
2、管理員私鑰
~/fabric-tools/fabric-scripts/hlfv1/composer/crypto-config/peerOrganizations/org1.example.com/users/[email protected]/msp/keystore/114aab0e76bf0c78308f89efc4b8c9423e31568da0c340ca187a9b17aa9a4457_sk
簽名交易時使用:
3、把上面的兩個檔案複製到配置檔案所在的目錄
cp ~/fabric-tools/fabric-scripts/hlfv1/composer/crypto-config/peerOrganizations/org1.example.com/users/[email protected].example.com/msp/signcerts/[email protected].example.com-cert.pem ~/fabric-tools/fabric-scripts/hlfv1/connection
cp ~/fabric-tools/fabric-scripts/hlfv1/composer/crypto-config/peerOrganizations/org1.example.com/users/[email protected].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 [email protected]-network.card
匯入成功後,使用composer card list
檢視詳情:
七、 安裝 Hyperledger Composer runtime
根據官網的描述,Hyperledger Composer runtime 就是一個chaincode,需要把它安裝到peer節點(配置檔案上定義的)上。同時需要為區塊鏈業務網路(blockchain business network)定義一個名稱。
執行下面命令:
composer runtime install -c [email protected]-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)
composer network start -c [email protected]-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 [email protected]-network.card
匯入後,我們檢視下錢包中維護的身份:
十、 測試下到業務網路的連線是否通常
composer network ping -c [email protected]-network
十一、 生成REST API
composer-rest-server
執行效果:
進入http://localhost:3000/explorer
,每個模組都可以CRUD,你可以愉快的編寫WEB應用或者移動應用了: