1. 程式人生 > >HyperLeger Fabric開發(二)——HyperLeger Fabric入門

HyperLeger Fabric開發(二)——HyperLeger Fabric入門

out 版本 comm 開發 https .gz image roc 繼續

HyperLeger Fabric開發(二)——HyperLeger Fabric入門

本文使用RHEL 7.3 workstation版本操作系統。

一、HyperLeger Fabric環境部署

1、Go語言開發環境部署

(1)Go語言環境安裝
Go語言環境安裝包下載地址:
https://golang.org/dl/
https://golang.google.cn/dl/
將下載的源碼包解壓至/usr/local目錄
sudo tar -C /usr/local -xzf go1.10.1.linux-amd64.tar.gz
將/usr/local/go/bin目錄添加至PATH環境變量
export PATH=$PATH:/usr/local/go/bin


(2)GOPATH環境變量設置

GOPATH=/home/user/GoLang:/home/user/dev
export GOPATH

為了使用方便,通常需要將所有工作空間的bin路徑添加到PATH環境變量中,如:
export $PATH:$GOPATH/bin
如果$GOPATH有多個工作目錄,使用?${GOPATH//://bin:}/bin?添加所有的bin目錄。
export $PATH:${GOPATH//://bin:}/bin

2、Docker工具安裝

yum install docker

3、HyperLeger Fabric下載

GitHub地址:https://github.com/hyperledger/fabric

(1)go get下載
使用Go語言工具go get從HyperLeger Fabric項目的GitHub地址下載HyperLeger Fabric:
go get -u -v github.com/hyperledger/fabric
(2)git clone下載
HyperLeger Fabric項目大小約76MB,如果使用go get工具下載速度慢,可以使用git clone下載:
創建hyperledger目錄:
mkdir -p $GOPATH/src/github.com/hyperledger
切換到hyperledger目錄:
cd $GOPATH/src/github.com/hyperledger
git clone下載:
git clone https://github.com/hyperledger/fabric.git

二、HyperLeger Fabric工具部署

1、HyperLeger Fabric版本切換

進入HyperLeger Fabric項目所在源碼目錄:
cd $GOPATH/src/github.com/hyperledger/fabric
切換到release-1.0版本:
git checkout release-1.0

2、configtxgen工具安裝

configtxgen工具用於生成Fabric的配置構件。
切換到configtxgen目錄:
cd common/configtx/tool/configtxgen
編譯安裝:
go install
報錯:
fatal error: ltdl.h: No such file or directory
安裝Itdl:
yum install libtool-ltdl-devel
繼續編譯安裝:
go install
目標工具被安裝到$GOPATH/bin目錄下。

3、cryptogen工具安裝

cryptogen工具用於生成Fabric證書和密鑰。
切換到cryptogen源碼目錄:
cd common/tools/cryptogen
編譯安裝:
go install
目標工具被安裝到$GOPATH/bin目錄下。

三、部署第一個Fabric網絡

1、fabric-samples項目下載

fabric-samples項目包含first-network等HyperLeger Fabric項目的多個示例。
https://github.com/hyperledger/fabric-samples.git
下載fabric-samples項目到$GOPATH/src/github.com/hyperledger:
git clone https://github.com/hyperledger/fabric-samples.git

2、切換到first-network示例源碼目錄

切換到first-network示例:
cd $GOPATH/src/github.com/hyperledger/fabric-samples/first-network
切換到release-1.0版本:
git checkout release-1.0
first-network源碼目錄如下:
技術分享圖片
first-network示例即BYFN(build your first network),BYFN方案規定了一個由兩個組織組成的簡單HyperLeger Fabric網絡,每個組織維護有兩個對等節點和一個solo排序服務。
byfn.sh腳本利用Docker鏡像快速引導BYFN(build your first network)示例網絡,BYFN網絡由代表兩個不同組織的4個對等節點和一個排序節點組成。 byfn.sh腳本會啟動容器運行一個腳本,腳本用於將對等節點加入一條通道,部署和實例化鏈碼,並驅動在部署的鏈碼上執行交易。

3、生成BYFN示例網絡構件

byfn.sh腳本提供了生成網絡構件的功能,用於生成不同網絡實體的所有證書和密鑰,用於引導排序服務的創始塊以及配置通道所需的交易配置的集合。命令如下:
./byfn.sh -m generate -c scorpio -i 1.0.0
byfn.sh -m generate:使用cryptogen和configtxgen生成網絡構件
-c:指定通道名稱
-i:指定版本

[user@localhost first-network]$ ./byfn.sh -m generate -c scorpio -i 1.0.0
Generating certs and genesis block for with channel ‘scorpio‘ and CLI timeout of ‘10‘
Continue (y/n)? y
proceeding ...
/home/user/GoLang/bin/cryptogen

##########################################################
##### Generate certificates using cryptogen tool #########
##########################################################
org1.example.com
org2.example.com

/home/user/GoLang/bin/configtxgen
##########################################################
#########  Generating Orderer Genesis block ##############
##########################################################
2018-10-21 15:52:45.442 CST [common/configtx/tool] main -> INFO 001 Loading configuration
2018-10-21 15:52:45.467 CST [common/configtx/tool] doOutputBlock -> INFO 002 Generating genesis block
2018-10-21 15:52:45.469 CST [common/configtx/tool] doOutputBlock -> INFO 003 Writing genesis block

#################################################################
### Generating channel configuration transaction ‘channel.tx‘ ###
#################################################################
2018-10-21 15:52:45.479 CST [common/configtx/tool] main -> INFO 001 Loading configuration
2018-10-21 15:52:45.482 CST [common/configtx/tool] doOutputChannelCreateTx -> INFO 002 Generating new channel configtx
2018-10-21 15:52:45.482 CST [common/configtx/tool] doOutputChannelCreateTx -> INFO 003 Writing new channel tx

#################################################################
#######    Generating anchor peer update for Org1MSP   ##########
#################################################################
2018-10-21 15:52:45.494 CST [common/configtx/tool] main -> INFO 001 Loading configuration
2018-10-21 15:52:45.497 CST [common/configtx/tool] doOutputAnchorPeersUpdate -> INFO 002 Generating anchor peer update
2018-10-21 15:52:45.498 CST [common/configtx/tool] doOutputAnchorPeersUpdate -> INFO 003 Writing anchor peer update

#################################################################
#######    Generating anchor peer update for Org2MSP   ##########
#################################################################
2018-10-21 15:52:45.508 CST [common/configtx/tool] main -> INFO 001 Loading configuration
2018-10-21 15:52:45.513 CST [common/configtx/tool] doOutputAnchorPeersUpdate -> INFO 002 Generating anchor peer update
2018-10-21 15:52:45.513 CST [common/configtx/tool] doOutputAnchorPeersUpdate -> INFO 003 Writing anchor peer update

cryptogen用於為各種網絡實體生成加密材料(x509證書和簽名密鑰)。x509證書代表身份/標識,允許在實體進行通信和交易時進行簽名/驗證身份驗證。
cryptogen(fabric證書/密鑰生成工具)使用一個配置文件crypto-config.yaml(包含網絡拓撲)為組織和屬於組織的組件(peer/orderer)生成一組證書和密鑰。每個組織都配置了一個唯一的根證書(ca-cert),用於將特定組件(peer和orderer)綁定到組織。通過為每個組織分配唯一的CA證書,可以模仿典型的網絡,網絡中的成員將使用其自己的證書頒發機構。 Hyperledger Fabric中的交易和通信由實體的私鑰(密鑰庫)簽名,然後通過公鑰(簽名)進行驗證。
cryptogen工具生成的證書和密鑰將保存到crypto-config目錄,目錄結構如下:
技術分享圖片
configtxgen使用一個configtx.yaml文件,configtx.yam定義了一個示例網絡,網絡中有一個排序服務組織OrdererOrg以及兩個對等節點組織(Org1,Org2),每個組織管理和持有2個對等節點。configtx.yam文件還指定了一個SampleConsortium的聯盟,由2個對等節點組織構成。需要特別註意文件頂部的Profiles部分,有兩個唯一的頭部信息,一個是排序節點的創世區塊TwoOrgsOrdererGenesis,一個是通道TwoOrgsChannel。這兩個頭部信息會在創建網絡構件時作為參數。
configtx.yaml文件也包含兩個需要的額外規格說明。首先,指定了兩個對等節點組織的對等節點(peer0.org1.example.com,peer0.org2.example.com);其次,指明了每個成員的MSP目錄位置(MSPDir指定),從而允許在排序節點的創世塊中存儲每個組織的根證書。目前,任何網絡實體和排序服務通信都必須要進行數字簽名認證。

4、啟動BYFN示例

啟動first-network,使用-i參數指定版本為1.0.0:
./byfn.sh -m up -c scorpio -i 1.0.0
byfn.sh -m up:啟動BYFN示例
首次啟動first-network時,會從Docker鏡像倉庫下載下列三個鏡像:

docker.io/hyperledger/fabric-orderer:x86_64-1.0.0
docker.io/hyperledger/fabric-peer:x86_64-1.0.0
docker.io/hyperledger/fabric-tools:x86_64-1.0.0

5、關閉BYFN示例

./byfn.sh -m down -c scorpio
用於關閉BYFN網絡,會關閉容器,移除加密材料和4個配置信息,並且從Docker倉庫刪除鏈碼鏡像。

7、故障排除

再次啟動BYFN網絡示例前,必須先關閉BYFN網絡,刪除生成的證書、容器、網絡構件以及鏈碼鏡像等。如果不關閉BYFN網絡,將會導致創建通道失敗。錯誤如下:

!!!!!!!!!!!!!!! Channel creation failed !!!!!!!!!!!!!!!!
========= ERROR !!! FAILED to execute End-2-End Scenario ===========

HyperLeger Fabric開發(二)——HyperLeger Fabric入門