我们模拟现在需要添加一个新组织Org2MSP
- 新建一个文件夹用来存放Org2的配置文件
mkdir org2-artifacts
cd org2-artifacts
#创建配置文件configtx.yaml
vim configtx.yaml
#编辑文件内容如下
Organizations:
- &Org2
Name: Org2MSP
ID: Org2MSP
MSPDir: ../crypto-config/peerOrganizations/org2.example.com/msp
Policies:
Readers:
Type: Signature
Rule: "OR('Org2MSP.member')"
Writers:
Type: Signature
Rule: "OR('Org2MSP.member')"
Admins:
Type: Signature
Rule: "OR('Org2MSP.member')"
Endorsement:
Type: Signature
Rule: "OR('Org2MSP.member')"
AnchorPeers:
- Host: peer0.org2.example.com
Port: 7052
配置完成后如图
ddddd.png
生成Fabric配置JSON文件
cd ..
configtxgen -printOrg Org2MSP -configPath ./org2-artifacts -profile configtx.yaml > ./config/Org2MSP.json
这里输出路径./config/Org2MSP.json
需要映射到Fabric 的 cli 镜像里以下是我的项目路径 如图
这样的话在
docker exec -it cli bash
进入cli 容器,然后在容器里 应该能看到Org2MSP.json
文件
更新配置
以下操作都在cli 容器里执行
#设置通道名称
export CHANNEL_NAME=mychannel
#设置Order的TLS
export ORDERER_CA=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/tls/server.crt
#获取mychannel的配置区块
peer channel fetch config ./channel-artifacts/config_block.pb -o orderer.example.com:7050 -c $CHANNEL_NAME --tls --cafile $ORDERER_CA
#注意这里好像1.4版本 cli 没有安装 jq,需要安装以下jq ,2.0版本已经默认安装了 这个是操作json字符串的
#将配置区块文件转为json
configtxlator proto_decode --input ./channel-artifacts/config_block.pb --type common.Block | jq .data.data[0].payload.data.config > ./channel-artifacts/config.json
#jq会将Org2MSP.json加入到配置的json中
jq -s '.[0] * {"channel_group":{"groups":{"Application":{"groups": {"Org2MSP":.[1]}}}}}' ./channel-artifacts/config.json ./channel-artifacts/Org2MSP.json > ./channel-artifacts/modified_config.json
#转为pb
configtxlator proto_encode --input ./channel-artifacts/config.json --type common.Config --output ./channel-artifacts/config.pb
#转为pb
configtxlator proto_encode --input ./channel-artifacts/modified_config.json --type common.Config --output ./channel-artifacts/modified_config.pb
#计算pb之间的增量
configtxlator compute_update --channel_id $CHANNEL_NAME --original ./channel-artifacts/config.pb --updated ./channel-artifacts/modified_config.pb --output ./channel-artifacts/org_update.pb
#转为json
configtxlator proto_decode --input ./channel-artifacts/org_update.pb --type common.ConfigUpdate | jq . > ./channel-artifacts/org_update.json
#加入header信息
echo '{"payload":{"header":{"channel_header":{"channel_id":"mychannel", "type":2}},"data":{"config_update":'$(cat ./channel-artifacts/org_update.json)'}}}' | jq . > ./channel-artifacts/org_update_in_envelope.json
#转为pb
configtxlator proto_encode --input ./channel-artifacts/org_update_in_envelope.json --type common.Envelope --output ./channel-artifacts/org_update_in_envelope.pb
### 以上操作直接复制 执行就行 只是注意一下 导入和导出的 文件是否存在,命令不需要改
//如果重复签名会出现错误一定要注意,同时 如果联盟中存在多个组织,需要一半以上的组织同意 才能新加到组织上
## 组织org1签名
peer channel signconfigtx -f ./channel-artifacts/org_update_in_envelope.pb
//将签名后的配置文件org_update_in_envelope.pb上传 . update 表示签名后直接上传更新配置块
peer channel update -f ./channel-artifacts/org_update_in_envelope.pb -c $CHANNEL_NAME -o orderer.example.com:7050 --tls --cafile $ORDERER_CA
## 如果不报错 则表示 新组织 Org2MSP 已经进入到通道里了,下面就是切换到组织2进行安装链码操作了
#切换到org2
export CORE_PEER_LOCALMSPID="Org2MSP"
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:7052
#加入通道并安装链码
peer channel join -b mychannel.block
peer chaincode install -n mycc -v 1.0 -p github.com/chaincode/chaincode_example02/go/
#不需要实例化链码,因为已经组织1已经实例化过了 ,现在就可以 调用链码了
·····
网友评论