Hyperledger Fabric 2.x 環境搭建

語言: CN / TW / HK

一、説明

區塊鏈網絡的核心是分佈式賬本,在這個賬本中記錄了網絡中發生的所有交易信息。

Hyperledger Fabric是一個是開源的,企業級的,帶權限的分佈式賬本解決方案的平台。Hyperledger Fabric由模塊化架構支撐,並具備極佳的保密性、可伸縮性、靈活性和可擴展性。Hyperledger Fabric被設計成支持不同的模塊組件直接拔插啟用,並能適應在經濟生態系統中錯綜複雜的各種場景。

本文分享在 Centos下搭建 Hyperledger Fabric 2.4 環境並進行簡單的網絡測試。

 

二、環境準備

2.1. 環境依賴

  • Git 客户端
  • Golang 1.17.5以上版本
  • Docker 18.03以上版本

 

2.2. 檢查環境

Docker版本

docker -v

 

Golang語言環境

go version

 

三、Fabric 源碼安裝

3.1. 創建目錄

在 GOPATH 目錄下創建 Fabric 的文件夾:

mkdir -p $GOPATH/src/github.com/hyperledger

 

3.2. 下載源碼

cd $GOPATH/src/github.com/hyperledger

git clone https://gitee.com/hyperledger/fabric.git

這裏使用國內的碼雲的鏡像倉庫

 

3.3. 修改安裝腳本

如果本地網絡訪問github順暢可以忽略該步驟

編輯 bootstrap.sh 文件

vim $GOPATH/src/github.com/hyperledger/fabric/scripts/bootstrap.sh
  1. https://github.com/hyperledger/fabric-samples.git 修改為 https://gitee.com/hyperledger/fabric-samples.git

  1. 註釋 pullBinaries

 

3.4. 執行安裝腳本

./bootstrap.sh

如下圖所示,腳本執行成功之後會下載一個 fabric-samples 工程和一堆fabric的docker鏡像:

 

分別手動下載 fabricfabric-ca 編譯後的壓縮包,存放在 fabric/scripts/ 目錄下:

由於碼雲鏡像倉庫的發佈包只有源碼,我們需要編譯後的所以只能想辦法去github下載。

https://github.com/hyperledger/fabric/releases/download/v2.4.1/hyperledger-fabric-linux-amd64-2.4.1.tar.gz

https://github.com/hyperledger/fabric-ca/releases/download/v1.5.2/hyperledger-fabric-ca-linux-amd64-1.5.2.tar.gz

壓縮壓縮包,得到 binconfig 兩個文件夾:

tar -zxvf hyperledger-fabric-linux-amd64-2.4.1.tar.gz

tar -zxvf hyperledger-fabric-ca-linux-amd64-1.5.2.tar.gz

執行以下命令複製 fabric-samples 目錄中

cp -r bin fabric-samples/
cp -r config fabric-samples/

 

四、啟動test-network測試網絡

進入test-network目錄

cd $GOPATH/src/github.com/hyperledger/fabric/scripts/fabric-samples/test-network

執行以下命令:

./network.sh up

如果出現下圖的報錯:

則需要修改 docker-compose 的版本,在test-network目錄下分別編輯以下文件:

vim docker/docker-compose-test-net.yaml
vim docker/docker-compose-couch.yaml
vim docker/docker-compose-ca.yaml
vim addOrg3/docker/docker-compose-couch-org3.yaml
vim addOrg3/docker/docker-compose-org3.yaml

其中把 version: '3.7' 修改為 version: '3.6' 如下圖所示:

修改完配置後,重新執行:

./network.sh up

如下圖所示,已成功啟動一個 orderer節點 和兩個 peer節點

至此一個基於 Hyperledger Fabric 的測試網絡就搭建完成了。

 

五、測試網絡使用

可以執行以下命令打印腳本的幫助文本:

./network.sh -h

5.1. 創建Channel

現在我們的機器上正在運行對等節點和排序節點, 我們可以使用腳本創建用於在Org1和Org2之間進行交易的Fabric通道。

Fabric channel 是特定網絡成員之間的專用通信層,通道只能由被邀請加入通道的組織使用,並且對網絡的其他成員不可見。 每個通道都有一個單獨的區塊鏈賬本,被邀請的組織“加入”他們的對等節點來存儲其通道賬本並驗證交易,建立一個通道相當於建立了一個子鏈。

使用network.sh腳本在Org1和Org2之間創建通道並加入他們的對等節點,執行以下命令創建一個通道:

./network.sh createChannel

如下圖所示創建成功後默認名稱為 mychannel

可使用 -c 來指定通道名稱,以下命令將創建一個名為 channel1 的通道:

./network.sh createChannel -c channel1

 

5.2. 在通道啟動一個鏈碼

創建通道後,可以開始使用智能合約與通道賬本交互。智能合約包含管理區塊鏈賬本上資產的業務邏輯,由成員運行的應用程序網絡可以在賬本上調用智能合約創建,更改和轉讓這些資產,應用程序還通過智能合約查詢,以在分類賬上讀取數據。

在Fabric中,智能合約作為鏈碼以軟件包的形式部署在網絡上。鏈碼安裝在組織的對等節點上,然後部署到某個通道,然後可以在該通道中用於認可交易和區塊鏈賬本交互。在將鏈碼部署到通道前,該頻道的成員需要就鏈碼定義達成共識,建立鏈碼治理。何時達到要求數量的組織同意後,鏈碼定義可以提交給通道,並且可以使用鏈碼了。

創建頻道後,可以使用network.sh腳本在通道上啟動鏈碼:

./network.sh deployCC -ccn basic -ccp ../asset-transfer-basic/chaincode-java -ccl java
  • -ccn:為指定鏈碼名稱
  • -ccl:為指定鏈碼語言

deployCC 子命令將在 peer0.org1.example.compeer0.org2.example.com 上安裝 asset-transfer-basic 鏈碼,如果第一次部署鏈碼,腳本將安裝鏈碼的依賴項。默認情況下,腳本安裝Go版本的 asset-transfer-basic 鏈碼,可以通過參數 -ccl 來安裝 Java 或 javascript 版本的鏈碼。

 

5.3. 與網絡交互

在啟用測試網絡後,可以使用 peer cli 客户端與網絡進行交互,通過 peer cli 客户端可以調用已部署的智能合約,更新通道,或安裝和部署新的智能合約。

首先確保操作目錄為test-network目錄,比如我的目錄是:

以下操作需確保在 test-network 目錄中進行操作:

執行以下命令將cli客户端添加到環境變量中:

export PATH=${PWD}/../bin:$PATH

還需要將fabric-samples代碼庫中的FABRIC_CFG_PATH設置為指向其中的core.yaml文件:

export FABRIC_CFG_PATH=$PWD/../config/

設置允許org1操作peer cli的環境變量:

export CORE_PEER_TLS_ENABLED=true
export CORE_PEER_LOCALMSPID="Org1MSP"
export CORE_PEER_TLS_ROOTCERT_FILE=${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt
export CORE_PEER_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org1.example.com/users/Adm[email protected]/msp
export CORE_PEER_ADDRESS=localhost:7051

CORE_PEER_TLS_ROOTCERT_FILECORE_PEER_MSPCONFIGPATH 環境變量指向Org1的 organizations 文件夾中的的加密材料。

執行以下命令用一些資產來初始化賬本:

peer chaincode invoke -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --tls --cafile ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C mychannel -n basic --peerAddresses localhost:7051 --tlsRootCertFiles ${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt --peerAddresses localhost:9051 --tlsRootCertFiles ${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt -c '{"function":"InitLedger","Args":[]}'

執行成功會返回 Chaincode invoke successful. result: status:200 如下圖所示:

執行以下指令來查詢通道賬本中的資產列表:

peer chaincode query -C mychannel -n basic -c '{"Args":["GetAllAssets"]}'

 

六、關閉網絡

使用完測試網絡後,可執行以下命令關閉網絡:

./network.sh down

該命令將停止並刪除節點和鏈碼容器,刪除組織加密材料,並從Docker Registry移除鏈碼鏡像,另外還會刪除之前運行的通道項目:

 

七、使用認證機構創建網絡

Hyperledger Fabric使用公鑰基礎設施(PKI)來驗證所有網絡參與者的行為。 每個節點,網絡管理員和用户提交的交易需要具有公共證書和私鑰以驗證其身份。

默認情況下,腳本使用cryptogen工具創建證書和密鑰,該工具用於開發和測試,並且可以快速為具有有效根信任的Fabric組織創建所需的加密材料。

測試網絡腳本還提供了使用證書頒發機構(CA)的網絡的啟動選項。在網絡中每個組織操作一個CA(或多箇中間CA)來創建屬於他們的組織身份,所有由該組織運行的CA創建的身份享有相同的組織信任根源。

首先運行以下命令關停所有正在運行的網絡:

./network.sh down

使用CA參數啟動網絡:

./network.sh up -ca

執行命令成功後,通過打印的docker容器可以看到啟動了三個CA,每個網絡中的組織一個:

可以通過 tree 命令來查看Org1管理員用户的MSP文件夾結構和文件:

tree organizations/peerOrganizations/org1.example.com/users/[email protected]/

其中 signcerts 文件夾中存放着管理員用户的證書,keystore 文件夾中存放着私鑰。

 

參考資料

 

掃碼關注有驚喜!

file