2018年12月9日日曜日

Hyperledger Fabric バッチサイズ変更手順

FabricのOrdererがブロックを生成する際、デフォルト設定では、以下のタイミングでブロックが作られる。

  タイムアウト時間:2秒
      または
      トランザクション数:10個

ブロックチェーンコンソーシアムを構築した後、運用中にトランザクション数を変更する手順を説明する。

➀CONFIGブロックを取得する。

# docker exec -it cli bash
# peer channel fetch config config.bc -o orderer.example.com:7050 -c bushido --tls --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/tls/ca.crt 

②CONFIGブロック(バイナリ)をJSON形式にデコードする。このとき、Envelopeメッセージ等は除外する。

# configtxlator proto_decode --input config.bc --type common.Block | jq .data.data[0].payload.data.config > config.json

③今回はトランザクション数を10→5に変更することにする。

# jq ".channel_group.groups.Orderer.values.BatchSize.value.max_message_count" "config.json"
10
# jq ".channel_group.groups.Orderer.values.BatchSize.value.max_message_count = 5"  "config.json" > "update_config.json"
jq ".channel_group.groups.Orderer.values.BatchSize.value.max_message_count" "update_config.json"
5

➃「config.json」と「update_config.json」の差分値をシミレーションする。

#configtxlator proto_encode --input config.json --type common.Config > config.bc
#configtxlator proto_encode --input update_config.json --type common.Config > update_config.bc

#configtxlator compute_update --channel_id bushido --original config.bc --updated update_config.bc --output update_config_2.bc

⑤シミレーション結果で生成された「update_config_2.bc」をJSON形式にデコードする。

#configtxlator proto_decode --input update_config_2.bc --type common.ConfigUpdate | jq . > update_config_2.json

⑥Envelopeメッセージをラッピングする。


#echo '{"payload":{"header":{"channel_header":{"channel_id":"bushido", "type":2}},"data":{"config_update":'$(cat update_config_2.json)'}}}' | jq . > update_config_2_envelope.json

⑦「update_config_2_envelope.json」をバイナリ形式にエンコードする。

#configtxlator proto_encode --input update_config_2_envelope.json --type common.Envelope --output update_config_2_envelope.bc

⑧「update_config_2_envelope.bc」に対して、PEERの署名を行う。
(Endorsing Policyを満たす分、署名を付与する必要あり)

# peer channel signconfigtx -f update_config_2_envelope.bc

⑨チャネルを更新する。

# peer channel update -f update_config_2_envelope.bc -c bushido -o orderer.example.com:7050 --tls --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/tls/ca.crt




0 件のコメント: