- Published on
Fabric 动态增删组织
- Authors
- Name
- JiGu
- @crypto20x
新增组织到通道应用层级(channel_group --> groups --> Application --> groups)
加入系统(orderer)通道,步骤是一样的,只是channel名字和user,签名人(使用orderer的admin签名)不一样
证书配置相关:
- 更改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
通道交易相关:
- 获取当前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
- 计算新老pb的差异,并得到升级pb文件
configtxlator compute_update --channel_id mychannel --original channelconfig.pb --updated channelconfig_new.pb > channel_update.pb
- 解码升级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
- 对交易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下。