Ubuntu Server搭建Hyperledger Fabric 2.1學習環(huán)境
最近在學習Hyperledger Fabric,它是由 Linux 基金會發(fā)起創(chuàng)建的開源區(qū)塊鏈分布式賬本。

Hyperledger Fabric是一個開源區(qū)塊鏈實現(xiàn),開發(fā)環(huán)境建立在 VirtualBox 虛擬機上,部署環(huán)境可以自建網(wǎng)絡,也可以直接部署在 BlueMix 上,部署方式可傳統(tǒng)可 Docker 化,共識達成算法插件化,支持用 Go 和 JavaScript 開發(fā)智能合約,尤以企業(yè)級的安全機制和 membership 機制為特色。
今天來聊聊怎么搭建一個基于Ubuntu Server的Hyperledger Fabric吧。
01 基本環(huán)境配置
建議用虛擬機裝一個Ubuntu Server版本即可,不要裝圖形界面,那個太卡了。Ubuntu Server版本安裝的時候注意,選擇英文版本的,中文簡體安裝會出錯。

安裝好后記得換源成阿里云的,這里換的時候由于虛擬機上不支持復制黏貼,只能手動輸入一下啦:
deb?http://mirrors.aliyun.com/ubuntu/?xenial?main?restricted?universe?multiverse
deb?http://mirrors.aliyun.com/ubuntu/?xenial-security?main?restricted?universe?multiverse
deb?http://mirrors.aliyun.com/ubuntu/?xenial-updates?main?restricted?universe?multiverse
deb?http://mirrors.aliyun.com/ubuntu/?xenial-proposed?main?restricted?universe?multiverse
deb?http://mirrors.aliyun.com/ubuntu/?xenial-backports?main?restricted?universe?multiverse
deb-src?http://mirrors.aliyun.com/ubuntu/?xenial?main?restricted?universe?multiverse
deb-src?http://mirrors.aliyun.com/ubuntu/?xenial-security?main?restricted?universe?multiverse
deb-src?http://mirrors.aliyun.com/ubuntu/?xenial-updates?main?restricted?universe?multiverse
deb-src?http://mirrors.aliyun.com/ubuntu/?xenial-proposed?main?restricted?universe?multiverse
deb-src?http://mirrors.aliyun.com/ubuntu/?xenial-backports?main?restricted?universe?multiverse
換源后把下面的軟件裝上:
ssh git go node.js docker docker-compose
注意大部分只需要sudo apt-install即可安裝,go、docker這種百度一下就知道怎么裝了,就不展開講了。nodejs記得給升級到最新版本。
02 fabric環(huán)境搭建
現(xiàn)在網(wǎng)上關(guān)于fabric的教程大部分是基于1.4版本的,今天來演示下搭建2.1版本的Fabric環(huán)境進行學習。
2.1 下載fabric源碼
進入GO的目錄創(chuàng)建hyperledger文件夾:
mkdir?-p?$GOPATH/src/github.com/hyperledger
?
cd?$GOPATH/src/github.com/hyperledger/
然后下載fabric的源碼,注意這里用碼云Gitee的鏈接,GitHub的太慢了得下到明年去:
git?clone?https://gitee.com/mirrors/fabric.git

不知道為啥我這gitee也好慢啊。。。
將 fabric 切換至 2.1 版本:
cd?fabric/
?
git?branch?-a
?
git?checkout?release-2.1


記得加個sudo,沒有管理員權(quán)限啥都干不了。
2.2 下載fabric-samples源碼、fabric鏡像
cd?scripts/
?
sudo?./bootstrap.sh

然后就進入了漫長的等待了。fabric-samples是從GitHub上下載的,可能會比較慢。下載完成后會列出所有下載的docker鏡像。

2.3 網(wǎng)絡測試
上面的工作完成后,當前目錄多了一個fabric-samples文件夾,我們進去該目錄下的test-network目錄測試下搭建的環(huán)境是否成功:
cd?fabric-samples/
cd?test-network/
然后啟動我們的測試網(wǎng)絡:
sudo?./network.sh?up
記得加sudo保平安哦。開始了一堆代碼之后出現(xiàn):

說明創(chuàng)建成功了。
03 Fabcar測試
fabcar是一個小demo,我們這里運行它測試下看看。我們回到fabric-samples目錄下,然后進入/fabcar目錄中,先把網(wǎng)絡給清理一下,然后啟動:
sudo?./networkDown.sh
sudo?./startFabric.sh

可能存在的問題
問題1
當然了你可能會遇到問題,比如找不到go命令等,這是因為sudo命令會重置當前的環(huán)境變量,導致設置go找不到。
Error:?failed?to?normalize?chaincode?path:?failed?to?determine?module?root:?exec:?"go":?executable?file?not?found?in?$PATH
!!!!!!!!!!!!!!!?Chaincode?packaging?on?peer0.org1?has?failed?!!!!!!!!!!!!!!!!
根據(jù)網(wǎng)上解決sudo環(huán)境變量問題的方法,在自己的shell配置文件中如下設置
vim ~/.bashrc 添加如下
alias?sudo='sudo?env?PATH=$PATH?LD_LIBRARY_PATH=$LD_LIBRARY_PATH'

然后刷新下讓配置生效:
source?~/.bashrc
問題2
安裝golang fabric api依賴包的時候,長時間無響應,最后報如下錯誤:
go:?github.com/hyperledger/[email protected]:?Get?https://proxy.golang.org/github.com/hyperledger/fabric-contract-api-go/@v/v1.0.0.mod:?dial?tcp?172.217.27.145:443:?i/o?timeout?~/fabric-samples/test-network?Finished?vendoring?Go?dependencies?++?peer?lifecycle?chaincode?package?fabcar.tar.gz?--path?../chaincode/fabcar/go/?--lang?golang?--label?fabcar_1?++?res=1?++?set?+x?Error:?failed?to?normalize?chaincode?path:?'go?list'?failed?with:?go:?github.com/hyperledger/[email protected]:?Get?https://proxy.golang.org/github.com/hyperledger/fabric-contract-api-go/@v/v1.0.0.mod:?dial?tcp?172.217.27.145:443:?i/o?timeout:?exit?status?1?!!!!!!!!!!!!!!!?Chaincode?packaging?on?peer0.org1?has?failed?!!!!!!!!!!!!!!!!
ERROR?!!!?Deploying?chaincode?failed
解決辦法:
golang1.13.x 可以直接執(zhí)行:
go?env?-w?GO111MODULE=on
go?env?-w?GOPROXY=https://goproxy.cn,direct
finally,終于成功了:

04 SDK交互
在上一步執(zhí)行成功后,會輸出各個語言環(huán)境下的SDK交互實例,比如JavaScript是這樣的:
JavaScript:
??Start?by?changing?into?the?"javascript"?directory:
????cd?javascript
??Next,?install?all?required?packages:
????npm?install
??Then?run?the?following?applications?to?enroll?the?admin?user,?and?register?a?new?user
??called?appUser?which?will?be?used?by?the?other?applications?to?interact?with?the?deployed
??FabCar?contract:
????node?enrollAdmin
????node?registerUser
??You?can?run?the?invoke?application?as?follows.?By?default,?the?invoke?application?will
??create?a?new?car,?but?you?can?update?the?application?to?submit?other?transactions:
????node?invoke
??You?can?run?the?query?application?as?follows.?By?default,?the?query?application?will
??return?all?cars,?but?you?can?update?the?application?to?evaluate?other?transactions:
????node?query
可以選擇javascript,typescript,javago語言與網(wǎng)絡交互,這里用javascript試試。進入fabcar中的javascript目錄中,這里得切換到root用戶,我也不知道sudo為什么還存在權(quán)限問題,執(zhí)行:
cd?javascript/
su
npm?install

安裝相關(guān)的依賴。完成后我們按照合約流程依次啟動:
注冊管理員賬號:
sudo?node?enrollAdmin.js

注冊用戶:
sudo?node?registerUser.js

我們接下來,執(zhí)行一筆交易
sudo?node?invoke.js

查詢交易后的狀態(tài):
sudo?node?query.js

完成啦!!!至此,F(xiàn)abric的環(huán)境已經(jīng)搭建完成。大家可以在上面愉快的學習了。
參考資料
最新超詳細的 Hyperledger Fabric2.2 環(huán)境搭建部署
https://blog.csdn.net/shengsikandan/article/details/107656060
fabric2.1.0 打包chaincode 報錯
https://blog.csdn.net/qq_32247229/article/details/108860823
go 提示failed to normalize chaincode path
https://www.jason-z.com/post/165
ubuntu16.04下搭建fabric 1.4.3環(huán)境?
https://blog.csdn.net/Sun_Hui_/article/details/100928155
推薦閱讀:
干貨 | 學習算法,你需要掌握這些編程基礎(包含JAVA和C++)

