Published on

Fabric 动态增删组织

Authors

新增组织到通道应用层级(channel_group --> groups --> Application --> groups)

加入系统(orderer)通道,步骤是一样的,只是channel名字和user,签名人(使用orderer的admin签名)不一样

  • 证书配置相关:

  1. 更改configtx.yaml和crypto-config.yaml,增加新组织相关信息 在configtx.yaml,普通通道配置;联盟配置中,增加新组织信息,并输出新组织的信息
configtxgen -printOrg newOrgMSP > newOrg.json

在crypto-config.yaml 中增加新组织的结构 2. 用工具生成新组织的证书信息,追加到crypto-config目录中

cryptogen extend --config=crypto-config.yaml --input=crypto-config
  • 通道交易相关:

  1. 获取当前channel配置的pb文件
peer channel fetch config channelconfig.pb -o orderer1.example.com:7050 -c $CHANNEL_NAME --tls --cafile ca.pem

2.解码成json文件

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

3.将之前的newOrg.json与channelconfig.json追加合并,生成临时文件

jq -s '.[0] * {"channel_group":{"groups":{"Application":{"groups": {"newOrgMSP":.[1]}}}}}' channelconfig.json ./channel-artifacts/newOrg.json > channelconfig_new.json

4.把更新前后的channelconfig 编码成二进制pb文件

configtxlator proto_encode --input channelconfig.json --type common.Config > channelconfig.pb

configtxlator proto_encode --input channelconfig_new.json --type common.Config > channelconfig_new.pb
  1. 计算新老pb的差异,并得到升级pb文件
configtxlator compute_update --channel_id mychannel --original channelconfig.pb --updated channelconfig_new.pb > channel_update.pb
  1. 解码升级pb为json文件
configtxlator proto_decode --input channel_update.pb  --type common.ConfigUpdate > channel_update.json

7.封装成envelop.json,再编码成pb格式

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

configtxlator proto_encode --input channel_update_envelope.json --type common.Envelope > channel_update_envelope.pb
  1. 对交易pb进行签名 签名要求跟configtx中的通道Policy策略有关
Channel: &ChannelDefaults

    Policies:

        Readers:
            Type: ImplicitMeta
            Rule: "ANY Readers"

        Writers:
            Type: ImplicitMeta
            Rule: "ANY Writers"

        Admins:
            Type: ImplicitMeta
            Rule: "MAJORITY Admins"

    Capabilities:
        <<: *ChannelCapabilities
peer channel signconfigtx -f channel_update_envelope.pb

9.更新通道

peer channel update -f channel_update_envelope.pb -c mychannel -o orderer.exeample.com:7050 --tls true --cafile $ORDERER_CA

组织pb json格式配置,请查看文章, fabric 通道-config文件

新增组织到排序服务(channel_group --> groups --> Orderer --> groups)

对通道配置pb转出的json修改,将之前生成的新组织json文件,放入groups下。 调用上面的更新通道命令

新增组织到联盟(channel_group --> groups --> Consortiums --> "联盟名字"(默认SampleConsortium) --> groups)

这个操作,只有系统通道的配置才有。对系统通道配置pb转出的json修改,将之前生成的新组织的json放入groups下。