作為目前Hash chain 的CTO,接到很多開源社群的朋友請教,大家對于區塊鍊抱有很大程度上的熱誠。但是由于區塊鍊開發技術門檻較高,廣譜技術開發普及度不高。是以準備出個教程,本來昨天已經在騰訊雲實驗室測試部署完成,但是由于沒被稽核通過,稽核同學可能規矩比較嚴吧,再加上平時工作太忙了,沒辦法細緻整合,我就把在實驗室的原内容照搬在底下,隻能讓大家跟着文章,看一看,一起了解。
有不懂的地方可以加群問答:qq:538327407
同時也感謝:Hashchain 研發中騰訊區塊鍊團隊的童鞋們鼎力幫助和支援!
點我檢視HashChain
1、 環境準備
### 如果在 騰訊雲實驗室環境,不需要執行這一步
在安裝完Ubuntu後,需要保證apt source是國内的,不然如果是國外的話會很慢很慢的。具體做法是
1.1 請編輯原清單
執行指令:sudo vi /etc/apt/sources.list
複制
打開這個apt源清單,如果其中看到是http://us.xxxxxx之類的,那麼就是外國的,如果看到是http://cn.xxxxx之類的,那麼就不用換的。我的是美國的源,是以需要做一下批量的替換。在指令模式下,輸入:
執行指令: :%s/us./cn./g
複制
就可以把所有的us.改為cn.了。然後輸入:wq即可儲存退出。
1.2 權限問題
如果後面遇到權限問題,切換到root 賬戶
執行指令:sudo passwd
複制
修改設定自己的密碼,兩次,建議選擇123456
切換到root賬号
執行指令:su root
複制
更新源
執行指令:sudo apt-get update
複制
2、配置GO環境
2.1 下載下傳GO 并安裝
執行指令(下載下傳):wget https://studygolang.com/dl/golang/go1.9.linux-amd64.tar.gz
執行指令(解壓):sudo tar -C /usr/local -xzf go1.9.linux-amd64.tar.gz
複制
【注意:不要使用apt方式安裝go,apt的go版本太低了!】
2.2 配置go
- 2.1.1 編輯配置
執行指令: vim ~/.profile
複制
添加以下内容:
export PATH=$PATH:/usr/local/go/bin
export GOROOT=/usr/local/go
export GOPATH=$HOME/go
export PATH=$PATH:$HOME/go/bin
複制
編輯儲存并退出vi後(esc 鍵退出指令模式, wq即可儲存退出。記得把這些環境載入:
執行指令:source ~/.profile
複制
2.3 在根目錄下建立 go檔案夾
我們把go的目錄GOPATH設定為目前使用者的檔案夾下,是以記得建立go檔案夾
執行指令(跳轉到根目錄):cd ~
複制
執行指令(建立名稱為go的檔案夾):mkdir go
複制
3、遇到鎖的問題
3.1 遇到鎖問題這樣解決
指令模式出現如下提示:
Could not get lock /var/lib/dpkg/lock - open (11: Resource temporarily unavailable) E: Unable to lock the administration directory (/var/lib/dpkg/), is another process using it?
複制
解決方法:删除鎖定的檔案
執行指令:sudo rm /var/lib/dpkg/lock
複制
4、安裝docker
#### step 1: 安裝必要的一些系統工具
執行指令: sudo apt-get update
複制
#### step 2: 安裝GPG證書
執行指令:curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
複制
#### Step 3: 寫入軟體源資訊
執行指令:sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
複制
#### Step 4: 更新并安裝 Docker-CE
執行指令:sudo apt-get -y update
複制
執行指令:sudo apt-get -y install docker-ce
複制
#### step 5:檢視是否安裝完成,顯示目前的docker版本
執行指令:sudo docker version
複制
### 安裝完成後需要修改目前使用者(我使用的使用者叫ubuntu)權限:
執行指令:sudo usermod -aG docker ubuntu
複制
### 登出并重新登入,然後添加阿裡雲的Docker Hub鏡像
執行指令:sudo mkdir -p /etc/docker
複制
執行指令:sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://obou6wyb.mirror.aliyuncs.com"]
}
EOF
執行指令:sudo systemctl daemon-reload
執行指令:sudo systemctl restart docker
複制
5、 Docker-Compose的安裝
5.1 Docker-compose是支援通過模闆腳本批量建立Docker容器的一個元件。在安裝Docker-Compose之前,需要安裝Python-pip,運作腳本:
執行指令:sudo apt-get install python-pip
複制
5.2 然後是安裝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
複制
執行指令:sudo mv ~/docker-compose /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
複制
6、Fabric源碼下載下傳
6.1 github上clone 下載下傳源代碼
我們可以使用Git指令下載下傳源碼,首先需要建立對應的目錄,然後進入該目錄,Git下載下傳源碼:
執行指令:mkdir -p ~/go/src/github.com/hyperledger
執行指令:cd ~/go/src/github.com/hyperledger
執行指令:git clone https://github.com/hyperledger/fabric.git
複制
6.2 Fabric 切換到指定版本v1.0.0
由于Fabric一直在更新,所有我們并不需要最新最新的源碼,需要切換到v1.0.0版本的源碼即可:
執行指令:cd ~/go/src/github.com/hyperledger/fabric
執行指令:git checkout v1.0.0
複制
6.3 Fabric Docker鏡像的下載下傳
這個其實很簡單,因為我們已經設定了Docker Hub鏡像位址,是以下載下傳也會很快。官方檔案也提供了批量下載下傳的腳本。我們直接運作:
執行指令: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
複制
7 、編譯cryptogen
7.1 證書工具的使用
編譯生成 cryptogen之前我們需要安裝一個軟體包,否則編譯時會報錯
執行指令:sudo apt install libtool libltdl3-dev
複制
Fabric提供了專門編譯cryptogen的入口,我們隻需要運作以下指令即可:
執行指令:cd ~/go/src/github.com/hyperledger/fabric
複制
執行指令:make cryptogen
運作後系統傳回如下結果即代表編譯成功了
build/bin/cryptogen
CGO_CFLAGS=" " GOBIN=/home/studyzy/go/src/github.com/hyperledger/fabric/build/bin go install -tags "" -ldflags "-X github.com/hyperledger/fabric/common/tools/cryptogen/metadata.Version=1.0.0" github.com/hyperledger/fabric/common/tools/cryptogen
Binary available as build/bin/cryptogen
複制
ps:我們在build/bin檔案夾下就可以看到編譯出來的cryptogen程式。
8 、啟動Fabric網絡并完成ChainCode的測試
我們仍然停留在e2e_cli檔案夾,這裡提供了啟動、關閉Fabric網絡的自動化腳本。我們要啟動Fabric網絡,并自動運作Example02 ChainCode的測試,執行一個指令:
8.1 切換到root 使用者
執行指令: ./network_setup.sh up
複制
8.2 運作fabric 的example
我們仍然是以現在安裝好的Example02為例,在官方例子中,channel名字是mychannel,鍊碼的名字是mycc。我們首先進入CLI,我們重新打開一個指令行視窗,輸入:
執行指令:docker exec -it cli bash
複制
8.2.1 運作以下指令可以查詢a賬戶的餘額:
執行指令(docker環境):peer chaincode query -C mychannel -n mycc -c '{"Args":["query","a"]}'
複制
可以看到餘額是90:
8.2.2 然後,我們試一試把a賬戶的餘額再轉20元給b賬戶,運作指令:
執行指令(docker環境):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"]}'
複制
8.2.3 再次檢視賬戶
執行指令:peer chaincode query -C mychannel -n mycc -c '{"Args":["query","a"]}'
複制
可以看到餘額是:70
ps:如果要退出 docker 請使用指令:exit
複制
後續總結
第一步 開啟網絡(前提是環境已經部署完成,網絡狀态是關閉的)
跳轉指定檔案夾,執行指令:cd ~/go/src/github.com/hyperledger/fabric/examples/e2e_cli
啟動網絡,執行指令:./network_setup.sh up
複制
這個時候,關掉終端,重新開一個終端,網絡是存在的,正常的
第二步 進行業務操作
開啟docker網絡,執行指令:docker exec -it cli bash
複制
運作以下指令可以查詢a賬戶的餘額:
查詢賬戶餘額,執行指令:peer chaincode query -C mychannel -n mycc -c '{"Args":["query","a"]}'
複制
轉賬,執行指令:
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"]}'
複制
第三步退出
在docker中,可以退出,執行指令:exit
複制
關閉區塊鍊網絡,執行指令:./network_setup.sh down
複制
注意:網絡關閉,後面重新開啟,資料恢複初始