Hyperledger-fabric是區塊鏈中聯盟鏈的優秀實現,所以從今天開始也想學習下fabric,順便用一個系列將我學習的點滴記錄下來。
準備環境
注:本fabric實戰系列基于MacOS。
1.git
brew install git
2.curl
下載安裝最新版本的curl,macOS 本身已經安裝了curl
3.Docker
下載Docker-CE for Mac,安裝好后可以確認Docker和Docker Compose的版本:
? go docker --version
Docker version 18.03.1-ce, build 9ee9f40
? go docker-compose --version
docker-compose version 1.21.1, build 5a3f1a3
4.go
brew安裝go開發包,或者前往官網下載安裝包
brew install go
并在./bash_profile配置go環境變量:
// go安裝路徑
export GOROOT=/usr/local/go
// go工作路徑
export GOPATH=/Users/chaors/go
export GOBIN=$GOPATH/bin
建立fabric源碼路徑
// 進入go工作目錄創建hyperledger牡蠣
cd $GOPATH
mkdir -p src/github.com/hyperledger
// 進入該目錄,拉取fabric源代碼
cd $GOPATH/src/github.com/hyperledger
git clone https://github.com/hyperledger/fabric.git
5.Node & npm
// 安裝node
brew install node
// 查看node版本
? go node -v
v8.11.1
// 查看npm版本
? go npm -v
5.6.0
fabric Sample
上面我們就已經安裝了fabric需要的一些依賴環境,并將fabric拉取到了本地,進入fabric項目:
查看fabric版本,選擇穩定版本1.2.0
? go cd src/github.com/hyperledger/fabric
? fabric git:(cae2ad445) ? git tag
baseimage-v0.0.11
v0.6.0-preview
v0.6.1-preview
v1.0.0
v1.0.0-alpha
v1.0.0-alpha2
v1.0.0-beta
v1.0.0-rc1
v1.0.1
v1.0.2
v1.0.3
v1.0.4
v1.0.5
v1.0.6
v1.1.0
v1.1.0-alpha
v1.1.0-preview
v1.1.0-rc1
v1.1.1
v1.2.0
v1.2.0-rc1
? fabric git:(cae2ad445) ? git checkout v1.2.0
M examples/e2e_cli/docker-compose-e2e.yaml
M examples/e2e_cli/download-dockerimages.sh
HEAD is now at cae2ad445 Merge "Prepare release-1.2 branch for release" into release-1.2
? fabric git:(cae2ad445) ? git branch
* (HEAD detached at v1.2.0)
release-1.2
我們新建一個目錄,用于子存放下載的fabric Sample。
// 新建fabric_Sample目錄
? mkdir fabric_Sample
? cd fabric_Sample
? ls
// 拷貝fabric/scripts下的bootstrap.sh腳本
? cp ../fabric/scripts/bootstrap.sh bootstrap.sh
// 賦予腳本拷貝的可執行屬性
? chmod +x bootstrap.sh
在執行腳本前,為了使下載過程更快,我們需要配置下Docker加速器,我們可以利用DaoClound平臺來獲取Docker加速器。
首先,打開網址注冊一個賬號,然后登錄選擇加速器:
按上圖方式重啟Docker服務后執行腳本:
// 執行腳本
? sudo ./bootstrap.sh
成功執行后,會列出所有安裝的鏡像:
最后一步,添加環境變量:
export PATH=$Home/go/src/github.com/hyperledger/fabric_Sample/fabric-samples/bin:$PATH
fabric-samples目錄分析
目錄 | 作用 |
---|---|
chaincode | fabric示例鏈碼目錄 |
chaincode-docker-devmode | 鏈碼開發測試模式 測試模式下鏈碼存放目錄 |
config | 關于orderer和peer配置信息 |
config/configtx.yaml | 初始區塊及應用通道交易配置文件的參考 |
config/core.yaml | peer配置信息的參考 |
config/ orderer.yaml | orderer配置信息的參考 |
fabcar | 測試Node環境所在目錄,有一個小汽車的測試用例 |
fabric-ca | fabric基礎環境提供的一個簡單ca |
first-network | 與網絡相關的所有內容 |
fabric三大核心工具
1.根據指定的配置文件生成組織結構及身份證書的工具。
fabric-samples/bin/cryptogen
2.配置交易的一個工具,主要生成三種配置文件:
1)生成orderer初始區塊
2)生成應用通道交易配置文件
3)錨節點更新配置文件
fabric-samples/bin/cryptogen/configtxgen
3.在正在運行的網絡聯盟鏈中添加一個新的組織
fabric-samples/bin/cryptogen/configtxlator
網絡環境的啟動
自動化腳本byfn.sh
fabric提供了一個腳本來自動初始化并啟動網絡
// 查看腳本命令使用方法
./byfn.sh --help
// 1.生成相應的組織結構和身份證書,orderer初始區塊配置文件,應用通道交易配置文件,錨節點更新配置文件
./byfn.sh generate
// 2.啟動網絡
./byfn.sh up
// 2.關閉網絡
./byfn.sh down
手動啟動網絡
1.生成相應的組織結構和身份證書
我們知道可以借助cryptogen工具來生成相應的組織結構和身份證書。
// 顯示默認的配置文件模板
../bin/cryptogen showtemplate
我們查看默認的配置文件模板,主要內容有:
// Orderer組織節點的定義
OrdererOrgs:
- Name: Orderer
Domain: example.com
Specs:
- Hostname: orderer
// 對等組織節點的定義
PeerOrgs:
// 組織1
- Name: Org1
Domain: org1.example.com
EnableNodeOUs: false
Template:
// 節點數
Count: 1
Users:
// 用戶數
Count: 1
// 組織2
- Name: Org2
Domain: org2.example.com
EnableNodeOUs: false
Template:
Count: 1
Users:
Count: 1
我們需要修改該配置文件,來自定義實現我們的組織結構。由于網絡是在first-network目錄下啟動網絡的,我們發現該目錄下的crypto-config.yaml內容和上面默認配置文件相同。因此,我們可以通過修改并指定該文件為配置文件來實現目的。
假設我們在默認基礎上新增兩個組織:組織3和組織4,其組織結構與組織2相同
// 編輯配置文件
vi vi crypto-config.yaml
// i
// 末尾添加
- Name: Org3
Domain: org3.example.com
EnableNodeOUs: false
Template:
Count: 1
Users:
Count: 1
- Name: Org4
Domain: org4.example.com
EnableNodeOUs: false
Template:
Count: 1
Users:
Count: 1
// esc,:,wq!
然后指定該文件為配置文件生成組織結構。
? first-network git:(1745c99) ? ../bin/cryptogen generate --config crypto-config.yaml
org1.example.com
org2.example.com
org3.example.com
org4.example.com
這里,特別注意在編輯crypto-config.yaml文件時一定不要使用tab鍵縮進,必須用空格鍵。否則會報錯:
? first-network git:(1745c99) ? ../bin/cryptogen generate --config crypto-config.yaml
Error reading config: Error Unmarshaling YAML: yaml: line 95: found a tab character that violates indentation%
2.生成orserer創世區塊
使用configtxgen工具,同樣使用--help命令查看工具使用方法。
../bin/configtxgen --help
-chanelID 指定的通道ID(必須指定)
-profile (TwoOrgsOrdererGenesis)configtx.yaml配置文件profiles
-outputBlock 輸出的區塊地址,一般在channel-artifacts目錄下
完整的命令:
// 生成創世區塊
../bin/configtxgen -profile TwoOrgsOrdererGenesis -channelID mychannel -outputBlock ./channel-artifacts/genesis.block
// 查看發現生成成功
? first-network git:(1745c99) ? ll ./channel-artifacts
total 32
-rw-r--r-- 1 chaors staff 12K 7 24 23:50 genesis.block
3.生成應用通道配置文件
依舊使用configtxgen工具。
// 生成應用通道配置文件
../bin/configtxgen -profile TwoOrgsChannel -outputCreateChannelTx ./channel-artifacts/channel.tx -channelID mychanne
// 查看生成的文件
? first-network git:(1745c99) ? ll ./channel-artifacts
total 40
-rw-r--r-- 1 chaors staff 346B 7 25 00:05 channel.tx
-rw-r--r-- 1 chaors staff 12K 7 24 23:50 genesis.block
4.生成錨節點更新配置文件
../bin/configtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate ./channel-artifacts/org1MSPanchors.tx -channelID mychannel
? first-network git:(1745c99) ? ll ./channel-artifacts
total 48
-rw-r--r-- 1 chaors staff 346B 7 25 00:05 channel.tx
-rw-r--r-- 1 chaors staff 12K 7 24 23:50 genesis.block
-rw-r--r-- 1 chaors staff 284B 7 25 00:12 org1MSPanchors.tx
5.啟動網絡
這里需要使用docker-compose工具。
// -f:啟動網絡時的配置文件,它描述了應該有哪些容器被啟動
// -d:不顯示詳細的啟動過程
// up:啟動網絡
docker-compose -f docker-compose-cli.yaml up -d
// 關閉網絡
docker-compose -f docker-compose-cli.yaml down
.
.
.
.
互聯網顛覆世界,區塊鏈顛覆互聯網!
---------------------------------------------20180725 20:21