1. 程式人生 > >使用Hyperledger Composer將業務網路部署到單個組織的Hyperledger Fabric區塊鏈上

使用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配置工具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、使用者

[email protected]

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應用或者移動應用了:

這裡寫圖片描述