hyperledge工具-configtxlator


參考:http://www.blockchainbrother.com/article/1337

1.作用:

因為無論配置交易文件 .tx和初始區塊文件 .block都是二進制格式,用戶無法直接編輯。

configtxlator工具將這些配置文件在二進制格式和方便閱讀的json格式之間進行轉換。

開發 configtxlator 工具是為了支持獨立於SDK來進行重新配置。configtxlator 工具被設計為提供一個API讓任意一個SDK的用戶都能夠與之交互來更新配置。

工具的名稱是 configtx 和 translator 的拼接,意在傳達該工具簡單地在不同的等效數據之間進行轉換。 它不產生配置。也不提交或撤回配置。它不修改配置本身,只是簡單地提供一些配置格式的不同的雙射展現。

 

2.配置該工具的方法有:

該工具的源碼在github.com/hyperledger/fabric/common/tools/configtxlator

1)在github.com/hyperledger/fabric目錄下運行:

vagrant@ubuntu-xenial:/opt/gopath/src/github.com/hyperledger/fabric$ make configtxlator
.build/bin/configtxlator
CGO_CFLAGS=" " GOBIN=/opt/gopath/src/github.com/hyperledger/fabric/.build/bin go install -tags "" -ldflags "-X github.com/hyperledger/fabric/common/tools/configtxlator/metadata.CommitSHA=325999f" github.com/hyperledger/fabric/common/tools/configtxlator
Binary available as .build/bin/configtxlator

然后會生成./build/bin/configtxlator可執行文件

2)在github.com/hyperledger/fabric/common/tools/configtxlator目錄下運行go build

 

3.標准用法:

  • 首先使用SDK取出最新的配置
  • 然后使用configtxlator 工具產生將二進制文件轉成可讀版本的配置文件
  • 這樣用戶或者應用就可以編輯配置文件
  • 接着使用 configtxlator 工具計算更新的配置與原有配置的差異
  • 最后使用SDK提交配置以及簽名

configtxlator 工具暴露一個完全無狀態的 REST API 接口用來和配置勻速進行交互。 這些 REST 組件支持本地的配置和可讀的JSON格式配置文件進行相互轉換, 同時根據配置文件的差異計算配置的更新。

因為 configtxlator 工具特意沒有包含任何密碼工具和密鑰信息, 所有它沒有任何權限控制。 預計的典型部署方式是運行在沙盒容器中, 所以在本地的應用中, 有一個專用的 configtxlator 進程給每一個使用者。

 

4.如何使用該工具

1)查看該工具能夠使用的命令:

vagrant@ubuntu-xenial:/opt/gopath/src/github.com/hyperledger/fabric$ configtxlator --help
usage: configtxlator [<flags>] <command> [<args> ...]

用於生成Hyperledger Fabric通道配置的實用程序

Flags:
  --help  顯示上下文敏感的幫助信息 (also try --help-long and --help-man).

Commands:
  help [<command>...]
    顯示幫助信息.

  start [<flags>]
    開啟configtxlator REST服務端

  proto_encode --type=TYPE [<flags>]
    轉換JSON文件成指定的protobuf格式

  proto_decode --type=TYPE [<flags>]
    轉換proto信息為JSON格式

  compute_update --channel_id=CHANNEL_ID [<flags>]
    帶兩個編碼的common.Config消息,並計算在兩者之間轉換的配置更新。
  version
    顯示版本信息

 

1》start — 開啟服務端

vagrant@ubuntu-xenial:/opt/gopath/src/github.com/hyperledger/fabric$ configtxlator help start
usage: configtxlator start [<flags>]
  開啟configtxlator REST服務端

Flags:
  --help                顯示上下文敏感的幫助信息(also try --help-long and
                        --help-man).
  --hostname="0.0.0.0"  REST服務端堅挺的主機名或IP地址,默認為0.0.0.0
  --port=7059           REST服務端堅挺的端口,默認為7059
  --CORS=CORS ...       容許的CORS(跨來源資源共享)域名, 如'*' or 'www.example.com'(may be repeated).

工具啟動一個服務器監聽指定的端口且等待處理請求,如在本地8080端口啟動rest服務

vagrant@ubuntu-xenial:/opt/gopath/src/github.com/hyperledger/fabric$ configtxlator start --hostname="127.0.0.1" --port=8080
2019-03-10 01:37:26.715 UTC [configtxlator] startServer -> INFO 001 Serving HTTP requests on 127.0.0.1:8080

這是開啟了一個REST服務端,但是其實我們也可以不用啟動這個服務端,直接使用的命令行進行操作

 

2》proto解碼

vagrant@ubuntu-xenial:/opt/gopath/src/github.com/hyperledger/fabric$ configtxlator help proto_decode
usage: configtxlator proto_decode --type=TYPE [<flags>]

將proto信息轉換成JSON格式

Flags:
  --help                顯示上下文敏感的幫助信息 (also try --help-long and
                        --help-man).
  --type=TYPE           要解碼的protobuf結構的類型。比如'common.Config'
  --input=/dev/stdin    指定包含proto信息的文件,,默認為/dev/stdin,即控制台輸入
  --output=/dev/stdout  指定要將解碼所得的JSON信息寫入的文件默認為/dev/stdout,即控制台輸出

configtxlator命令用來將fabric的數據結構在protobuf和JSON 之間進行轉換,也可以用來創建配置更新。

  • 該命令可以啟動一個REST 服務來通過HTTP暴露服務接口,
  • 也可以直接在命令行使用

1> 如果使用的是啟動一個REST 服務來通過HTTP暴露服務接口的方法,那么需要運行configtxlator start命令開啟服務,如上面進行的操作

 

要轉換原型到可讀的 JSON 格式,只要發送二進制原型到 rest 目標http://$SERVER:$PORT/protolator/decode/<message.Name>,<message.Name> 是合法原型名的全稱,合法原型名如下:

  • common.Block:區塊結構;
  • common.Envelope:帶有效載荷和數字簽名的數字信封,區塊的數據部分就是序列化后的數字信封;
  • common.ConfigEnvelope:包含鏈配置的數字信封,內容包含ConfigUpdateEnvelope;
  • common.ConfigUpdateEnvelope:提交給排序節點的配置數字信封;
  • common.Config:ConfigEnvelope的配置部分;
  • common.ConfigUpdate:ConfigUpdateEnvelope的一部分。

然后進行解碼。例如,為了解析一個存儲為 configuration_block.pb 的配置區塊,執行命令:

curl -X POST --data-binary @configuration_block.pb http://127.0.0.1:8080/protolator/decode/common.Block

 2>另一種方式就是不啟動服務端,直接使用命令進行操作,上面的例子可以寫成:

configtxlator proto_decode --input configuration_block.pb --type common.Block

 

3》proto編碼

vagrant@ubuntu-xenial:/opt/gopath/src/github.com/hyperledger/fabric$ configtxlator help proto_encode
usage: configtxlator proto_encode --type=TYPE [<flags>] 將JSON文件轉移成protobuf. Flags: --help 顯示上下文敏感的幫助信息(also try --help-long and --help-man). --type=TYPE 指定要編碼成的protobuf結構的類型,比如'common.Config'. --input=/dev/stdin 指定要轉換的JSON文件,默認為/dev/stdin,即控制台輸入 --output=/dev/stdout 指定將輸出寫如的文件,默認為/dev/stdout,即控制台輸出

1>通過HTTP暴露服務接口編碼,舉例將控制台輸入的json格式的policy,轉換為protobuf格式並存入文件policy.pb:

curl -X POST --data-binary /dev/stdin http://127.0.0.1:8080/protolator/encode/common.Policy > policy.pb

2>命令行格式為:

configtxlator proto_encode --type common.Policy --output policy.pb

 

4》compute_update

vagrant@ubuntu-xenial:/opt/gopath/src/github.com/hyperledger/fabric$ configtxlator help compute_update
usage: configtxlator compute_update --channel_id=CHANNEL_ID [<flags>]

  計算生成兩個common.Config消息之間的配置更新

Flags:
  --help                   顯示上下文敏感的幫助信息(also try --help-long and
                           --help-man).
  --original=ORIGINAL      原始的配置信息
  --updated=UPDATED        更新后的配置信息下
  --channel_id=CHANNEL_ID  這次更新的通道的名字T
  --output=/dev/stdout     指明將JSON文件寫入的文件,默認為/dev/stdout,即控制台輸出

1>通過HTTP暴露服務接口編碼,舉例計算從original_config.pb到modified_config.pb的配置更新,並在stdout輸出JSON解碼后的數據:

configtxlator compute_update --channel_id testchan --original original_config.pb --updated modified_config.pb | configtxlator proto_decode --type common.ConfigUpdate

2>命令行格式為:

curl -X POST -F channel=testchan -F "original=@original_config.pb" -F "updated=@modified_config.pb" "http://127.0.0.1:8080/configtxlator/compute/update-from-configs" | curl -X POST --data-binary /dev/stdin "http://127.0.0.1:8080/protolator/encode/common.ConfigUpdate"

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM