1. 程式人生 > >Hyperledger Fabric 1.0 實戰開發系列 第二課 Fabric環境搭建

Hyperledger Fabric 1.0 實戰開發系列 第二課 Fabric環境搭建

一.安裝GO語言

下載最新版的go

開啟Terminal,輸入命令(以下命令都是以root管理員的角色進行的)

su
輸入密碼:*****
wget https://storage.googleapis.com/golang/go1.9.2.linux-amd64.tar.gz
tar -C /usr/local -xzf go1.8.4.linux-amd64.tar.gz

編輯當前使用者的環境變數

vi /etc/profile

新增以下內容

export PATH=$PATH:/usr/local/go/bin 
export GOROOT=/usr/local/go 
export GOPATH=$HOME/go 
export PATH=$PATH:$HOME/go/bin

編輯儲存並退出vi後,記得使這些環境變數生效

source /etc/profile

把go的目錄GOPATH設定為當前使用者的資料夾下,所以記得建立go資料夾

cd ~
mkdir go

有時候wget獲取go安裝包的時候會因為網路問題失敗,也可以用apt安裝go,只不過版本是比較老舊的1.6.2,但是我在測試中也可以正常使用

 apt-get install golang

新增的環境變數為

export PATH=$PATH:/usr/lib/go-1.6 
export GOROOT=/usr/lib/go-1.6
export GOPATH=$HOME/go 
export PATH=$PATH:$HOME/go/bin

二.安裝Docker

可以使用阿里提供的映象倉庫,執行以下命令來安裝Docker

 curl -sSL http://acs-public-mirror.oss-cn-hangzhou.aliyuncs.com/docker-engine/internet | sh -  

有的時候在第一步中無法安裝成功,也可以使用官方提供的指令碼來安裝docker

 curl -sSl https://get.docker.com/ | sh

安裝成功後啟動docker服務:

 service docker start

三.安裝Docker-compose

Docker-compose是支援通過模板指令碼批量建立Docker容器的一個元件。在安裝Docker-Compose之前,需要安裝Python-pip,執行指令碼:

 apt-get install python-pip

然後是安裝docker-compose,我們從官方網站(https://github.com/docker/compose/releases)下載也可以從國內的進行DaoClound下載,為了速度快接下來從DaoClound安裝Docker-compose,執行指令碼:

curl -L https://get.daocloud.io/docker/compose/releases/download/1.12.0/docker-compose-`uname -s`-`uname -m` > ~/docker-compose
 mv ~/docker-compose /usr/local/bin/docker-compose 
chmod +x /usr/local/bin/docker-compose

四.Fabric原始碼下載

可以用go get命令下載原始碼

go get github.com/hyperledger/fabric

如果下載失敗也可以使用git命令下載原始碼

mkdir -p ~/go/src/github.com/hyperledger 
cd ~/go/src/github.com/hyperledger 
git clone https://github.com/hyperledger/fabric.git

由於Fabric一直在更新,所有我們並不需要最新最新的原始碼,需要切換到v1.0.0版本的原始碼即可:

cd ~/go/src/github.com/hyperledger/fabric
git checkout v1.0.0

五.下載Fabric映象

官方檔案提供了批量下載的指令碼。我們直接執行:

cd ~/go/src/github.com/hyperledger/fabric/examples/e2e_cli/
source download-dockerimages.sh -c x86_64-1.0.0 -f x86_64-1.0.0

所有會用到的Fabric docker映象都會下載下來了。

下載完畢後,我們執行以下命令檢查下載的映象列表:

docker images

得到的結果如下:


六、啟動Fabric網路並完成ChainCode的測試

我們仍然停留在e2e_cli資料夾,這裡提供了啟動、關閉Fabric網路的自動化指令碼。我們要啟動Fabric網路,並自動執行Example02 ChainCode的測試,執行一個命令:

bash network_setup.sh up

這個做了以下操作:

6.1編譯生成Fabric公私鑰、證書的程式,程式在目錄:fabric/release/linux-amd64/bin

6.2基於configtx.yaml生成創世區塊和通道相關資訊,並儲存在channel-artifacts資料夾。

6.3基於crypto-config.yaml生成公私鑰和證書資訊,並儲存在crypto-config資料夾中。

6.4基於docker-compose-cli.yaml啟動1Orderer+4Peer+1CLI的Fabric容器。

6.5在CLI啟動的時候,會執行scripts/script.sh檔案,這個指令碼檔案包含了建立Channel,加入Channel,安裝Example02,執行Example02等功能。

最後執行完畢,我們可以看到這樣的介面:


如果您看到這個介面,這說明我們整個Fabric網路已經通了。

類似這樣的錯誤,是因為channel已經建立,命名衝突

    <EXACT_TIMESTAMP> UTC [msp] Sign -> DEBU 064 Sign: digest: 5ABA6805B3CDBAF16C6D0DCD6DC439F92793D55C82DB130206E35791BCF18E5F
    Error: Got unexpected status: BAD_REQUEST
    Usage:
        peer channel create [flags]
  • 1
  • 2
  • 3
  • 4

解決辦法:移除docker,重新啟動。 
-)強制刪除全部容器 docker rm -f $(docker ps -aq)

然後重新執行

bash network_setup.sh up


七.手動測試一下Fabric網路

我們仍然是以現在安裝好的Example02為例,在官方例子中,channel名字是mychannel,鏈碼的名字是mycc。我們首先進入CLI,我們重新開啟一個命令列視窗,輸入:

docker exec -it cli bash

執行以下命令可以查詢a賬戶的餘額:

peer chaincode query -C mychannel -n mycc -c '{"Args":["query","a"]}'

可以看到餘額是90:


然後,我們試一試把a賬戶的餘額再轉20元給b賬戶,執行命令:

peer chaincode invoke -o orderer.example.com:7050  --tls true --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem  -C mychannel -n mycc -c '{"Args":["invoke","a","b","20"]}'

執行結果為:


現在轉賬完畢, 我們試一試再查詢一下a賬戶的餘額,沒問題的話,應該是隻剩下70了。我們看看實際情況:


果然,一切正常。最後我們要關閉Fabric網路,首先需要執行exit命令退出cli容器。關閉Fabric的命令與啟動類似,命令為:
cd ~/go/src/github.com/hyperledger/fabric/examples/e2e_cli


./network_setup.sh down
現在我們整個Fabric的環境已經測試完畢,恭喜,一切正常,接下來我們就是去做自己的區塊鏈的開發。