這一章我們對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資料。
具體給個方法是如何實現的,邏輯不復雜,就不做詳細描述了。