概述
背景
初始的时候 部署区块链在configtx.yaml 文件的Profiles: 策略配置中联盟 只配置了Org1 和Org2 当以全新组织Org3 去创建通道(当然这里是指org1 和 org2 不加入新通道) 会报错:提示org3 不是联盟成员 没有权限创建 此篇文章教会怎么解决问题
介绍
个人在这吐槽一下, 部署的创世区块configtx.yaml 和证书 crypto-config.yaml 文件以及生成创世区块和证书命令一定要备份保留 后期好多操作需要里面信息 一旦缺失–那只能我*
解决方法
Step1. 创建组织证书
请允许我在这里啰嗦一下创建证书 如果已经清楚 可以跳到第Step2
1.首先创建crypto-config.yaml文件
# Copyright IBM Corp. All Rights Reserved.
#
# SPDX-License-Identifier: Apache-2.0
#
# ---------------------------------------------------------------------------
PeerOrgs:
- Name: Org3
Domain: org3.example.com
EnableNodeOUs: false
CA:
Hostname: ca # implicitly ca.baiyun.guizhou
Country: CN
Province: Beijing
Locality: Beijing
OrganizationalUnit: Beijing prison
StreetAddress:
PostalCode:
Template:
Count: 10
Users:
Count: 10
2. 执行创建命令
生成的证书和json文件后期会用到
cryptogen generate --config=./org3-crypto.yaml
export FABRIC_CFG_PATH=$PWD && configtxgen -printOrg Org3MSP > ../channel-artifacts/org3.json
Step2. 获取系统配置块
此处会用到系统通道名称 啥是系统通道呢??
就是在执行创建创世区块命令的 -channelID 参数 比如下图这条命令 系统名称为:byfn-sys-channel
../bin/configtxgen -profile TwoOrgsOrdererGenesis -channelID byfn-sys-channel -outputBlock ./channel-artifacts/genesis.block
如果你忘记了 而恰巧是用官方部署没有改动 那 fabric1.4.3之前版本为 testchainid 1.4.3之后为byfn-sys-channel
如果是自己改动的 那很遗憾 目前我也不知道如何找回 如果有大神知道 希望可以指教
1. 准备
以下的操作都是在Admin身份的Cli容器中执行的
docker exec -it cli bash 进入容器中
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=byfn-sys-channel
2. 执行获取配置块命令
orderer变量 根据自己部署情况 而该
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
peer channel fetch config config_block.pb -o orderer.example.com:7050 -c $CHANNEL_NAME --tls --cafile $ORDERER_CA
执行命令之后显示最后显示下面两行代表成功 0这个数字只代表第几个块 如果数字不一样是正常的
2020-05-21 11:48:41.340 UTC [cli.common] readBlock -> INFO 045 Received block: 0
2020-05-21 11:48:41.340 UTC [channelCmd] fetch -> INFO 046 Retrieving last config block: 0
3. 具体对配置块操作
1). 解析配置块 获取配置信息
configtxlator proto_decode --input config_block.pb --type common.Block | jq .data.data[0].payload.data.config >config.json
2). 此处添加组织信息
此处Org3MSP根据自己需求的组织MSPID更改相对应名称 这里有注意地方 SampleConsortium是文章开头要记住地方 可能有改动的化 这里也需要改动
jq -s '.[0] * {"channel_group":{"groups":{"Consortiums":{"groups":{"SampleConsortium":{"groups":{"Org3MSP":.[1]}}}}}}}' config.json channel-artifacts/org3.json >modified_config.json
3). 将上面两步产生的 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
4). 计算两个pb文件差异 输出新的pb文件
configtxlator compute_update --channel_id $CHANNEL_NAME --original config.pb --updated modified_config.pb --output sys_Org3MSP_update.pb
5). 把上一步pb转json 为了封装信封使用
configtxlator proto_decode --input sys_Org3MSP_update.pb --type common.ConfigUpdate | jq . > sys_Org3MSP_update.json
6). 封装信封
echo '{"payload":{"header":{"channel_header":{"channel_id":"'$CHANNEL_NAME'", "type":2}},"data":{"config_update":'$(cat sys_Org3MSP_update.json)'}}}' | jq . >sys_Org3MSP_update_in_envelope.json
7). json 转pb 最后生成准备提交文件
configtxlator proto_encode --input sys_Org3MSP_update_in_envelope.json --type common.Envelope --output sys_Org3MSP_update_in_envelope.pb
Step3. 对pb文件进行签名
因为是系统通道 由orderert提交即可
由最后组织节点去提交,去提交就代表已经去签名 但这里为了保险期间防止环境变量出现更改问题 再做一次环境变量
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
提交命令
peer channel update -f sys_Org3MSP_update_in_envelope.pb -c $CHANNEL_NAME -o orderer.example.com:7050 --tls --cafile $ORDERER_CA
Step4. 验证
1. 提交之后返回结果如下 执行成功
2020-05-21 12:45:35.711 UTC [channelCmd] update -> INFO 04a Successfully submitted channel update
OK 至此已经操作完成 接下来可以启动节点,使用新组织节点cli 去执行创建通道 加入通道即可
最后 感谢同学支持,后期会考虑添加 新增联盟方法 如果我没有偷懒的话
最后
以上就是幽默雨为你收集整理的fabric新组织创建通道 如果新组织不在联盟内怎么办背景介绍解决方法的全部内容,希望文章能够帮你解决fabric新组织创建通道 如果新组织不在联盟内怎么办背景介绍解决方法所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复