主要配置文件:
1. crypto-config.yaml
Cryptogen工具使用該文件生成“密碼材料”,即Fabric網絡中各種實體(peer、order、ca)所需的證書及密鑰。crypto-config.yaml包含網絡拓撲結構定義,Cryptogen以其為基礎為組織(包括order)和屬於這些組織的組件(peer和ca)生成證書及密鑰。該配置文件中的“count”變量用來指定每個組織的對等點數量,文件的其余部分較容易理解。
cryptogen generate --config=./crypto-config.yaml #運行該工具后,這些證書將被放置在一個名為“crypto-config”的文件夾中。
2. configtx.yaml
configtx.yaml包含一個聯盟網絡(通道)的定義。該文件首先指定每個成員組織的MSP目錄的位置(order創世區塊中需要存儲成員組織的根證書)、組織的錨節點等。然后指定了一個聯盟(聯盟中可以創建多個通道)由哪些組織構成,以及order服務的相關配置(共識類型,區塊大小等)。此外該文件還規定了系統通道和普通通道的一些訪問控制策略。
configtxgen工具基於configtx.yaml配置文件創建四個工件:genesis.block,channel.tx,Org1MSPanchors.tx,Org2MSPanchors.tx。genesis.block為系統通道(由所有order節點維護)的創世區塊,后三者分別為創建通道,設置ORG1、ORG2的錨節點(錨節點為某組織對order可見的節點)的系統事務,Fabric的配置操作作為系統事務提交到系統通道中。
export FABRIC_CFG_PATH=$PWD #告訴configtxgen從哪里尋找configtx.yaml文件
configtxgen -profile SampleMultiNodeEtcdRaft -channelID byfn-sys-channel -outputBlock ./channel-artifacts/genesis.block #生成系統通道創世區塊genesis.block
export CHANNEL_NAME=mychannel #通過環境變量設定通道名稱
configtxgen -profile TwoOrgsChannel -outputCreateChannelTx ./channel-artifacts/channel.tx -channelID $CHANNEL_NAME #創建 通道配置 事務
configtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate ./channel-artifacts/Org1MSPanchors.tx -channelID $CHANNEL_NAME -asOrg Org1MSP #創建 更新組織Org1在該通道上的錨節點 的事務
configtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate ./channel-artifacts/Org2MSPanchors.tx -channelID $CHANNEL_NAME -asOrg Org2MSP #創建 更新組織Org2在該通道上的錨節點 的事務
生成的四個配置組件位於channel-artifacts目錄下
3. docker-compose-cli.yaml、docker-compose-etcdraft2.yaml、docker-compose-ca.yaml、docker-compose-couch.yaml等
這些yaml文件為docker compose使用的配置文件,用於批量管理容器。其內容主要包含容器所屬網絡的名稱、容器使用的鏡像、環境變量、啟動時執行的命令、和物理機端口及卷的映射關系等。first-network案例中,docker-compose-cli.yaml定義了一個order及四個peer節點,docker-compose-etcdraft2.yaml定義了其余四個order節點(order服務由五個節點組成),docker-compose-ca.yaml定義了證書頒發中心節點,docker-compose-couch則定義了couchdb數據庫節點(對應每個peer一個),first-network/base目錄下的兩個yaml文件為通用的基礎配置,可被其他yaml文件引用。
主要腳本:
1. byfn.sh
byfn.sh為first-network案例的關鍵腳本,該腳本包含generate,up,down,restart,upgrade五個功能模塊,generate生成所需的密碼材料(證書及密鑰,位於crypto-config目錄下)及配置組件(genesis.block,channel.tx,Org1MSPanchors.tx,Org2MSPanchors.tx,位於channel-artifacts目錄下),up基於yaml啟動Fabric網絡,down用於銷毀Fabric網絡(刪除generate生成的文件、停止運行的容器並刪除鏈碼鏡像),restart重啟Fabric網絡,upgrade用於Fabric網絡的版本升級。執行命令./byfn.sh -h可看到詳細的腳本使用幫助,其基本使用如下:
./byfn.sh generate -c mychannel #-c指定通道名稱,腳本默認通道名稱即為mychannel
./byfn.sh up -a -n -s couchdb #參數-a啟動證書頒發機構,-n不部署abstore鏈碼(腳本默認部署該鏈碼),-s使用couchdb數據庫而不是goleveldb
./byfn.sh down -c mychannel #銷毀網絡
腳本中的關鍵函數:
generate模塊:
① generateCerts() #使用cryptogen工具生成證書及密鑰,放於crypto-config目錄,還會調用./ccp-generate.sh為組織ORG1和ORG2生成CCP文件
② generateChannelArtifacts() #使用configtxgen工具生成order創世區塊,通道配置事務,錨節點更新事務
up模塊:
networkUp() #啟動Fabric網絡,若沒有執行generate則首先執行generate模塊,然后基於yaml文件啟動容器,最后進入cli容器執行scripts/script.sh腳本(該腳本用於端到端測試,內容包括創建並加入通道,錨節點更新,若./byfn.sh up沒有指定參數-n,則還會執行abstore鏈碼的打包、安裝、定義、提交、初始化、調用等操作)
down模塊:
① clearContainers() #刪除鏈碼容器
② removeUnwantedImages() #刪除鏈碼鏡像
③ networkDown() #根據yaml文件刪除peer、order、ca、couchdb容器,調用函數①②刪除鏈碼容器極其鏡像,刪除generate模塊創建的所有文件
restart模塊:
restart模塊先調用down模塊,再調用up模塊
upgrade模塊:
upgradeNetwork() #升級fabric網絡1.3.x to 1.4.x,只要是將容器更換為高版本鏡像
2. ccp-generate.sh
byfn.sh腳本中generateCerts()函數在使用cryptogen工具為組織生成證書后,調用./ccp-generate.sh為組織ORG1和ORG2生成CCP文件,生成的CCP文件有json和yaml兩種格式。CCP文件的用處還不太明確,貌似是SDK連接區塊鏈網絡時所需要的文件,后續更新。
3. script.sh
該腳本位於first-network/scripts目錄下。byfn.sh腳本中的networkUp() 函數在基於yaml文件啟動容器后,會進入cli容器執行scripts/script.sh腳本,該腳本主要用於端到端測試,內容包括創建並加入通道,錨節點更新,若./byfn.sh up沒有指定參數-n,則還會執行abstore鏈碼的打包、安裝、定義、提交、初始化、調用等操作
4. utils.sh
該腳本位於first-network/scripts目錄下。utils.sh腳本將一些通用操作封裝為了函數,如設置cli環境變量,創建、加入通道,更新錨節點,打包、安裝、查詢、定義、提交、調用鏈碼等。該腳本作為通用腳本被其他腳本(script.sh)調用。