Fabric 2.2 测试网络 configUpdate.sh详解

#!/bin/bash
#
# Copyright IBM Corp. All Rights Reserved.
#
# SPDX-License-Identifier: Apache-2.0
#

# import utils
. scripts/envVar.shh

这是一个 Bash 脚本文件,包含一个 import 指令,引入了 envVar.sh  脚本中定义的变量和函数。envVar.sh详解见 http://t.csdn.cn/sgmSw

fetchChannelConfig() {
  ORG=$1
  CHANNEL=$2
  OUTPUT=$3

  setGlobals $ORG

  infoln "Fetching the most recent configuration block for the channel"
  set -x
  peer channel fetch config config_block.pb -o orderer.example.com:7050 --ordererTLSHostnameOverride orderer.example.com -c $CHANNEL --tls --cafile $ORDERER_CA
  { set +x; } 2>/dev/null

  infoln "Decoding config block to JSON and isolating config to ${OUTPUT}"
  set -x
  configtxlator proto_decode --input config_block.pb --type common.Block | jq .data.data[0].payload.data.config >"${OUTPUT}"
  { set +x; } 2>/dev/null
}

这段代码中定义了一个名为fetchChannelConfig的函数,该函数接受三个参数:ORG、CHANNEL和OUTPUT,表示组织名称、通道名称和输出文件名称。函数首先调用setGlobals函数设置环境变量,然后使用peer命令从orderer节点获取通道的最新配置块,并将其保存到config_block.pb文件中。接着,使用configtxlator工具将config_block.pb文件转换为JSON格式,并从中提取配置信息,将其保存到输出文件中。

peer channel fetch config config_block.pb -o orderer.example.com:7050 --ordererTLSHostnameOverride orderer.example.com -c $CHANNEL --tls --cafile $ORDERER_CA 命令用于从排序节点获取通道的最新配置块,并将其保存为名为 config_block.pb 的 protobuf 文件。 以下是此命令中使用的每个标志的详细说明:

  • peer channel fetch config :这是 Fabric Peer 命令,用于从指定 Orderer 获取指定频道的配置块(config block)。
  • config_block.pb:这是输出文件名,表示将获取到的配置块保存在当前目录下的该文件中。 文件扩展名 .pb 代表协议缓冲区。
  • -o orderer.example.com:7050:这指定了要连接的排序节点的地址。 在本例中,它是 orderer.example.com,端口号为 7050。
  • --ordererTLSHostnameOverride orderer.example.com:此标志用于覆盖排序节点的 TLS 主机名检查。 在这种情况下,它被设置为与排序节点地址相同的值。
  • -c $CHANNEL:这指定要为其获取配置块的通道的名称。 $CHANNEL 的值作为参数传递给函数。
  • --tls:此标志指定应该使用 TLS 连接到订购者。
  • --cafile $ORDERER_CA:此标志指定将用于验证 TLS 连接的 CA 证书文件的路径。 $ORDERER_CA 的值在 envVar.sh 脚本中设置,指向排序节点的 CA 证书。

configtxlator proto_decode --input config_block.pb --type common.Block | jq .data.data[0].payload.data.config >"${OUTPUT}"  这条指令的含义是:

  1. 使用configtxlator工具对config_block.pb文件进行解码,解码出common.Block类型的数据结构。
  2. 然后使用jq工具从解码后的结果中提取出有效的配置信息。
  3. 最后将提取出来的配置信息输出到指定的文件(OUTPUT)中。

更具体地说,该指令的作用是将config_block.pb文件中的配置信息解码并提取出来,输出到指定的文件中,方便后续进行配置更新或比较等操作。

# createConfigUpdate <channel_id> <original_config.json> <modified_config.json> <output.pb>
# Takes an original and modified config, and produces the config update tx
# which transitions between the two
# NOTE: this must be run in a CLI container since it requires configtxlator 
createConfigUpdate() {
  CHANNEL=$1
  ORIGINAL=$2
  MODIFIED=$3
  OUTPUT=$4

  set -x
  configtxlator proto_encode --input "${ORIGINAL}" --type common.Config >original_config.pb
  configtxlator proto_encode --input "${MODIFIED}" --type common.Config >modified_config.pb
  configtxlator compute_update --channel_id "${CHANNEL}" --original original_config.pb --updated modified_config.pb >config_update.pb
  configtxlator proto_decode --input config_update.pb --type common.ConfigUpdate >config_update.json
  echo '{"payload":{"header":{"channel_header":{"channel_id":"'$CHANNEL'", "type":2}},"data":{"config_update":'$(cat config_update.json)'}}}' | jq . >config_update_in_envelope.json
  configtxlator proto_encode --input config_update_in_envelope.json --type common.Envelope >"${OUTPUT}"
  { set +x; } 2>/dev/null
}

这是一个用于创建配置更新文件的函数。给定原始配置文件和修改后的配置文件,它将生成一个用于更新通道配置的事务。具体步骤如下:

  1. 使用configtxlator将原始配置文件和修改后的配置文件编码成protobuf格式,分别存储为original_config.pb和modified_config.pb文件。

  2. 使用configtxlator计算出原始配置文件和修改后的配置文件之间的差异,并将结果存储为config_update.pb文件。这个差异是用来更新通道配置的。

  3. 使用configtxlator将config_update.pb解码成JSON格式,并存储为config_update.json文件。

  4. 构建一个包含config_update.json数据的配置更新信封,用于提交到通道。

  5. 使用configtxlator将配置更新信封编码为protobuf格式,并将其输出到指定的文件中。

configtxlator是Hyperledger Fabric提供的一个用于处理配置的工具,可以用于编码、解码和计算配置更新的工具。下面是常用的命令:

  • configtxlator proto_encode: 将一个protobuf消息编码成另一种格式的protobuf消息
  • configtxlator proto_decode: 将一个protobuf消息解码成另一种格式的protobuf消息
  • configtxlator compute_update: 根据给定的两个配置计算一个配置更新
  • configtxlator proto_diff: 计算给定的两个protobuf消息之间的差异

configtxlator通常用于处理channel的配置更新。在Hyperledger Fabric中,通常是将一个channel的当前配置与修改后的配置进行比较,得到两者之间的差异,然后将差异封装成一个配置更新的envelope。这个envelope可以被peer节点用来更新channel的配置。configtxlator工具可以帮助完成这个过程。

# signConfigtxAsPeerOrg <org> <configtx.pb>
# Set the peerOrg admin of an org and sign the config update
signConfigtxAsPeerOrg() {
  ORG=$1
  CONFIGTXFILE=$2
  setGlobals $ORG
  set -x
  peer channel signconfigtx -f "${CONFIGTXFILE}"
  { set +x; } 2>/dev/null
}

这个函数的作用是使用指定组织的Peer节点管理员身份对给定的配置更新文件进行签名。函数使用了之前定义的setGlobals函数来设置正确的环境变量。然后,peer channel signconfigtx命令被调用来对指定的配置更新文件进行签名。签名后的结果被自动添加到文件中,以形成可传递到其他组织进行签名的完整配置更新事务。

peer channel signconfigtx -f "${CONFIGTXFILE}"  命令是用来让节点签名指定的config update文件。在Hyperledger Fabric中,config update文件用于更改系统通道和应用通道的配置。该命令的-f选项用于指定要签名的config update文件的路径。签名后,节点的证书和私钥将用于保证更改的真实性和完整性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值