手動向fabric通道中添加組織Org3-fabric學習筆記(三)

向fabric網絡通道中添加組織Org3

(1)使用密鑰生成器cryptogen產生Org3的加密材料

Cryptogen generate –config=./org3-crypto.yaml

(2)使用交易配置工具configtxgen生成Org3對應的配置材料

export FABRIC_CFG_PATH=$PWD (用來告訴configtxgen 去哪兒找configtx.yaml 文件)

Configtxgen -printOrg Org3MSP > ../channel-artifacts/org3.json

(3)拷貝排序節點的 MSP 材料到 Org3 的 crypto-config 目錄下

Cp -r crypto-config/ordererOrganizations org3-artifacts/crypto-config/

(4)更新通道配置,首先設置ORDERER_CA和CHANNEL_NAME變量

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

(5)獲取通道mychannel最新的配置區塊

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

(6)用configtxlator將通道配置解碼爲JSON格式,裁剪所有的頭部、元數據、創建者簽名等

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

(7)使用jq工具追加Org3的配置定義org3.json,生成modified_config.json文件

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

CLI容器中目前包含兩個json文件config.json(包含Org1和Org2兩組織的配置文件)和modified_config.json(包含Org1,Org2,Org3總共3個組織的配置文件)。

(8)將config.json和modified_config.json編碼成config.pb和modified_config.pb格式

Configtxlator proto_encode –input config.json –type common.Config –output config.pb

Configtxlator proto_encode –input modified_json –type common.Config –output modified_json.pb

(9)計算兩個pb文件的差異,輸出新的pb文件,即org3_update.pb

Configtxlator compute_update –channel_id $CHANNEL_NAME –original config.pb –updated modified_config.pb –output org3_update.pb

(10)將org3_update.pb解碼成org3_update.json

Configtxlator proto_decode –input org3_update.pb –type common.ConfigUpdate | jq . > org3_update.json

(11)把之前裁剪掉的頭部信息還原回來,生成新文件org3_update_in_envelope.json

echo ‘{“payload”:{“header”:{“channel_header”:{“channel_id”:”mychannel”, “type”:2}},”data”:{“config_update”:’$(cat org3_update.json)’}}}’ | jq . > org3_update_in_envelope.json

(12)把org3_update_in_envelope.json轉換爲pb格式

Configtxlator proto_encode –input org3_update_in_envelope.json –type common.Envelope –output org3_update_in_envelope.pb

(13)分別配置Org1和Org2管理員簽名更新org3_update_in_envelope.pb

Peer channel signconfigtx -f org3_update_in_envelope.pb

切換到Org2MSP環境,然後執行

Peer channel signconfigtx -f org3_update_in_envelope.pb

(14)更新channel

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

(15)配置領導節點選舉(默認設置爲動態領導選舉)

新加入的節點是根據初始區塊啓動的,初始區塊是不包含通道配置更新中新加入的組織信息 的。因此新的節點無法利用 gossip 協議,因爲它們無法驗證從自己組織裏其他節點發送過 來的區塊,除非它們接收到將組織加入到通道的那個配置交易。新加入的節點必須有以下配 置之一才能從排序服務接收區塊:

1. 採用靜態領導者模式,將節點配置爲組織的領導者

CORE_PEER_GOSSIP_USELEADERELECTION=false

CORE_PEER_GOSSIP_ORGLEADER=true

2. 採用動態領導者選舉,配置節點採用領導選舉的方式:

CORE_PEER_GOSSIP_USELEADERELECTION=true

CORE_PEER_GOSSIP_ORGLEADER=false

(16)將org3加入通道channel-mychannel

1. 打開新的終端啓動Org3 docker compose:

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

2. 導出兩個關鍵變量

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

3. 向排序服務發送一個獲取 mychannel 初始區塊的請求。如果通道更新成功執行,排序服務會成功校驗這個請求中 Org3 的簽名。如果 Org3 沒有成功地添加到通 道配置中,排序服務會拒絕這個請求。

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

4. 將peer0將入到通道中

peer channel join -b mychannel.block

切換環境,把peer1加入到channel中

export CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org3.example.com/peers/peer1.org3.example.com/tls/ca.crt && export CORE_PEER_ADDRESS=peer1.org3.example.com:12051

peer channel join -b mychannel.block

 

(17)升級和調用鏈碼,升級背書策略以加入Org3

在Org3cli安裝:peer chaincode install -n mycc -v 2.0 -p github.com/chaincode/chaincode_example02/go/

在原始cli安裝:peer chaincode install -n mycc -v 2.0 -p github.com/chaincode/chaincode_example02/go/

在原始cli升級背書策略:peer chaincode upgrade -o orderer.example.com:7050 --tls $CORE_PEER_TLS_ENABLED --cafile $ORDERER_CA -C $CHANNEL_NAME -n mycc -v 2.0 -c '{"Args":["init","a","90","b","210"]}' -P "OR ('Org1MSP.peer','Org2MSP.peer','Org3MSP.peer')"

在Org3cli中查詢鏈碼:peer chaincode query -n mycc -C $CHANNEL_NAME -c '{"Args":["query","a"]}'

在Org3cli中調用鏈碼:peer chaincode invoke -o orderer.example.com:7050  --tls $CORE_PEER_TLS_ENABLED --cafile $ORDERER_CA -C $CHANNEL_NAME -n mycc -c '{"Args":["invoke","a","b","10"]}'

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