-
Notifications
You must be signed in to change notification settings - Fork 3.4k
/
upgrade_to_v14.sh
executable file
·166 lines (135 loc) · 6.1 KB
/
upgrade_to_v14.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
#!/bin/bash
echo
echo " ____ _____ _ ____ _____ "
echo "/ ___| |_ _| / \ | _ \ |_ _|"
echo "\___ \ | | / _ \ | |_) | | | "
echo " ___) | | | / ___ \ | _ < | | "
echo "|____/ |_| /_/ \_\ |_| \_\ |_| "
echo
echo "Upgrade your first network (BYFN) from v1.3.x to v1.4.x end-to-end test"
echo
CHANNEL_NAME="$1"
DELAY="$2"
LANGUAGE="$3"
TIMEOUT="$4"
VERBOSE="$5"
: ${CHANNEL_NAME:="mychannel"}
: ${DELAY:="5"}
: ${LANGUAGE:="golang"}
: ${TIMEOUT:="10"}
: ${VERBOSE:="false"}
LANGUAGE=$(echo "$LANGUAGE" | tr [:upper:] [:lower:])
COUNTER=1
MAX_RETRY=5
SYS_CHANNEL=$SYS_CHANNEL
CC_SRC_PATH="github.com/chaincode/chaincode_example02/go/"
if [ "$LANGUAGE" = "node" ]; then
CC_SRC_PATH="/opt/gopath/src/github.com/chaincode/chaincode_example02/node/"
fi
echo "System channel name : "$SYS_CHANNEL
echo "Channel name : "$CHANNEL_NAME
# import utils
. scripts/utils.sh
# addCapabilityToChannel <channel_id> <capabilities_group>
# This function pulls the current channel config, modifies it with capabilities
# for the specified group, computes the config update, signs, and submits it.
addCapabilityToChannel() {
CH_NAME=$1
GROUP=$2
setOrdererGlobals
# Get the current channel config, decode and write it to config.json
fetchChannelConfig $CH_NAME config.json
# Modify the correct section of the config based on capabilities group
if [ $GROUP == "orderer" ]; then
jq -s '.[0] * {"channel_group":{"groups":{"Orderer": {"values": {"Capabilities": .[1].orderer}}}}}' config.json ./scripts/capabilities.json > modified_config.json
elif [ $GROUP == "channel" ]; then
jq -s '.[0] * {"channel_group":{"values": {"Capabilities": .[1].channel}}}' config.json ./scripts/capabilities.json > modified_config.json
elif [ $GROUP == "application" ]; then
jq -s '.[0] * {"channel_group":{"groups":{"Application": {"values": {"Capabilities": .[1].application}}}}}' config.json ./scripts/capabilities.json > modified_config.json
fi
# Create a config updated for this channel based on the differences between config.json and modified_config.json
# write the output to config_update_in_envelope.pb
createConfigUpdate "$CH_NAME" config.json modified_config.json config_update_in_envelope.pb
# Sign, and set the correct identity for submission.
if [ $CH_NAME != $SYS_CHANNEL ] ; then
if [ $GROUP == "orderer" ]; then
# Modifying the orderer group requires only the Orderer admin to sign.
# Prepare to sign the update as the OrdererOrg.Admin
setOrdererGlobals
elif [ $GROUP == "channel" ]; then
# Modifying the channel group requires a majority of application admins and the orderer admin to sign.
# Sign with PeerOrg1.Admin
signConfigtxAsPeerOrg 1 config_update_in_envelope.pb
# Sign with PeerOrg2.Admin
signConfigtxAsPeerOrg 2 config_update_in_envelope.pb
# Prepare to sign the update as the OrdererOrg.Admin
setOrdererGlobals
elif [ $GROUP == "application" ]; then
# Modifying the application group requires a majority of application admins to sign.
# Sign with PeerOrg1.Admin
signConfigtxAsPeerOrg 1 config_update_in_envelope.pb
# Prepare to sign the update as the PeerOrg2.Admin
setGlobals 0 2
fi
else
# For the orderer system channel, only the orderer admin needs sign
# which will be attached during the update
setOrdererGlobals
fi
if [ -z "$CORE_PEER_TLS_ENABLED" -o "$CORE_PEER_TLS_ENABLED" = "false" ]; then
set -x
peer channel update -f config_update_in_envelope.pb -c $CH_NAME -o orderer.example.com:7050 --cafile $ORDERER_CA
res=$?
set +x
else
set -x
peer channel update -f config_update_in_envelope.pb -c $CH_NAME -o orderer.example.com:7050 --tls true --cafile $ORDERER_CA
res=$?
set +x
fi
verifyResult $res "Config update for \"$GROUP\" on \"$CH_NAME\" failed"
echo "===================== Config update for \"$GROUP\" on \"$CH_NAME\" is completed ===================== "
}
sleep $DELAY
#Config update for /Channel on $SYS_CHANNEL
echo "Config update for /Channel on \"$SYS_CHANNEL\""
addCapabilityToChannel $SYS_CHANNEL channel
sleep $DELAY
#Config update for /Channel/Orderer on $SYS_CHANNEL
echo "Config update for /Channel/Orderer on \"$SYS_CHANNEL\""
addCapabilityToChannel $SYS_CHANNEL orderer
sleep $DELAY
#Config update for /Channel on $CHANNEL_NAME
echo "Config update for /Channel on \"$CHANNEL_NAME\""
addCapabilityToChannel $CHANNEL_NAME channel
sleep $DELAY
#Config update for /Channel/Orderer
echo "Config update for /Channel/Orderer on \"$CHANNEL_NAME\""
addCapabilityToChannel $CHANNEL_NAME orderer
sleep $DELAY
#Config update for /Channel/Application
echo "Config update for /Channel/Application on \"$CHANNEL_NAME\""
addCapabilityToChannel $CHANNEL_NAME application
sleep $DELAY
#Query on chaincode on Peer0/Org1
echo "Querying chaincode on org1/peer0..."
chaincodeQuery 0 1 90
sleep $DELAY
#Invoke on chaincode on Peer0/Org1
echo "Sending invoke transaction on org1/peer0..."
chaincodeInvoke 0 1 0 2
sleep $DELAY
#Query on chaincode on Peer0/Org1
echo "Querying chaincode on org1/peer0..."
chaincodeQuery 0 1 80
echo
echo "===================== All GOOD, End-2-End UPGRADE Scenario execution completed ===================== "
echo
echo
echo " _____ _ _ ____ _____ ____ _____ "
echo "| ____| | \ | | | _ \ | ____| |___ \ | ____|"
echo "| _| | \| | | | | | _____ | _| __) | | _| "
echo "| |___ | |\ | | |_| | |_____| | |___ / __/ | |___ "
echo "|_____| |_| \_| |____/ |_____| |_____| |_____|"
echo
exit 0