fabric 系統(tǒng)通道添加新組織

系統(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)通道中去。

  1. 生成證書。此步驟用生成或者收集org3的證書,測(cè)試中可以用以下命令生成。Org3配置文件在first-network的子目錄org3-artifacts中。
   cd org3-artifacts
   cryptogen generate --config=./org3-crypto.yaml
  1. 將org3的詳情打印到j(luò)son文件中,這個(gè)文件會(huì)更新到channel的配置中(org3的策略,以及證書)
   export FABRIC_CFG_PATH=$PWD && configtxgen -printOrg Org3MSP > ../channel-artifacts/org3.json
  1. 進(jìn)入已經(jīng)啟動(dòng)的cli
   docker exec -it cli bash
  1. 把身份切換為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
  1. 設(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
  1. 獲取通道的最新配置塊。
   peer channel fetch config config_block.pb -o orderer.example.com:7050 -c $CHANNEL_NAME --tls --cafile $ORDERER_CA
  1. 將配置塊解碼為json文件。
   configtxlator proto_decode --input config_block.pb --type common.Block | jq .data.data[0].payload.data.config > config.json
  1. 添加org3的加密材料。
   jq -s '.[0] * {"channel_group":{"groups":{"Consortiums":{"groups":{"SampleConsortium":{"groups":{"Org3MSP":.[1]}}}}}}}' config.json channel-artifacts/org3.json >modified_config.json
  1. 分別將原來(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
  1. 計(jì)算出添加了org3后文件的增量。
    configtxlator compute_update --channel_id $CHANNEL_NAME --original config.pb --updated modified_config.pb --output org3_update.pb
  1. 把通過(guò)差別計(jì)算出來(lái)的塊解碼成json文件。
    configtxlator proto_decode --input org3_update.pb --type common.ConfigUpdate | jq . > org3_update.json
  1. 將上一步生成的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
  1. 將上一步的文件編碼成fabric的proto格式。
    configtxlator proto_encode --input org3_update_in_envelope.json --type common.Envelope --output org3_update_in_envelope.pb
  1. 發(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
  1. 完成以上步驟后,啟動(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)完成所有正常操作。


微信圖片_20190418195654.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容