mirror of
https://github.com/hyperledger/fabric-samples.git
synced 2026-06-17 15:35:09 +00:00
Signed-off-by: AadithyanRaju <aadithyan75@gmail.com> Signed-off-by: Aadithyan Raju <93834376+AadithyanRaju@users.noreply.github.com>
110 lines
3.4 KiB
Bash
Executable file
110 lines
3.4 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
#
|
|
# Copyright IBM Corp. All Rights Reserved.
|
|
#
|
|
# SPDX-License-Identifier: Apache-2.0
|
|
#
|
|
|
|
function fetch_channel_config() {
|
|
local output=$1
|
|
|
|
echo "Fetching the most recent configuration block for channel ${CHANNEL_NAME}"
|
|
peer channel \
|
|
fetch config config_block.pb \
|
|
-o org0-orderer1:6050 \
|
|
-c ${CHANNEL_NAME} \
|
|
--tls --cafile ${ORDERER_TLS_CA_FILE}
|
|
|
|
echo "Decoding config block to JSON and isolating config to ${output}"
|
|
configtxlator proto_decode \
|
|
--input config_block.pb \
|
|
--type common.Block \
|
|
| jq .data.data[0].payload.data.config > ${output}
|
|
}
|
|
|
|
verify_result() {
|
|
if [ $1 -ne 0 ]; then
|
|
echo $2
|
|
exit $1
|
|
fi
|
|
}
|
|
|
|
function create_config_update() {
|
|
local original=$1
|
|
local modified=$2
|
|
local output=$3
|
|
|
|
configtxlator proto_encode --input "${original}" --type common.Config --output original_config.pb
|
|
configtxlator proto_encode --input "${modified}" --type common.Config --output modified_config.pb
|
|
|
|
# returns non-zero if no updates were detected between current and new config
|
|
configtxlator compute_update --channel_id "${CHANNEL_NAME}" --original original_config.pb --updated modified_config.pb --output config_update.pb
|
|
if [ $? -ne 0 ]; then
|
|
echo "Anchor peer has already been set to ${ANCHOR_PEER_HOST}:${ANCHOR_PEER_PORT} - no update required."
|
|
return 1
|
|
fi
|
|
|
|
configtxlator proto_decode --input config_update.pb --type common.ConfigUpdate --output config_update.json
|
|
echo '{"payload":{"header":{"channel_header":{"channel_id":"'${CHANNEL_NAME}'", "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 ${output}
|
|
|
|
return 0
|
|
}
|
|
|
|
function create_anchor_peer_update() {
|
|
echo "Generating anchor peer update transaction for Org${ORG_NUM} on channel ${CHANNEL_NAME}"
|
|
fetch_channel_config config.json
|
|
|
|
set -x
|
|
# Modify the configuration to append the anchor peer
|
|
jq '.channel_group.groups.Application.groups.'${CORE_PEER_LOCALMSPID}'.values += {"AnchorPeers":{"mod_policy": "Admins","value":{"anchor_peers": [{"host": "'${ANCHOR_PEER_HOST}'","port": '${ANCHOR_PEER_PORT}'}]},"version": "0"}}' config.json > modified_config.json
|
|
{ set +x; } 2>/dev/null
|
|
|
|
# Compute a config update, based on the differences between
|
|
# config.json and modified_config.json, write
|
|
# it as a transaction to anchors.tx
|
|
create_config_update config.json modified_config.json anchors.tx
|
|
return $?
|
|
}
|
|
|
|
function update_anchor_peer() {
|
|
peer channel \
|
|
update -f anchors.tx \
|
|
-o org0-orderer1:6050 \
|
|
-c ${CHANNEL_NAME} \
|
|
--tls --cafile ${ORDERER_TLS_CA_FILE} >& log.txt
|
|
|
|
res=$?
|
|
cat log.txt
|
|
|
|
verify_result $res "Anchor peer update failed"
|
|
|
|
echo "Anchor peer set for org ${ORG_NAME} on channel ${CHANNEL_NAME} to ${ANCHOR_PEER_HOST}:${ANCHOR_PEER_PORT}"
|
|
}
|
|
|
|
function set_anchor_peer() {
|
|
echo "Updating org ${ORG_NUM} anchor peer for channel ${CHANNEL_NAME} to ${ANCHOR_PEER_HOST}:${ANCHOR_PEER_PORT}"
|
|
|
|
create_anchor_peer_update
|
|
res=$?
|
|
|
|
if [ $res -eq 0 ]; then
|
|
update_anchor_peer
|
|
fi
|
|
}
|
|
|
|
set -x
|
|
|
|
ORG_NUM=$1
|
|
CHANNEL_NAME=$2
|
|
PEER_NAME=$3
|
|
ORG_NAME=org${ORG_NUM}
|
|
ANCHOR_PEER_HOST=${ORG_NAME}-${PEER_NAME}
|
|
ANCHOR_PEER_PORT=7051
|
|
ORDERER_TLS_CA_FILE=/var/hyperledger/fabric/organizations/ordererOrganizations/org0.example.com/msp/tlscacerts/org0-tls-ca.pem
|
|
|
|
export CORE_PEER_LOCALMSPID=Org${ORG_NUM}MSP
|
|
|
|
set_anchor_peer
|
|
|
|
{ set +x; } 2>/dev/null
|