美文网首页
动态添加组织

动态添加组织

作者: 冰冰大象 | 来源:发表于2020-11-20 13:57 被阅读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已经实例化过了 ,现在就可以 调用链码了
    ·····

    相关文章

      网友评论

          本文标题:动态添加组织

          本文链接:https://www.haomeiwen.com/subject/ddxdiktx.html