mirror of
https://github.com/hyperledger/fabric-samples.git
synced 2026-06-17 15:35:09 +00:00
Without this, the init command fails if the chaincode container is not ready. Signed-off-by: Arne Rutjes <arne123@gmail.com>
176 lines
No EOL
6.9 KiB
Bash
176 lines
No EOL
6.9 KiB
Bash
#!/bin/bash
|
|
|
|
|
|
# installChaincode PEER ORG
|
|
function installChaincode() {
|
|
ORG=$1
|
|
setGlobals $ORG
|
|
set -x
|
|
peer lifecycle chaincode queryinstalled --output json | jq -r 'try (.installed_chaincodes[].package_id)' | grep ^${PACKAGE_ID}$ >&log.txt
|
|
if test $? -ne 0; then
|
|
peer lifecycle chaincode install ${CC_NAME}.tar.gz >&log.txt
|
|
res=$?
|
|
fi
|
|
{ set +x; } 2>/dev/null
|
|
cat log.txt
|
|
verifyResult $res "Chaincode installation on peer0.org${ORG} has failed"
|
|
successln "Chaincode is installed on peer0.org${ORG}"
|
|
}
|
|
|
|
# queryInstalled PEER ORG
|
|
function queryInstalled() {
|
|
ORG=$1
|
|
setGlobals $ORG
|
|
set -x
|
|
peer lifecycle chaincode queryinstalled --output json | jq -r 'try (.installed_chaincodes[].package_id)' | grep ^${PACKAGE_ID}$ >&log.txt
|
|
res=$?
|
|
{ set +x; } 2>/dev/null
|
|
cat log.txt
|
|
verifyResult $res "Query installed on peer0.org${ORG} has failed"
|
|
successln "Query installed successful on peer0.org${ORG} on channel"
|
|
}
|
|
|
|
# approveForMyOrg VERSION PEER ORG
|
|
function approveForMyOrg() {
|
|
ORG=$1
|
|
setGlobals $ORG
|
|
set -x
|
|
peer lifecycle chaincode approveformyorg -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --tls --cafile "$ORDERER_CA" --channelID $CHANNEL_NAME --name ${CC_NAME} --version ${CC_VERSION} --package-id ${PACKAGE_ID} --sequence ${CC_SEQUENCE} ${INIT_REQUIRED} ${CC_END_POLICY} ${CC_COLL_CONFIG} >&log.txt
|
|
res=$?
|
|
{ set +x; } 2>/dev/null
|
|
cat log.txt
|
|
verifyResult $res "Chaincode definition approved on peer0.org${ORG} on channel '$CHANNEL_NAME' failed"
|
|
successln "Chaincode definition approved on peer0.org${ORG} on channel '$CHANNEL_NAME'"
|
|
}
|
|
|
|
# checkCommitReadiness VERSION PEER ORG
|
|
function checkCommitReadiness() {
|
|
ORG=$1
|
|
shift 1
|
|
setGlobals $ORG
|
|
infoln "Checking the commit readiness of the chaincode definition on peer0.org${ORG} on channel '$CHANNEL_NAME'..."
|
|
local rc=1
|
|
local COUNTER=1
|
|
# continue to poll
|
|
# we either get a successful response, or reach MAX RETRY
|
|
while [ $rc -ne 0 -a $COUNTER -lt $MAX_RETRY ]; do
|
|
sleep $DELAY
|
|
infoln "Attempting to check the commit readiness of the chaincode definition on peer0.org${ORG}, Retry after $DELAY seconds."
|
|
set -x
|
|
peer lifecycle chaincode checkcommitreadiness --channelID $CHANNEL_NAME --name ${CC_NAME} --version ${CC_VERSION} --sequence ${CC_SEQUENCE} ${INIT_REQUIRED} ${CC_END_POLICY} ${CC_COLL_CONFIG} --output json >&log.txt
|
|
res=$?
|
|
{ set +x; } 2>/dev/null
|
|
let rc=0
|
|
for var in "$@"; do
|
|
grep "$var" log.txt &>/dev/null || let rc=1
|
|
done
|
|
COUNTER=$(expr $COUNTER + 1)
|
|
done
|
|
cat log.txt
|
|
if test $rc -eq 0; then
|
|
infoln "Checking the commit readiness of the chaincode definition successful on peer0.org${ORG} on channel '$CHANNEL_NAME'"
|
|
else
|
|
fatalln "After $MAX_RETRY attempts, Check commit readiness result on peer0.org${ORG} is INVALID!"
|
|
fi
|
|
}
|
|
|
|
# commitChaincodeDefinition VERSION PEER ORG (PEER ORG)...
|
|
function commitChaincodeDefinition() {
|
|
parsePeerConnectionParameters $@
|
|
res=$?
|
|
verifyResult $res "Invoke transaction failed on channel '$CHANNEL_NAME' due to uneven number of peer and org parameters "
|
|
|
|
# while 'peer chaincode' command can get the orderer endpoint from the
|
|
# peer (if join was successful), let's supply it directly as we know
|
|
# it using the "-o" option
|
|
set -x
|
|
peer lifecycle chaincode commit -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --tls --cafile "$ORDERER_CA" --channelID $CHANNEL_NAME --name ${CC_NAME} "${PEER_CONN_PARMS[@]}" --version ${CC_VERSION} --sequence ${CC_SEQUENCE} ${INIT_REQUIRED} ${CC_END_POLICY} ${CC_COLL_CONFIG} >&log.txt
|
|
res=$?
|
|
{ set +x; } 2>/dev/null
|
|
cat log.txt
|
|
verifyResult $res "Chaincode definition commit failed on peer0.org${ORG} on channel '$CHANNEL_NAME' failed"
|
|
successln "Chaincode definition committed on channel '$CHANNEL_NAME'"
|
|
}
|
|
|
|
# queryCommitted ORG
|
|
function queryCommitted() {
|
|
ORG=$1
|
|
setGlobals $ORG
|
|
EXPECTED_RESULT="Version: ${CC_VERSION}, Sequence: ${CC_SEQUENCE}, Endorsement Plugin: escc, Validation Plugin: vscc"
|
|
infoln "Querying chaincode definition on peer0.org${ORG} on channel '$CHANNEL_NAME'..."
|
|
local rc=1
|
|
local COUNTER=1
|
|
# continue to poll
|
|
# we either get a successful response, or reach MAX RETRY
|
|
while [ $rc -ne 0 -a $COUNTER -lt $MAX_RETRY ]; do
|
|
sleep $DELAY
|
|
infoln "Attempting to Query committed status on peer0.org${ORG}, Retry after $DELAY seconds."
|
|
set -x
|
|
peer lifecycle chaincode querycommitted --channelID $CHANNEL_NAME --name ${CC_NAME} >&log.txt
|
|
res=$?
|
|
{ set +x; } 2>/dev/null
|
|
test $res -eq 0 && VALUE=$(cat log.txt | grep -o '^Version: '$CC_VERSION', Sequence: [0-9]*, Endorsement Plugin: escc, Validation Plugin: vscc')
|
|
test "$VALUE" = "$EXPECTED_RESULT" && let rc=0
|
|
COUNTER=$(expr $COUNTER + 1)
|
|
done
|
|
cat log.txt
|
|
if test $rc -eq 0; then
|
|
successln "Query chaincode definition successful on peer0.org${ORG} on channel '$CHANNEL_NAME'"
|
|
else
|
|
fatalln "After $MAX_RETRY attempts, Query chaincode definition result on peer0.org${ORG} is INVALID!"
|
|
fi
|
|
}
|
|
|
|
function chaincodeInvokeInit() {
|
|
parsePeerConnectionParameters $@
|
|
res=$?
|
|
verifyResult $res "Invoke transaction failed on channel '$CHANNEL_NAME' due to uneven number of peer and org parameters "
|
|
|
|
local rc=1
|
|
local COUNTER=1
|
|
local fcn_call='{"function":"'${CC_INIT_FCN}'","Args":[]}'
|
|
# continue to poll
|
|
# we either get a successful response, or reach MAX RETRY
|
|
while [ $rc -ne 0 -a $COUNTER -lt $MAX_RETRY ]; do
|
|
sleep $DELAY
|
|
# while 'peer chaincode' command can get the orderer endpoint from the
|
|
# peer (if join was successful), let's supply it directly as we know
|
|
# it using the "-o" option
|
|
set -x
|
|
infoln "invoke fcn call:${fcn_call}"
|
|
peer chaincode invoke -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --tls --cafile "$ORDERER_CA" -C $CHANNEL_NAME -n ${CC_NAME} "${PEER_CONN_PARMS[@]}" --isInit -c ${fcn_call} >&log.txt
|
|
res=$?
|
|
{ set +x; } 2>/dev/null
|
|
let rc=$res
|
|
COUNTER=$(expr $COUNTER + 1)
|
|
done
|
|
cat log.txt
|
|
verifyResult $res "Invoke execution on $PEERS failed "
|
|
successln "Invoke transaction successful on $PEERS on channel '$CHANNEL_NAME'"
|
|
}
|
|
|
|
function chaincodeQuery() {
|
|
ORG=$1
|
|
setGlobals $ORG
|
|
infoln "Querying on peer0.org${ORG} on channel '$CHANNEL_NAME'..."
|
|
local rc=1
|
|
local COUNTER=1
|
|
# continue to poll
|
|
# we either get a successful response, or reach MAX RETRY
|
|
while [ $rc -ne 0 -a $COUNTER -lt $MAX_RETRY ]; do
|
|
sleep $DELAY
|
|
infoln "Attempting to Query peer0.org${ORG}, Retry after $DELAY seconds."
|
|
set -x
|
|
peer chaincode query -C $CHANNEL_NAME -n ${CC_NAME} -c '{"Args":["org.hyperledger.fabric:GetMetadata"]}' >&log.txt
|
|
res=$?
|
|
{ set +x; } 2>/dev/null
|
|
let rc=$res
|
|
COUNTER=$(expr $COUNTER + 1)
|
|
done
|
|
cat log.txt
|
|
if test $rc -eq 0; then
|
|
successln "Query successful on peer0.org${ORG} on channel '$CHANNEL_NAME'"
|
|
else
|
|
fatalln "After $MAX_RETRY attempts, Query result on peer0.org${ORG} is INVALID!"
|
|
fi
|
|
} |