系統通道添加新組織
此手冊作為 Building Your First Network (BYFN)的擴展指導。此手冊將指導如何在已運行的系統中,將新的組織添加到系統通道中。教程已經在fabric1.4和fabric2.0 alpha版本中進行過驗證。開始此手冊前,建議先對BYFN進行實踐,并且熟悉。
請確保確保byfn.sh腳本可以正常運行不出錯,把相關工具(cryptogen,configtxgen)加入到PATH環境變量中。
搭建測試環境
執行的的操作將在你本地克隆的fabric-samples倉庫目錄下運行,將當前目錄切換為為fabric-samples的子目錄first-network。
首先使用byfn.sh腳本進行清理。下面的命令將會清理掉所有相關的docker容器和之前生成的配置文件。清理之前的fabric網絡不是必須的,執行這一步是為了確保當前的fabric網絡狀態跟教程中的測試環境一致,以避免未知錯誤的發生。
首先,執行以下命令來進行清理。
./byfn.sh down
然后,生成默認的配置文件
./byfn.sh generate
最后,啟動網絡
./byfn.sh up
完成以上步驟后,測試環境搭建完成了。現在的fabric網絡中有兩個組織,Org1和Org2。下面將介紹如何在這個運行的網絡中把Org3加入到系統通道中去。
- 生成證書。此步驟用生成或者收集org3的證書,測試中可以用以下命令生成。Org3配置文件在first-network的子目錄org3-artifacts中。
cd org3-artifacts
cryptogen generate --config=./org3-crypto.yaml
- 將org3的詳情打印到json文件中,這個文件會更新到channel的配置中(org3的策略,以及證書)
export FABRIC_CFG_PATH=$PWD && configtxgen -printOrg Org3MSP > ../channel-artifacts/org3.json
- 進入已經啟動的cli
docker exec -it cli bash
- 把身份切換為orderer的admin。因為在默認配置中,要有orderer的管理員身份有更新系統鏈配置的權限。
export CORE_PEER_LOCALMSPID=OrdererMSP
export CORE_PEER_ADDRESS=orderer.example.com:7050
export CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/tls/ca.crt
export CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/users/Admin@example.com/msp
- 設置環境變量,設置orderer的ca路徑和通道名。
export ORDERER_CA=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem
export CHANNEL_NAME=byfn-sys-channel
- 獲取通道的最新配置塊。
peer channel fetch config config_block.pb -o orderer.example.com:7050 -c $CHANNEL_NAME --tls --cafile $ORDERER_CA
- 將配置塊解碼為json文件。
configtxlator proto_decode --input config_block.pb --type common.Block | jq .data.data[0].payload.data.config > config.json
- 添加org3的加密材料。
jq -s '.[0] * {"channel_group":{"groups":{"Consortiums":{"groups":{"SampleConsortium":{"groups":{"Org3MSP":.[1]}}}}}}}' config.json channel-artifacts/org3.json >modified_config.json
- 分別將原來的config.json和增加了org3的modified_config.json編碼成區塊。
configtxlator proto_encode --input config.json --type common.Config --output config.pb
configtxlator proto_encode --input modified_config.json --type common.Config --output modified_config.pb
- 計算出添加了org3后文件的增量。
configtxlator compute_update --channel_id $CHANNEL_NAME --original config.pb --updated modified_config.pb --output org3_update.pb
- 把通過差別計算出來的塊解碼成json文件。
configtxlator proto_decode --input org3_update.pb --type common.ConfigUpdate | jq . > org3_update.json
- 將上一步生成的json文件封裝成envelope格式。
echo '{"payload":{"header":{"channel_header":{"channel_id":"byfn-sys-channel","type":2}},"data":{"config_update":'$(cat org3_update.json)'}}}' | jq . > org3_update_in_envelope.json
- 將上一步的文件編碼成fabric的proto格式。
configtxlator proto_encode --input org3_update_in_envelope.json --type common.Envelope --output org3_update_in_envelope.pb
- 發送update請求。
peer channel update -f org3_update_in_envelope.pb -c $CHANNEL_NAME -o orderer.example.com:7050 --tls --cafile $ORDERER_CA
- 完成以上步驟后,啟動org3(可以調用腳本統一啟動org3所有peer,也可以各個peer自己啟動)。
docker-compose -f docker-compose-org3.yaml up -d
至此,org3完成了加入系統通道的整個流程,org3可以在系統內完成所有正常操作。
微信圖片_20190418195654.png