Hyperledger Fabric 2.x 環(huán)境搭建

一、說明

區(qū)塊鏈網(wǎng)絡(luò)的核心是分布式賬本,在這個賬本中記錄了網(wǎng)絡(luò)中發(fā)生的所有交易信息。

Hyperledger Fabric是一個是開源的,企業(yè)級的,帶權(quán)限的分布式賬本解決方案的平臺。Hyperledger Fabric由模塊化架構(gòu)支撐,并具備極佳的保密性、可伸縮性、靈活性和可擴展性。Hyperledger Fabric被設(shè)計成支持不同的模塊組件直接拔插啟用,并能適應(yīng)在經(jīng)濟生態(tài)系統(tǒng)中錯綜復(fù)雜的各種場景。

本文分享在 Centos下搭建 Hyperledger Fabric 2.4 環(huán)境并進行簡單的網(wǎng)絡(luò)測試。

?

二、環(huán)境準備

2.1. 環(huán)境依賴

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

?

2.2. 檢查環(huán)境

Docker版本

docker -v

?

Golang語言環(huán)境

go version

?

三、Fabric 源碼安裝

3.1. 創(chuàng)建目錄

在 GOPATH 目錄下創(chuàng)建 Fabric 的文件夾:

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

?

3.2. 下載源碼

cd $GOPATH/src/github.com/hyperledger

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

這里使用國內(nèi)的碼云的鏡像倉庫

?

3.3. 修改安裝腳本

如果本地網(wǎng)絡(luò)訪問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. 執(zhí)行安裝腳本

./bootstrap.sh

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


?

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

由于碼云鏡像倉庫的發(fā)布包只有源碼,我們需要編譯后的所以只能想辦法去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

執(zhí)行以下命令復(fù)制 fabric-samples 目錄中

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

?

四、啟動test-network測試網(wǎng)絡(luò)

進入test-network目錄

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

執(zhí)行以下命令:

./network.sh up

如果出現(xiàn)下圖的報錯:

則需要修改 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' 如下圖所示:

修改完配置后,重新執(zhí)行:

./network.sh up

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

至此一個基于 Hyperledger Fabric 的測試網(wǎng)絡(luò)就搭建完成了。

?

五、測試網(wǎng)絡(luò)使用

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

./network.sh -h

5.1. 創(chuàng)建Channel

現(xiàn)在我們的機器上正在運行對等節(jié)點和排序節(jié)點, 我們可以使用腳本創(chuàng)建用于在Org1和Org2之間進行交易的Fabric通道。

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

使用network.sh腳本在Org1和Org2之間創(chuàng)建通道并加入他們的對等節(jié)點,執(zhí)行以下命令創(chuàng)建一個通道:

./network.sh createChannel

如下圖所示創(chuàng)建成功后默認名稱為 mychannel

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

./network.sh createChannel -c channel1

?

5.2. 在通道啟動一個鏈碼

創(chuàng)建通道后,可以開始使用智能合約與通道賬本交互。智能合約包含管理區(qū)塊鏈賬本上資產(chǎn)的業(yè)務(wù)邏輯,由成員運行的應(yīng)用程序網(wǎng)絡(luò)可以在賬本上調(diào)用智能合約創(chuàng)建,更改和轉(zhuǎn)讓這些資產(chǎn),應(yīng)用程序還通過智能合約查詢,以在分類賬上讀取數(shù)據(jù)。

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

創(chuàng)建頻道后,可以使用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 鏈碼,可以通過參數(shù) -ccl 來安裝 Java 或 javascript 版本的鏈碼。

?

5.3. 與網(wǎng)絡(luò)交互

在啟用測試網(wǎng)絡(luò)后,可以使用 peer cli 客戶端與網(wǎng)絡(luò)進行交互,通過 peer cli 客戶端可以調(diào)用已部署的智能合約,更新通道,或安裝和部署新的智能合約。

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

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

執(zhí)行以下命令將cli客戶端添加到環(huán)境變量中:

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

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

export FABRIC_CFG_PATH=$PWD/../config/

設(shè)置允許org1操作peer cli的環(huán)境變量:

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/Admin@org1.example.com/msp
export CORE_PEER_ADDRESS=localhost:7051

CORE_PEER_TLS_ROOTCERT_FILECORE_PEER_MSPCONFIGPATH 環(huán)境變量指向Org1的 organizations 文件夾中的的加密材料。

執(zhí)行以下命令用一些資產(chǎn)來初始化賬本:

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":[]}'

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

執(zhí)行以下指令來查詢通道賬本中的資產(chǎn)列表:

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

?

六、關(guān)閉網(wǎng)絡(luò)

使用完測試網(wǎng)絡(luò)后,可執(zhí)行以下命令關(guān)閉網(wǎng)絡(luò):

./network.sh down

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

?

七、使用認證機構(gòu)創(chuàng)建網(wǎng)絡(luò)

Hyperledger Fabric使用公鑰基礎(chǔ)設(shè)施(PKI)來驗證所有網(wǎng)絡(luò)參與者的行為。 每個節(jié)點,網(wǎng)絡(luò)管理員和用戶提交的交易需要具有公共證書和私鑰以驗證其身份。

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

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

首先運行以下命令關(guān)停所有正在運行的網(wǎng)絡(luò):

./network.sh down

使用CA參數(shù)啟動網(wǎng)絡(luò):

./network.sh up -ca

執(zhí)行命令成功后,通過打印的docker容器可以看到啟動了三個CA,每個網(wǎng)絡(luò)中的組織一個:

可以通過 tree 命令來查看Org1管理員用戶的MSP文件夾結(jié)構(gòu)和文件:

tree organizations/peerOrganizations/org1.example.com/users/Admin@org1.example.com/

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

?

參考資料

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容