这一章我们对configtxlator做一个解说。
1, configtxlator 他是什么,有什么用?
configtxlator 官方说明是用于生成Hyperledger结构通道配置的实用程序;
此工具提供:编码(proto_encode)、解码(proto_decode)、对比修改结构(compute_update)以及版本信息(version)
2, 如何使用configtxlator工具
从工具的源码定义上,我这里将它有分为了两种用法,:
(a), 工具非服务化
在cli中动态增加组织的时候,我们configtxlator proto_encode或 configtxlator proto_decode 这种方式。
proto_encode和proto_decode两个命令所拥有的参数是一样的,都需要以下几个参数设置:
type : 消息结构体类型
input : 输入参数,encode(值是json格式),decode(值是proto格式的字节数组)
output:输出结果;根据输入,输出的是json或者proto格式。
type包含以下几种:
common.Block
区块结构
common.Envelope
带有效载荷和数字签名的数字信封,区块的数据部分就是序列化后的数字信封
common.ConfigEnvelope
包含链配置的数字信封,内容包含ConfigUpdateEnvelope
common.ConfigUpdateEnvelope
提交给排序节点的配置数字信封
common.Config
ConfigEnvelope的配置部分
common.ConfigUpdate
ConfigUpdateEnvelope的一部分
compute_update计算修改量,命令拥有以下几个参数
original :原始的proto
updated:修改后的proto
channel_id:通道id
output:对比计算后的目标修改配置proto
举例:将当前channel的块消息中的配置decode为json文件
configtxlator proto_decode --input mychannel.pb --type common.Block | jq .data.data[0].payload.data.config > mychannel.json
Json内容:
(b), 工具服务化
可以执行一下命令,启动此工具的rest服务:
./configtxlator start --hostname="0.0.0.0" --port=7059
Hostname : 主机ip,默认当前机器ip
Port:服务端口,默认7059
服务启动,通过路由提供一下几种服务:
MsgName对应的就是非服务化中的type。
举例:java中的使用样例
如果想查看计算后获取目标修改配置的信息,可以使用common.Envelope,进行解码查看json数据。
具体给个方法是如何实现的,逻辑不复杂,就不做详细描述了。