本系列文章:
目錄
1 前言
2 編譯生成 configtxgen 和 cryptogen
2.1 編譯生成 configtxgen
2.2 編譯生成 cryptogen
2.3 將工具加入到 PATH 環境變量
3 下載 fabric first-network 樣例
4 搭建並啓動區塊鏈網絡
4.1 創建證書和創世區塊
4.2 啓動網絡
4.3 腳本流程解析
4.3.1 啓動網絡並創建網絡節點
4.3.2 調用 script.sh 腳本文件
5 刪除網絡
1 前言
第一章九析首先帶你下載 fabric 源碼;接着根據源碼中的腳本下載 fabric 全部 docker 鏡像;然後運行了幾個基礎鏡像構建出一個簡單的區塊鏈網絡;最後在這個區塊鏈網絡上創建通道、MSP,初始化並安裝鏈碼,最後操作鏈碼的整個過程。建議讀者可以根據我的教程手把手操作感受一下。
第二章九析帶你輕鬆完爆了 GO 語言環境的搭建,目的是爲了編譯 fabric 世界中最重要的兩個工具 configtxgen 和 cryptogen,前者作用是創建創世區塊、建渠道,後者是爲了創建節點通信的證書。
本章我們將要繼續前行,誰讓我們的征途是星辰和海洋呢。本章九析將帶你繼續深入,完爆 fabric 提供的另外一個簡單樣例 first-network。因爲我堅定相信,如果要真正做到水乳交融,光靠神交是遠遠不夠的,你還需要持續的進入、深入,只有這樣你才能體會到其中的無盡美妙,才能爽到爆。
在這裏再聲明一下,區塊鏈難學之一在於名詞、術語比較多,很多人就是因爲術語的原因導致很難入門,我這裏的建議是你不用管術語,只是跟着我的操作進行即可。因爲在後續的教程中,你會自然而然從操作中理解這些術語。本人是軍人家庭,我清楚地記得新兵在剛入伍時總是會對命令不理解進而產生牴觸的心理,比如,爲什麼要負重跑,爲什麼突然要搞拉練等等,每到這個時候教官都只會淡淡說一句:“在執行中加深理解”。我覺得此話同樣適用區塊鏈的學習。
2 編譯生成 configtxgen 和 cryptogen
如果要編譯這 2 個 fabric 提供的工具,必須要先預先安裝好 GO 語言環境,如果你還沒有輕鬆完爆 GO,建議你回到第二章。
2.1 編譯生成 configtxgen
cd $GOPATH/src/github.com/hyperledger/fabric/common/configtx/tool/configtxgen/
go install --tags=nopkcs11
命令執行成功後,會在 $GOPATH/bin 目錄下生成 configtxgen:
2.2 編譯生成 cryptogen
cd $GOPATH/src/github.com/hyperledger/fabric/common/tools/cryptogen
go install --tags=nopkcs11
命令執行成功後,回在 $GOPATH/bin 目錄下生成 cryptogen:
2.3 將工具加入到 PATH 環境變量
export PATH=$PATH:$GOPATH/bin
3 下載 fabric first-network 樣例
下載地址如下。這裏說明如下,如果你是從本人的第一章開始閱讀,那裏下載的 fabric-sample 用例版本是 v1.1.0,經過驗證在 fabric v1.0.0 源碼下編譯生成的 configtxgen 和 cryptogen 工具下執行會報錯。因此這裏需要重新下載 fabric-sample v1.0.2 版本。
https://github.com/hyperledger/fabric-samples/releases/tag/v1.0.2
解壓:
tar -zxvf fabric-samples-1.0.2.tar.gz
解壓後截圖:
進入 fabric-sample-1.0.2/first-network 目錄,查看目錄結構如下:
下面簡單介紹一下相關文件和目錄的作用:
.env # 文件。存放環境變量
byfn.sh # 文件。整個樣例代碼的啓動腳本。 byfn(build your first network 簡稱)
configtx.yaml # 文件。該配置文件主要交給 fabric 提供的工具 configtxgen 使用,configtxgen 工具作用是生成創世區塊、生成或者配置通道(channel)
crypto-config.yaml # 文件。該配置文件主要交給 fabric 提供的工具 cryptogen 使用,cryptogen 工具作用是生成區塊鏈網絡各個節點通信的證書
docker-**.yaml # 文件。這 5 個配置文件作用是創建區塊鏈網絡
base # 目錄。存放 docker-compose 定義的一些公共服務
scripts # 目錄。該目錄提供腳本創建通道、加入通道、安裝鏈碼、初始化鏈碼、跟鏈碼交互等操作
channel-artifacts # 目錄。存儲啓動腳本執行完畢後創建的通道和創世區塊文件。
4 搭建並啓動區塊鏈網絡
搭建區塊鏈網絡的過程其實是很簡單的,就是 byfn.sh 腳本文件。
4.1 創建證書和創世區塊
在啓動區塊鏈網絡之前,啓動腳本首先要根據 configtx.yaml 和 crypto-config.yaml 文件創建創世區塊、通道配置和 peer、order 節點通信的數字證書。
./byfn.sh -m generate -c jiuxi-channel # -c 選項作用是創建名爲 jiuxi-channel 的通道
命令執行結果如下圖所示:
執行此命令後會多生出一個目錄 crypto-config 目錄,該目錄存放 order 節點和 peer 錨節點各種數字證書:
同時也會在 channel-artifacts 目錄下生成通道配置文件、創世區塊等:
4.2 啓動網絡
執行啓動腳本啓動網絡:
./byfn.sh -m up -c jiuxi-channel
腳本執行結果部分截圖如下,表明最終網絡啓動成功、節點添加成功、安裝並操作鏈碼成功等:
4.3 腳本流程解析
4.3.1 啓動網絡並創建網絡節點
腳本首先啓動網絡,並相繼創建網絡中的各個節點,執行結果會產生 6 個 docker 容器,如下圖紅框所示:
網絡中共有 1 個 order 節點、4 個 peer 節點從屬於 2 個不同的組織(org1 和 org2)、cli 客戶端節點(該節點作用是可以登錄到不同的 peer 節點執行一些操作,比如安裝鏈碼、實例化鏈碼、跟鏈碼交互等操作)。
4.3.2 調用 script.sh 腳本文件
在啓動網絡成功之後,便會執行 scripts 目錄下的 script.sh 腳本,該命令會執行一系列的子任務。
創建通道:
將所有 peer 節點加入到剛創建的通道中:
更新錨節點信息:
安裝鏈碼:
該樣例一共在 3 個 peer 節點安裝了相同的一段鏈碼(所謂鏈碼,就是運行在區塊鏈節點上的一段代碼。你可以反過來理解鏈碼,如果說區塊鏈上什麼邏輯都沒有,光有一條鏈有什麼價值,假如區塊鏈中有一個節點安裝了一段鏈碼,代碼邏輯爲打印 hello world,那麼客戶端 cli,就可以調用該區塊鏈上該節點上的這段鏈碼了):
實例化鏈碼(調用鏈碼的 init 方法):
操作鏈碼(執行查詢操作,查詢操作又觸發鏈碼的 invoke 方法):
5 刪除網絡
我知道有些人喜歡做事有頭有尾,既然生成了區塊鏈,那麼如何清除掉呢?執行如下命令銷燬整個區塊鏈、鏈碼以及鏈碼執行結果:
./byfn.sh -m down -c jiuxi-channel
命令直接結果部分截圖如下:
該命令執行軌跡爲強制停止並刪除樣例 docker 容器、刪除鏈碼 docker 鏡像(放心,並不會刪除 fabric 自身的 docker 鏡像)。你可以通過如下命令去檢查:
docker images # 查看鏡像信息
docker ps -a # 查看容器信息
自此,整個 first-network 樣例被輕鬆完爆。