系統(tǒng)通道添加新組織
此手冊(cè)作為 Building Your First Network (BYFN)的擴(kuò)展指導(dǎo)。此手冊(cè)將指導(dǎo)如何在已運(yùn)行的系統(tǒng)中,將新的組織添加到系統(tǒng)通道中。教程已經(jīng)在fabric1.4和fabric2.0 alpha版本中進(jìn)行過(guò)驗(yàn)證。開始此手冊(cè)前,建議先對(duì)BYFN進(jìn)行實(shí)踐,并且熟悉。
請(qǐng)確保確保byfn.sh腳本可以正常運(yùn)行不出錯(cuò),把相關(guān)工具(cryptogen,configtxgen)加入到PATH環(huán)境變量中。
搭建測(cè)試環(huán)境
執(zhí)行的的操作將在你本地克隆的fabric-samples倉(cāng)庫(kù)目錄下運(yùn)行,將當(dāng)前目錄切換為為fabric-samples的子目錄first-network。
首先使用byfn.sh腳本進(jìn)行清理。下面的命令將會(huì)清理掉所有相關(guān)的docker容器和之前生成的配置文件。清理之前的fabric網(wǎng)絡(luò)不是必須的,執(zhí)行這一步是為了確保當(dāng)前的fabric網(wǎng)絡(luò)狀態(tài)跟教程中的測(cè)試環(huán)境一致,以避免未知錯(cuò)誤的發(fā)生。
首先,執(zhí)行以下命令來(lái)進(jìn)行清理。
./byfn.sh down
然后,生成默認(rèn)的配置文件
./byfn.sh generate
最后,啟動(dòng)網(wǎng)絡(luò)
./byfn.sh up
完成以上步驟后,測(cè)試環(huán)境搭建完成了。現(xiàn)在的fabric網(wǎng)絡(luò)中有兩個(gè)組織,Org1和Org2。下面將介紹如何在這個(gè)運(yùn)行的網(wǎng)絡(luò)中把Org3加入到系統(tǒng)通道中去。
- 生成證書。此步驟用生成或者收集org3的證書,測(cè)試中可以用以下命令生成。Org3配置文件在first-network的子目錄org3-artifacts中。
cd org3-artifacts
cryptogen generate --config=./org3-crypto.yaml
- 將org3的詳情打印到j(luò)son文件中,這個(gè)文件會(huì)更新到channel的配置中(org3的策略,以及證書)
export FABRIC_CFG_PATH=$PWD && configtxgen -printOrg Org3MSP > ../channel-artifacts/org3.json
- 進(jìn)入已經(jīng)啟動(dòng)的cli
docker exec -it cli bash
- 把身份切換為orderer的admin。因?yàn)樵谀J(rèn)配置中,要有orderer的管理員身份有更新系統(tǒng)鏈配置的權(quán)限。
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
- 設(shè)置環(huán)境變量,設(shè)置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
- 分別將原來(lái)的config.json和增加了org3的modified_config.json編碼成區(qū)塊。
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
- 計(jì)算出添加了org3后文件的增量。
configtxlator compute_update --channel_id $CHANNEL_NAME --original config.pb --updated modified_config.pb --output org3_update.pb
- 把通過(guò)差別計(jì)算出來(lái)的塊解碼成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
- 發(fā)送update請(qǐng)求。
peer channel update -f org3_update_in_envelope.pb -c $CHANNEL_NAME -o orderer.example.com:7050 --tls --cafile $ORDERER_CA
- 完成以上步驟后,啟動(dòng)org3(可以調(diào)用腳本統(tǒng)一啟動(dòng)org3所有peer,也可以各個(gè)peer自己?jiǎn)?dòng))。
docker-compose -f docker-compose-org3.yaml up -d
至此,org3完成了加入系統(tǒng)通道的整個(gè)流程,org3可以在系統(tǒng)內(nèi)完成所有正常操作。
