Fabric动态更新出块策略

Fabric中更新出块策略主要分为三步:1.获取通道配置信息;2.修改配置;3.应用和提交修改。

一、获取通道配置信息

  1. 进入peer节点的cli容器 docker exec -it $cli_name bash
  2. 获取通道配置 peer channel fetch config config_block.pb -o $ORDERER_CONTAINER -c mychannel --tls --cafile $TLS_ROOT_CA config_block.pb为获取的文件;orderer容器要加端口号;TLS_ROOT_CA必须是orderer节点的。
  3. 将获取的文件转换为json格式configtxlator proto_decode --input config_block.pb --type common.Block --output config_block.json
  4. 简化文件内容,输出为config.json jq .data.data[0].payload.data.config config_block.json > config.json
    二、修改配置
    拷贝config.json为modified_config.json修改,便于比较
    在这里插入图片描述
  5. 在这里插入图片描述
    三、应用和提交修改

1.将config.json和modified_config.json恢复为pb格式,并比较两者测差别:config_update.pb

configtxlator proto_encode --input config.json --type common.Config --output config.pb
configtxlator proto_encode --input modified_config.json --type common.Config --output modified_config.pb
configtxlator compute_update --channel_id mychannel --original config.pb --updated modified_config.pb --output config_update.pb
  1. 将差异应用与配置configtxlator proto_decode --input config_update.pb --type common.ConfigUpdate --output config_update.json
  2. 将差异配置重新编码
    echo '{"payload":{"header":{"channel_header":{"channel_id":"mychannel", "type":2}},"data":{"config_update":'$(cat config_update.json)'}}}' | jq . > config_update_in_envelope.json
    configtxlator proto_encode --input config_update_in_envelope.json --type common.Envelope --output config_update_in_envelope.pb
  3. 提交配置(需要切换环境变量)此处是重点,取配置信息时需要使用对等节点的身份,更新配置时需要使用排序节点的身份。
    CORE_PEER_LOCALMSPID=OrdererMSP
     CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/users/Admin@example.com/msp/(根据自己的实际配置)
    提交peer channel update -f config_update_in_envelope.pb -c mychannel -o $ORDERER_CONTAINER --tls true --cafile $TLS_ROOT_CA
    在这里插入图片描述
    更新成功!
posted @ 2022-07-13 18:11  jiftle  阅读(180)  评论(0编辑  收藏  举报