(十)Fabric2.0-動態添加組織

總目錄:
(0) 如何利用區塊鏈保護知識產權
(一)HyperLedger Fabric 2.0-release測試網絡部署
(二)Fabric2.0 first-network 生成配置說明
(三)Fabric2.0啓動網絡腳本配置剖析
(四)Fabric2.0通道實踐
(五)Fabric2.0 智能合約實踐- 安裝以及定義智能合約
(六)Fabric2.0 智能合約實踐- 升級智能合約
(七)Fabric2.0智能合約實踐-設置背書策略
(八)Fabric2.0Java SDK實踐-合約交易
(九)Fabric2.0 通道實踐-更新通道配置
(十)Fabric2.0-動態添加組織
(十一) Fabric2.0-使用編輯器調試go智能合約
(十二)Fabric2.0-實現外部構建啓動合約
工具人大膽試探raft共識-你沒見過的raft算法解釋


Fabric2.0動態添加組織是很多朋友比較關注,我們從上一章更新通道配置的思路來看,動態添加組織實踐上也是通過修改區塊配置來實現,
接下來的操作基於first-network已部署好的網絡。

1. 新增org3證書配置

對於fabric網絡來說,要新增一個組織,首先是從證書開始,因爲證書就是fabric裏面的身份。
編輯證書配置org3-crypto.yaml (first-network/org3-artifacts)

PeerOrgs:
  # ---------------------------------------------------------------------------
  # Org3
  # ---------------------------------------------------------------------------
  - Name: Org3
    Domain: org3.example.com
    EnableNodeOUs: true
    Template:
      Count: 2
    Users:
      Count: 1

配置了Org3組織2個節點1個普通用戶User

執行以下命令,生成證書

 cd org3-artifacts/
 ../../bin/cryptogen generate --config=org3-crypto.yaml --output="../crypto-config"

執行完成後查看…/crypto-config/peerOrganizations目錄可以看到新增的組織證書目錄
在這裏插入圖片描述

2. 新增org3定義到區塊鏈

之前我們啓動的網絡的時候,在啓動前需要是創建創始區塊與通道配置,因此在爲了讓區塊鏈知道這個新來的組織,需要把組織的配置添加到區塊配置中
配置文件~\first-network\org3-artifacts\configtx.yaml
注意證書目錄必須對應正確的org3證書目錄

在這裏插入圖片描述
在first-network目錄控制檯輸入以下命令生成org3定義

export FABRIC_CFG_PATH=$PWD
 bin/configtxgen  -printOrg Org3MSP -configPath org3-artifacts > channel-artifacts/org3.json

在這裏插入圖片描述

3.啓動org3相關節點容器

容器配置 ~/first-network/docker-compose-org3.yaml

執行以下命令啓動

docker-compose -f docker-compose-org3.yaml up -d

docker ps -a |grep org3 查看狀態,啓動失敗了,查看日誌如下
在這裏插入圖片描述

Cannot run peer because error when setting up MSP of type bccsp from directory /etc/hyperledger/fabric/msp: could not load a valid signer certificate from directory /etc/hyperledger/fabric/msp/signcerts: stat /etc/hyperledger/fabric/msp/signcerts: no such file or directory

從錯誤來看就是找不到證書,這時候看看docker-compose-org3.yaml,目錄在org-artifacts下,我們之前是放在first-network/crypto-config下的,爲了方便原本cli切換環境變量。
在這裏插入圖片描述

知道目錄錯了修改爲正確目錄即可
在這裏插入圖片描述

刪除錯誤容器

 docker-compose -f docker-compose-org3.yaml rm

重新啓動

 docker-compose -f docker-compose-org3.yaml up -d

再次查看容器狀態成功啓動
在這裏插入圖片描述

看到還多啓動了一個Org3cli容器,是org3環境變量的cli,可以不起的,不過啓動了就啓動了

4. 更新通道配置

接下需要將org3添加到通道里面,步驟與上一章差不多。

Org3cli是默認org3配置的cli容器,不用白不用。

進入org3cli docker exec -it Org3cli bash

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=mychannel
echo $ORDERER_CA && echo $CHANNEL_NAME

4.1 獲取配置

將配置切換成org1,因爲當前org3不能獲取當前通道最新配置

    export CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/[email protected]/msp
    export CORE_PEER_ADDRESS=peer0.org1.example.com:7051
    export CORE_PEER_LOCALMSPID="Org1MSP"
   export  CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt

輸入以下命令獲取最新塊

peer channel fetch config config_block.pb -o orderer.example.com:7050 -c $CHANNEL_NAME --tls --cafile $ORDERER_CA

獲取到第8塊區塊
在這裏插入圖片描述

4.2 修改配置

將pb文件轉json

configtxlator proto_decode --input config_block.pb --type common.Block | jq .data.data[0].payload.data.config > config.json

將之前org3的配置org3.json添加到config.json
先把之前生成的org3.json放進去Org3cli容器

打開新的控制檯,宿主機輸入:

docker cp channel-artifacts/org3.json 6b9b3f2a22c4:/opt/gopath/src/github.com/hyperledger/fabric/peer

6b9b3f2a22c4: Org3cli容器id

Org3cli容器:

jq -s '.[0] * {"channel_group":{"groups":{"Application":{"groups": {"Org3MSP":.[1]}}}}}' config.json org3.json > modified_config.json

在這裏插入圖片描述

將config.json 跟modified_config.json 轉pb編碼

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

計算兩個pb差異

configtxlator compute_update --channel_id mychannel --original config.pb --updated modified_config.pb --output org3_update.pb

將更新的pb解析爲json

configtxlator proto_decode --input org3_update.pb --type common.ConfigUpdate | jq . > org3_update.json

現在我們有一個解碼後的更新文件org3_update.json,我們需要將其包裝在信封消息中。此步驟將使我們返回之前刪除的header字段。我們將這個文件命名爲org3_update_in_envelope.json:

echo '{"payload":{"header":{"channel_header":{"channel_id":"'$CHANNEL_NAME'", "type":2}},"data":{"config_update":'$(cat org3_update.json)'}}}' | jq . > org3_update_in_envelope.json

使用我們正確格式的JSON – org3_update_in_envelope.json我們將configtxlator最後一次使用該工具,並將其轉換爲Fabric所需的完整protobuf格式。我們將命名我們的最終更新對象org3_update_in_envelope.pb:

configtxlator proto_encode --input org3_update_in_envelope.json --type common.Envelope --output org3_update_in_envelope.pb

4.3 簽名並提交更新配置

添加組織需要目前通道大部分的組織Admin簽名,目前Org3cli的環境變量是org1

輸入以下命令

peer channel signconfigtx -f org3_update_in_envelope.pb

切換環境爲org2執行更新配置,因爲update也會爲當前組織簽名,所以不需要再org2簽名

export CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/users/[email protected]/msp
   export CORE_PEER_ADDRESS=peer0.org2.example.com:9051
   export CORE_PEER_LOCALMSPID="Org2MSP"
   export CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/peers/peer0.org2

更新命令:

peer channel update -f org3_update_in_envelope.pb -c $CHANNEL_NAME -o orderer.example.com:7050 --tls --cafile $ORDERER_CA

更新成功
在這裏插入圖片描述

5. org3加入通道

切換成org3環境變量

export CORE_PEER_LOCALMSPID=Org3MSP
export CORE_PEER_ADDRESS=peer0.org3.example.com:11051
export CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org3.example.com/peers/peer0.org3.example.com/tls/ca.crt
export CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org3.example.com/users/[email protected]/msp

獲取mychannel 0號塊創始塊

peer channel fetch 0 mychannel.block -o orderer.example.com:7050 -c $CHANNEL_NAME --tls --cafile $ORDERER_CA

在這裏插入圖片描述

該命令將創世塊返回到名爲的文件mychannel.block。現在,我們可以使用此塊將org3的節點加入通道。

輸入以下命令:

peer channel join -b mychannel.block

通過peer channel list 驗證

在這裏插入圖片描述

6. 總結

動態組織加入大概就是這樣,想必刪除組織也是相似的,洞悉fabric的配置原理就可以應對大部分fabric的應用需求。

推薦閱讀:(十一) Fabric2.0-使用編輯器調試go智能合約

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章