动态添加组织

2020-11-20  本文已影响0人  冰冰大象
我们模拟现在需要添加一个新组织Org2MSP
  1. 新建一个文件夹用来存放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 镜像里以下是我的项目路径 如图

bbb.png
这样的话在 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已经实例化过了 ,现在就可以 调用链码了
·····
上一篇下一篇

猜你喜欢

热点阅读