本系列文章:
git
第一章:九析帶你完爆 fabric - 快速搭建區塊鏈github
第二章:九析帶你完爆 fabric - 快速搭建 GO 環境docker
目錄ide
1 前言工具
2 編譯生成 configtxgen 和 cryptogen學習
2.1 編譯生成 configtxgen區塊鏈
2.2 編譯生成 cryptogenui
2.3 將工具加入到 PATH 環境變量spa
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 樣例被輕鬆完爆。