Hyperledger fabric 2.0(文档7.7 Adding an Org to a Channel )

1、 Setup the Environment

cd fabric-samples/test-network
./network.sh down
./network.sh up createChannel

2、Bring Org3 into the Channel with the Script

cd addOrg3 
./addOrg3.sh up

我们可以看到org3成功加入,因为在addOrg3.sh中 已经包含了加入的channel的所有执行代码。
在这里插入图片描述
接下来,我们自己将一步步的执行代码实现将org3加入到channel中。

3、Bring Org3 into the Channel Manually

首先将其关闭:

./addOrg3.sh down

再执行:

cd .. 
./network.sh up createChannel

现在我们就恢复到 刚创建了 mychannel 的状态中。

4、Generate the Org3 Crypto Material

cd addOrg3
../../bin/cryptogen generate --config=org3-crypto.yaml --output="../organizations"
export FABRIC_CFG_PATH=$PWD
../../bin/configtxgen -printOrg Org3MSP > ../organizations/peerOrganizations/org3.example.com/org3.json

准备了以下的材料:
在这里插入图片描述

5、 Bring up Org3 components

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

在这里插入图片描述

6、 Prepare the CLI Environment

docker exec -it Org3cli bash

进入到ORG3CLI容器中:
设置orderer TLS certificate 和 the channel name的环境变量

export ORDERER_CA=/opt/gopath/src/github.com/hyperledger/fabric/peer/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem
export CHANNEL_NAME=mychannel

查看一下环境变量设置是否正确:

 echo $ORDERER_CA && echo $CHANNEL_NAME

在这里插入图片描述

7、Fetch the Configuration

仍然是在**#bash**命令行下进行:
因为ORG3目前还不是mychannel中的成员,所以它不能fetch the channel config block,但是ORG1已经在mychannel中了,并且是admin身份。
设置ORG1的环境变量:

export CORE_PEER_LOCALMSPID="Org1MSP"
export CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt
export CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/organizations/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp 
export CORE_PEER_ADDRESS=peer0.org1.example.com:7051

查看当前最新配置块信息:

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

在这里插入图片描述这里的信息告诉我们,检索到的最新配置块是 ,2号块,因为再执行 ./network.sh时已经 进行了 ORG1和 ORG2 的 anchor peer update 设置。
在这里插入图片描述

8、 Convert the Configuration to JSON and Trim It Down

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

9、Add the Org3 Crypto Material

jq -s '.[0] * {"channel_group":{"groups":{"Application":{"groups": {"Org3MSP":.[1]}}}}}' config.json ./organizations/peerOrganizations/org3.example.com/org3.json > 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
configtxlator compute_update --channel_id $CHANNEL_NAME --original config.pb --updated modified_config.pb --output org3_update.pb
configtxlator proto_decode --input org3_update.pb --type common.ConfigUpdate | jq . > org3_update.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
configtxlator proto_encode --input org3_update_in_envelope.json --type common.Envelope --output org3_update_in_envelope.pb
peer channel signconfigtx -f org3_update_in_envelope.pb

在这里插入图片描述

10、Sign and Submit the Config Update

peer channel signconfigtx -f org3_update_in_envelope.pb

将cli环境设置为ORG2:

export CORE_PEER_LOCALMSPID="Org2MSP" 
export CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt 
export CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/organizations/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp 
export CORE_PEER_ADDRESS=peer0.org2.example.com:9051
peer channel update -f org3_update_in_envelope.pb -c $CHANNEL_NAME -o orderer.example.com:7050 --tls --cafile $ORDERER_CA

在这里插入图片描述
新打开一个终端,查看org1的日志:

docker logs -f peer0.org1.example.com

11、Join Org3 to the Channel

export CORE_PEER_LOCALMSPID="Org3MSP" 
export CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/organizations/peerOrganizations/org3.example.com/peers/peer0.org3.example.com/tls/ca.crt 
export CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/organizations/peerOrganizations/org3.example.com/users/Admin@org3.example.com/msp 
export CORE_PEER_ADDRESS=peer0.org3.example.com:11051
peer channel fetch 0 mychannel.block -o orderer.example.com:7050 -c $CHANNEL_NAME --tls --cafile $ORDERER_CA

在这里插入图片描述

peer channel join -b mychannel.block

在这里插入图片描述

12、 Configuring Leader Election

在这里插入图片描述

在这里推荐设置为动态:

CORE_PEER_GOSSIP_USELEADERELECTION=true 
CORE_PEER_GOSSIP_ORGLEADER=false

这个界面先不要关,后面还有用!!!

13、Install, define, and invoke chaincode

新打开一个终端:

cd fabric-samples/test-network 
./network.sh deployCC
export PATH=${PWD}/../bin:$PATH 
export FABRIC_CFG_PATH=$PWD/../config/ 
export CORE_PEER_TLS_ENABLED=true 
export CORE_PEER_LOCALMSPID="Org3MSP"
export CORE_PEER_TLS_ROOTCERT_FILE=${PWD}/organizations/peerOrganizations/org3.example.com/peers/peer0.org3.example.com/tls/ca.crt 
export CORE_PEER_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org3.example.com/users/Admin@org3.example.com/msp 
export CORE_PEER_ADDRESS=localhost:11051
peer lifecycle chaincode package fabcar.tar.gz --path ../chaincode/fabcar/go/ --lang golang --label fabcar_1
peer lifecycle chaincode install fabcar.tar.gz
peer lifecycle chaincode queryinstalled

在这里插入图片描述

export CC_PACKAGE_ID=fabcar_1:e3195fe62016af107318d35802407deca79c24ff3fe0749301b1964df201be03

✨注意:这里的PACKAGE_ID每个人都不一样!

peer lifecycle chaincode approveformyorg -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --channelID mychannel --name fabcar --version 1 --init-required --package-id $CC_PACKAGE_ID --sequence 1 --tls true --cafile ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem
peer lifecycle chaincode querycommitted --channelID mychannel --name fabcar --cafile ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem

在这里插入图片描述

peer chaincode query -C mychannel -n fabcar -c '{"Args":["queryAllCars"]}'

在这里插入图片描述

peer chaincode invoke -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --tls true --cafile ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C mychannel -n fabcar --peerAddresses localhost:7051 --tlsRootCertFiles ${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt --peerAddresses localhost:11051 --tlsRootCertFiles ${PWD}/organizations/peerOrganizations/org3.example.com/peers/peer0.org3.example.com/tls/ca.crt -c '{"function":"createCar","Args":["CAR11","Honda","Accord","Black","Tom"]}'
peer chaincode query -C mychannel -n fabcar -c '{"Args":["queryCar","CAR11"]}'

在这里插入图片描述

14、 Updating the Channel Config to include an Org3 Anchor Peer (Optional)

docker exec -it Org3cli bash
export ORDERER_CA=/opt/gopath/src/github.com/hyperledger/fabric/peer/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem 
export CHANNEL_NAME=mychannel
peer channel fetch config config_block.pb -o orderer.example.com:7050 -c $CHANNEL_NAME --tls --cafile $ORDERER_CA
configtxlator proto_decode --input config_block.pb --type common.Block | jq .data.data[0].payload.data.config > config.json
 jq '.channel_group.groups.Application.groups.Org3MSP.values += {"AnchorPeers":{"mod_policy": "Admins","value":{"anchor_peers": [{"host": "peer0.org3.example.com","port": 11051}]},"version": "0"}}' config.json > modified_anchor_config.json
configtxlator proto_encode --input config.json --type common.Config --output config.pb
configtxlator proto_encode --input modified_anchor_config.json --type common.Config --output modified_anchor_config.pb
configtxlator compute_update --channel_id $CHANNEL_NAME --original config.pb --updated modified_anchor_config.pb --output anchor_update.pb
configtxlator proto_decode --input anchor_update.pb --type common.ConfigUpdate | jq . > anchor_update.json
echo '{"payload":{"header":{"channel_header":{"channel_id":"'$CHANNEL_NAME'", "type":2}},"data":{"config_update":'$(cat anchor_update.json)'}}}' | jq . > anchor_update_in_envelope.json
configtxlator proto_encode --input anchor_update_in_envelope.json --type common.Envelope --output anchor_update_in_envelope.pb
export CORE_PEER_LOCALMSPID="Org3MSP" 
export CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/organizations/peerOrganizations/org3.example.com/peers/peer0.org3.example.com/tls/ca.crt 
export CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/organizations/peerOrganizations/org3.example.com/users/Admin@org3.example.com/msp 
export CORE_PEER_ADDRESS=peer0.org3.example.com:11051
peer channel update -f anchor_update_in_envelope.pb -c $CHANNEL_NAME -o orderer.example.com:7050 --tls --cafile $ORDERER_CA

在这里插入图片描述

🆗!!! 7.7完结~~~
马上要开学了,加油!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值