原文在这里。
1. 获取通道配置
peer channel fetch config config_block.pb -o $ORDERER_CONTAINER -c $CH_NAME --tls --cafile $TLS_ROOT_CA
上述命令需要在peer容器中执行
这一步得到对应通道的protobuf格式的通道配置。protobuf格式的配置文件并不适合阅读,可以使用官方提供的configtxlator来转换成JSON格式的:
configtxlator proto_decode --input config_block.pb --type common.Block --output config_block.json
排除不必要的元数据:
jq .data.data[0].payload.data.config config_block.json > config.json
config.json
中就是我们所需要的通道配置。
2. 通过sdk来获取通道配置
除了上面提到的方式,还可以通过官方提供的sdk来获取通道配置。这里以fabric-sdk-go为例来介绍如何通过sdk来获取通道配置。
主要用到的是下面两个包:
- github.com/hyperledger/fabric-sdk-go/pkg/client/ledger 提供账本相关操作接口
- QueryConfigBlock: 获取当前通道使用的配置块
- github.com/hyperledger/fabric/common/tools/protolator 提供protobuf格式转换服务
- DeepMarshalJSON: 将protobuf格式的信息转换为JSON格式
代码示例如下:
blk, err := ledgerClient.QueryConfigBlock(ledger.WithTargetEndpoints(targetPeers...))
if err != nil {
panic(err.Error())
}
buffer := &bytes.Buffer{}
err = protolator.DeepMarshalJSON(buffer, blk)
if err != nil {
panic(err)
}
blockJson := make(map[string]interface{})
err = sonic.Unmarshal(buffer.Bytes(), &blockJson)
config := blockJson["data"].(map[string]interface{})["data"].([]interface{})[0].(map[string]interface{})["payload"].(map[string]interface{})["data"].(map[string]interface{})["config"]
声明:本作品采用署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)进行许可,使用时请注明出处。
Author: mengbin92
Github: mengbin92
cnblogs: 恋水无意
标签:Fabric,err,data,获取,文档,interface,config,string,通道 From: https://www.cnblogs.com/lianshuiwuyi/p/16906144.html