fabric1.2在原有fabric通道中创建加入一个新的组织

链接:
https://www.jianshu.com/p/dc128a34f280?utm_campaign=maleskine&utm_content=note&utm_medium=reader_share&utm_source=weixin

./byfn.sh down

./byfn.sh generate

./byfn.sh up

生成org3的证书信息

mkdir org3-artifacts

cd org3-artifacts

../bin/cryptogen generate --config=./org3-crypto.yaml

mkdir channel-artifacts

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

在order节点的服务器上将multipeer/crypto-config/ordererOrganizations目录复制到mutipeerOrg3/org3-artifacts/crypto-config/

进入容器

docker exec -it cli 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

获取当前channel配置

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

(docker容器中的peer目录下多了个config_block.pb文件。这个是当前网络的配置信息,将其复制到宿主机器上。)

exit
docker cp 0e28da785400:/opt/gopath/src/github.com/hyperledger/fabric/peer/config_block.pb ./

使用configtxlator将config.pb转换成可读的json文件

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

此时目录下多了一个config.json文件

将org3的配置信息加到config.json中,输出新文件为modified_config.json

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

此时目录下多了一个modified_config.json,config.json是最初包含org1和org2的信息,modified_config.json包含了三个org的信息。

将config.json转换为config.pb

../bin/configtxlator proto_encode --input config.json --type common.Config --output config.pb


此时目录下多了一个config.pb文件

将modified_config.json转换为modified_config.pb

../bin/configtxlator proto_encode --input modified_config.json --type common.Config --output modified_config.pb

此时目录下多了modified_config.pb文件

计算modified_config.json.pb和config.pb的差异输出到org3_update.pb

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

此时目录下多了一个org3_update.pb

将org3_update.pb转换成org3_update.json

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

此时目录下多了一个org3_update.json

将json提案文件转为二进制提案文件

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

此时目录下多了org3_update_in_envelope.json

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

此时目录下多了org3_update_in_envelope.pb这个文件是我们最终需要用来更新通道信息的文件。

签名并提交更新请求
将上一步得到的org3_update_in_envelope.pb复制到cli容器内

docker cp org3_update_in_envelope.pb 0e28da785400:/opt/gopath/src/github.com/hyperledger/fabric/peer/

docker exec -it cli bash
签名
peer channel signconfigtx -f org3_update_in_envelope.pb

导出org2环境变量

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.example.com/tls/ca.crt
export CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp
export CORE_PEER_ADDRESS=peer0.org2.example.com:7051

发送更新请求

peer channel update -f org3_update_in_envelope.pb -c mychannel -o orderer.example.com:7050 --tls --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem

返回到first-network即multipeer-network目录下

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

将mychannel.block从docker容器中复制到宿主机中


docker cp 0e28da785400:/opt/gopath/src/github.com/hyperledger/fabric/peer/mychannel.block ./

将mychannel.block复制到Org3cli容器中

docker cp mychannel.block 94cfdff7b2ce:/opt/gopath/src/github.com/hyperledger/fabric/peer/

peer channel join -b mychannel.block


peer chaincode install -n mycc -v 1.0 -l golang -p github.com/chaincode/chaincode_example02/go/

peer chaincode query -C mychannel -n mycc -c '{"Args":["query","a"]}'



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

世事慕竹

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值