最近在學習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)上關于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/fabric-contract-api-go@v1.0.0: 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/fabric-contract-api-go@v1.0.0: 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
安裝相關的依賴米奸。完成后我們按照合約流程依次啟動:
注冊管理員賬號:
sudo node enrollAdmin.js
注冊用戶:
sudo node registerUser.js
我們接下來,執(zhí)行一筆交易
sudo node invoke.js
查詢交易后的狀態(tài):
sudo node query.js
完成啦R缕痢u锷!至此狼忱,F(xiàn)abric的環(huán)境已經(jīng)搭建完成膨疏。大家可以在上面愉快的學習了一睁。
參考資料
最新超詳細的 Hyperledger Fabric2.2 環(huán)境搭建 部署