From eb883151076887d42ead206a6a267af664289c58 Mon Sep 17 00:00:00 2001 From: Naser Mirzaei Date: Fri, 28 Aug 2020 01:13:19 +0430 Subject: [PATCH] add utils.sh and colorize messages (#310) * add utils.sh and colorize messages Signed-off-by: Naser Mirzaei * rename utils to scriptUtils Signed-off-by: Naser Mirzaei --- test-network/network.sh | 254 ++++------ .../organizations/fabric-ca/registerEnroll.sh | 159 ++---- test-network/scriptUtils.sh | 43 ++ test-network/scripts/createChannel.sh | 41 +- test-network/scripts/deployCC.sh | 478 +++++++++--------- test-network/scripts/envVar.sh | 12 +- 6 files changed, 451 insertions(+), 536 deletions(-) create mode 100755 test-network/scriptUtils.sh diff --git a/test-network/network.sh b/test-network/network.sh index de8126d6..ce7df40d 100755 --- a/test-network/network.sh +++ b/test-network/network.sh @@ -16,55 +16,57 @@ export PATH=${PWD}/../bin:$PATH export FABRIC_CFG_PATH=${PWD}/configtx export VERBOSE=false +source scriptUtils.sh + # Print the usage message function printHelp() { - echo "Usage: " - echo " network.sh [Flags]" - echo " Modes:" - echo " "$'\e[0;32m'up$'\e[0m' - bring up fabric orderer and peer nodes. No channel is created - echo " "$'\e[0;32m'up createChannel$'\e[0m' - bring up fabric network with one channel - echo " "$'\e[0;32m'createChannel$'\e[0m' - create and join a channel after the network is created - echo " "$'\e[0;32m'deployCC$'\e[0m' - deploy the asset transfer basic chaincode on the channel or specify - echo " "$'\e[0;32m'down$'\e[0m' - clear the network with docker-compose down - echo " "$'\e[0;32m'restart$'\e[0m' - restart the network - echo - echo " Flags:" - echo " Used with "$'\e[0;32m'network.sh up$'\e[0m', $'\e[0;32m'network.sh createChannel$'\e[0m': - echo " -ca - create Certificate Authorities to generate the crypto material" - echo " -c - channel name to use (defaults to \"mychannel\")" - echo " -s - the database backend to use: goleveldb (default) or couchdb" - echo " -r - CLI times out after certain number of attempts (defaults to 5)" - echo " -d - delay duration in seconds (defaults to 3)" - echo " -i - the tag to be used to launch the network (defaults to \"latest\")" - echo " -cai - the image tag to be used for CA (defaults to \"${CA_IMAGETAG}\")" - echo " -verbose - verbose mode" - echo " Used with "$'\e[0;32m'network.sh deployCC$'\e[0m' - echo " -c - deploy chaincode to channel" - echo " -ccn - the short name of the chaincode to deploy: basic (default),ledger, private, sbe, secured" - echo " -ccl - the programming language of the chaincode to deploy: go (default), java, javascript, typescript" - echo " -ccv - chaincode version. 1.0 (default)" - echo " -ccs - chaincode definition sequence. Must be an integer, 1 (default), 2, 3, etc" - echo " -ccp - Optional, path to the chaincode. When provided the -ccn will be used as the deployed name and not the short name of the known chaincodes." - echo " -ccep - Optional, chaincode endorsement policy, using signature policy syntax. The default policy requires an endorsement from Org1 and Org2" - echo " -cccg - Optional, path to a private data collections configuration file" - echo " -cci - Optional, chaincode init required function to invoke. When provided this function will be invoked after deployment of the chaincode and will define the chaincode as initialization required." - echo - echo " -h - print this message" - echo - echo " Possible Mode and flag combinations" - echo " "$'\e[0;32m'up$'\e[0m' -ca -c -r -d -s -i -verbose - echo " "$'\e[0;32m'up createChannel$'\e[0m' -ca -c -r -d -s -i -verbose - echo " "$'\e[0;32m'createChannel$'\e[0m' -c -r -d -verbose - echo " "$'\e[0;32m'deployCC$'\e[0m' -ccn -ccl -ccv -ccs -ccp -cci -r -d -verbose - echo - echo " Taking all defaults:" - echo " network.sh up" - echo - echo " Examples:" - echo " network.sh up createChannel -ca -c mychannel -s couchdb -i 2.0.0" - echo " network.sh createChannel -c channelName" - echo " network.sh deployCC -ccn basic -ccl javascript" - echo " network.sh deployCC -ccn mychaincode -ccp ./user/mychaincode -ccv 1 -ccl javascript" + println "Usage: " + println " network.sh [Flags]" + println " Modes:" + println " "$'\e[0;32m'up$'\e[0m' - bring up fabric orderer and peer nodes. No channel is created + println " "$'\e[0;32m'up createChannel$'\e[0m' - bring up fabric network with one channel + println " "$'\e[0;32m'createChannel$'\e[0m' - create and join a channel after the network is created + println " "$'\e[0;32m'deployCC$'\e[0m' - deploy the asset transfer basic chaincode on the channel or specify + println " "$'\e[0;32m'down$'\e[0m' - clear the network with docker-compose down + println " "$'\e[0;32m'restart$'\e[0m' - restart the network + println + println " Flags:" + println " Used with "$'\e[0;32m'network.sh up$'\e[0m', $'\e[0;32m'network.sh createChannel$'\e[0m': + println " -ca - create Certificate Authorities to generate the crypto material" + println " -c - channel name to use (defaults to \"mychannel\")" + println " -s - the database backend to use: goleveldb (default) or couchdb" + println " -r - CLI times out after certain number of attempts (defaults to 5)" + println " -d - delay duration in seconds (defaults to 3)" + println " -i - the tag to be used to launch the network (defaults to \"latest\")" + println " -cai - the image tag to be used for CA (defaults to \"${CA_IMAGETAG}\")" + println " -verbose - verbose mode" + println " Used with "$'\e[0;32m'network.sh deployCC$'\e[0m' + println " -c - deploy chaincode to channel" + println " -ccn - the short name of the chaincode to deploy: basic (default),ledger, private, sbe, secured" + println " -ccl - the programming language of the chaincode to deploy: go (default), java, javascript, typescript" + println " -ccv - chaincode version. 1.0 (default)" + println " -ccs - chaincode definition sequence. Must be an integer, 1 (default), 2, 3, etc" + println " -ccp - Optional, path to the chaincode. When provided the -ccn will be used as the deployed name and not the short name of the known chaincodes." + println " -ccep - Optional, chaincode endorsement policy, using signature policy syntax. The default policy requires an endorsement from Org1 and Org2" + println " -cccg - Optional, path to a private data collections configuration file" + println " -cci - Optional, chaincode init required function to invoke. When provided this function will be invoked after deployment of the chaincode and will define the chaincode as initialization required." + println + println " -h - print this message" + println + println " Possible Mode and flag combinations" + println " "$'\e[0;32m'up$'\e[0m' -ca -c -r -d -s -i -verbose + println " "$'\e[0;32m'up createChannel$'\e[0m' -ca -c -r -d -s -i -verbose + println " "$'\e[0;32m'createChannel$'\e[0m' -c -r -d -verbose + println " "$'\e[0;32m'deployCC$'\e[0m' -ccn -ccl -ccv -ccs -ccp -cci -r -d -verbose + println + println " Taking all defaults:" + println " network.sh up" + println + println " Examples:" + println " network.sh up createChannel -ca -c mychannel -s couchdb -i 2.0.0" + println " network.sh createChannel -c channelName" + println " network.sh deployCC -ccn basic -ccl javascript" + println " network.sh deployCC -ccn mychaincode -ccp ./user/mychaincode -ccv 1 -ccl javascript" } # Obtain CONTAINER_IDS and remove them @@ -73,7 +75,7 @@ function printHelp() { function clearContainers() { CONTAINER_IDS=$(docker ps -a | awk '($2 ~ /dev-peer.*/) {print $1}') if [ -z "$CONTAINER_IDS" -o "$CONTAINER_IDS" == " " ]; then - echo "---- No containers available for deletion ----" + infoln "No containers available for deletion" else docker rm -f $CONTAINER_IDS fi @@ -85,7 +87,7 @@ function clearContainers() { function removeUnwantedImages() { DOCKER_IMAGE_IDS=$(docker images | awk '($1 ~ /dev-peer.*/) {print $3}') if [ -z "$DOCKER_IMAGE_IDS" -o "$DOCKER_IMAGE_IDS" == " " ]; then - echo "---- No images available for deletion ----" + infoln "No images available for deletion" else docker rmi -f $DOCKER_IMAGE_IDS fi @@ -102,10 +104,10 @@ function checkPrereqs() { peer version > /dev/null 2>&1 if [[ $? -ne 0 || ! -d "../config" ]]; then - echo "ERROR! Peer binary and configuration files not found.." - echo - echo "Follow the instructions in the Fabric docs to install the Fabric Binaries:" - echo "https://hyperledger-fabric.readthedocs.io/en/latest/install.html" + errorln "Peer binary and configuration files not found.." + errorln + errorln "Follow the instructions in the Fabric docs to install the Fabric Binaries:" + errorln "https://hyperledger-fabric.readthedocs.io/en/latest/install.html" exit 1 fi # use the fabric tools container to see if the samples and binaries match your @@ -113,27 +115,22 @@ function checkPrereqs() { LOCAL_VERSION=$(peer version | sed -ne 's/ Version: //p') DOCKER_IMAGE_VERSION=$(docker run --rm hyperledger/fabric-tools:$IMAGETAG peer version | sed -ne 's/ Version: //p' | head -1) - echo "LOCAL_VERSION=$LOCAL_VERSION" - echo "DOCKER_IMAGE_VERSION=$DOCKER_IMAGE_VERSION" + infoln "LOCAL_VERSION=$LOCAL_VERSION" + infoln "DOCKER_IMAGE_VERSION=$DOCKER_IMAGE_VERSION" if [ "$LOCAL_VERSION" != "$DOCKER_IMAGE_VERSION" ]; then - echo "=================== WARNING ===================" - echo " Local fabric binaries and docker images are " - echo " out of sync. This may cause problems. " - echo "===============================================" + warnln "Local fabric binaries and docker images are out of sync. This may cause problems." fi for UNSUPPORTED_VERSION in $NONWORKING_VERSIONS; do - echo "$LOCAL_VERSION" | grep -q $UNSUPPORTED_VERSION + infoln "$LOCAL_VERSION" | grep -q $UNSUPPORTED_VERSION if [ $? -eq 0 ]; then - echo "ERROR! Local Fabric binary version of $LOCAL_VERSION does not match the versions supported by the test network." - exit 1 + fatalln "Local Fabric binary version of $LOCAL_VERSION does not match the versions supported by the test network." fi - echo "$DOCKER_IMAGE_VERSION" | grep -q $UNSUPPORTED_VERSION + infoln "$DOCKER_IMAGE_VERSION" | grep -q $UNSUPPORTED_VERSION if [ $? -eq 0 ]; then - echo "ERROR! Fabric Docker image version of $DOCKER_IMAGE_VERSION does not match the versions supported by the test network." - exit 1 + fatalln "Fabric Docker image version of $DOCKER_IMAGE_VERSION does not match the versions supported by the test network." fi done @@ -142,27 +139,23 @@ function checkPrereqs() { fabric-ca-client version > /dev/null 2>&1 if [[ $? -ne 0 ]]; then - echo "ERROR! fabric-ca-client binary not found.." - echo - echo "Follow the instructions in the Fabric docs to install the Fabric Binaries:" - echo "https://hyperledger-fabric.readthedocs.io/en/latest/install.html" + errorln "fabric-ca-client binary not found.." + errorln + errorln "Follow the instructions in the Fabric docs to install the Fabric Binaries:" + errorln "https://hyperledger-fabric.readthedocs.io/en/latest/install.html" exit 1 fi CA_LOCAL_VERSION=$(fabric-ca-client version | sed -ne 's/ Version: //p') CA_DOCKER_IMAGE_VERSION=$(docker run --rm hyperledger/fabric-ca:$CA_IMAGETAG fabric-ca-client version | sed -ne 's/ Version: //p' | head -1) - echo "CA_LOCAL_VERSION=$CA_LOCAL_VERSION" - echo "CA_DOCKER_IMAGE_VERSION=$CA_DOCKER_IMAGE_VERSION" + infoln "CA_LOCAL_VERSION=$CA_LOCAL_VERSION" + infoln "CA_DOCKER_IMAGE_VERSION=$CA_DOCKER_IMAGE_VERSION" if [ "$CA_LOCAL_VERSION" != "$CA_DOCKER_IMAGE_VERSION" ]; then - echo "=================== WARNING ======================" - echo " Local fabric-ca binaries and docker images are " - echo " out of sync. This may cause problems. " - echo "==================================================" + warnln "Local fabric-ca binaries and docker images are out of sync. This may cause problems." fi fi } - # Before you can bring up a network, each organization needs to generate the crypto # material that will define that organization on the network. Because Hyperledger # Fabric is a permissioned blockchain, each node and user on the network needs to @@ -172,7 +165,7 @@ function checkPrereqs() { # material. # By default, the sample network uses cryptogen. Cryptogen is a tool that is -# meant for development and testing that can quicky create the certificates and keys +# meant for development and testing that can quickly create the certificates and keys # that can be consumed by a Fabric network. The cryptogen tool consumes a series # of configuration files for each organization in the "organizations/cryptogen" # directory. Cryptogen uses the files to generate the crypto material for each @@ -182,12 +175,12 @@ function checkPrereqs() { # and keys that they generate to create a valid root of trust for each organization. # The script uses Docker Compose to bring up three CAs, one for each peer organization # and the ordering organization. The configuration file for creating the Fabric CA -# servers are in the "organizations/fabric-ca" directory. Within the same diectory, -# the "registerEnroll.sh" script uses the Fabric CA client to create the identites, +# servers are in the "organizations/fabric-ca" directory. Within the same directory, +# the "registerEnroll.sh" script uses the Fabric CA client to create the identities, # certificates, and MSP folders that are needed to create the test network in the # "organizations/ordererOrganizations" directory. -# Create Organziation crypto material using cryptogen or CAs +# Create Organization crypto material using cryptogen or CAs function createOrgs() { if [ -d "organizations/peerOrganizations" ]; then @@ -198,52 +191,38 @@ function createOrgs() { if [ "$CRYPTO" == "cryptogen" ]; then which cryptogen if [ "$?" -ne 0 ]; then - echo "cryptogen tool not found. exiting" - exit 1 + fatalln "cryptogen tool not found. exiting" fi - echo - echo "##########################################################" - echo "##### Generate certificates using cryptogen tool #########" - echo "##########################################################" - echo + infoln "Generate certificates using cryptogen tool" - echo "##########################################################" - echo "############ Create Org1 Identities ######################" - echo "##########################################################" + infoln "Create Org1 Identities" set -x cryptogen generate --config=./organizations/cryptogen/crypto-config-org1.yaml --output="organizations" res=$? { set +x; } 2>/dev/null if [ $res -ne 0 ]; then - echo $'\e[1;32m'"Failed to generate certificates..."$'\e[0m' - exit 1 + fatalln "Failed to generate certificates..." fi - echo "##########################################################" - echo "############ Create Org2 Identities ######################" - echo "##########################################################" + infoln "Create Org2 Identities" set -x cryptogen generate --config=./organizations/cryptogen/crypto-config-org2.yaml --output="organizations" res=$? { set +x; } 2>/dev/null if [ $res -ne 0 ]; then - echo $'\e[1;32m'"Failed to generate certificates..."$'\e[0m' - exit 1 + fatalln "Failed to generate certificates..." fi - echo "##########################################################" - echo "############ Create Orderer Org Identities ###############" - echo "##########################################################" + infoln "Create Orderer Org Identities" set -x cryptogen generate --config=./organizations/cryptogen/crypto-config-orderer.yaml --output="organizations" res=$? { set +x; } 2>/dev/null if [ $res -ne 0 ]; then - echo $'\e[1;32m'"Failed to generate certificates..."$'\e[0m' - exit 1 + fatalln "Failed to generate certificates..." fi fi @@ -251,10 +230,7 @@ function createOrgs() { # Create crypto material using Fabric CAs if [ "$CRYPTO" == "Certificate Authorities" ]; then - echo - echo "##########################################################" - echo "##### Generate certificates using Fabric CA's ############" - echo "##########################################################" + infoln "Generate certificates using Fabric CA's" IMAGE_TAG=${CA_IMAGETAG} docker-compose -f $COMPOSE_FILE_CA up -d 2>&1 @@ -262,28 +238,21 @@ function createOrgs() { sleep 10 - echo "##########################################################" - echo "############ Create Org1 Identities ######################" - echo "##########################################################" + infoln "Create Org1 Identities" createOrg1 - echo "##########################################################" - echo "############ Create Org2 Identities ######################" - echo "##########################################################" + infoln "Create Org2 Identities" createOrg2 - echo "##########################################################" - echo "############ Create Orderer Org Identities ###############" - echo "##########################################################" + infoln "Create Orderer Org Identities" createOrderer fi - echo - echo "Generate CCP files for Org1 and Org2" + infoln "Generate CCP files for Org1 and Org2" ./organizations/ccp-generate.sh } @@ -293,14 +262,14 @@ function createOrgs() { # The configtxgen tool is used to create the genesis block. Configtxgen consumes a # "configtx.yaml" file that contains the definitions for the sample network. The -# genesis block is defiend using the "TwoOrgsOrdererGenesis" profile at the bottom +# genesis block is defined using the "TwoOrgsOrdererGenesis" profile at the bottom # of the file. This profile defines a sample consortium, "SampleConsortium", # consisting of our two Peer Orgs. This consortium defines which organizations are # recognized as members of the network. The peer and ordering organizations are defined # in the "Profiles" section at the top of the file. As part of each organization # profile, the file points to a the location of the MSP directory for each member. # This MSP is used to create the channel MSP that defines the root of trust for -# each organization. In essense, the channel MSP allows the nodes and users to be +# each organization. In essence, the channel MSP allows the nodes and users to be # recognized as network members. The file also specifies the anchor peers for each # peer org. In future steps, this same file is used to create the channel creation # transaction and the anchor peer updates. @@ -318,11 +287,10 @@ function createConsortium() { which configtxgen if [ "$?" -ne 0 ]; then - echo "configtxgen tool not found. exiting" - exit 1 + fatalln "configtxgen tool not found." fi - echo "######### Generating Orderer Genesis block ##############" + infoln "Generating Orderer Genesis block" # Note: For some unknown reason (at least for now) the block file can't be # named orderer.genesis.block or the orderer will fail to launch! @@ -331,13 +299,12 @@ function createConsortium() { res=$? { set +x; } 2>/dev/null if [ $res -ne 0 ]; then - echo $'\e[1;32m'"Failed to generate orderer genesis block..."$'\e[0m' - exit 1 + fatalln "Failed to generate orderer genesis block..." fi } # After we create the org crypto material and the system channel genesis block, -# we can now bring up the peers and orderering service. By default, the base +# we can now bring up the peers and ordering service. By default, the base # file for creating the network is "docker-compose-test-net.yaml" in the ``docker`` # folder. This file defines the environment variables and file mounts that # point the crypto material and genesis block that were created in earlier. @@ -362,18 +329,17 @@ function networkUp() { docker ps -a if [ $? -ne 0 ]; then - echo "ERROR !!!! Unable to start network" - exit 1 + fatalln "Unable to start network" fi } ## call the script to join create the channel and join the peers of org1 and org2 function createChannel() { -## Bring up the network if it is not arleady up. +## Bring up the network if it is not already up. if [ ! -d "organizations/peerOrganizations" ]; then - echo "Bringing up network" + infoln "Bringing up network" networkUp fi @@ -383,21 +349,19 @@ function createChannel() { # create the channel artifacts scripts/createChannel.sh $CHANNEL_NAME $CLI_DELAY $MAX_RETRY $VERBOSE if [ $? -ne 0 ]; then - echo "Error !!! Create channel failed" - exit 1 + fatalln "Create channel failed" fi } -## Call the script to isntall and instantiate a chaincode on the channel +## Call the script to install and instantiate a chaincode on the channel function deployCC() { scripts/deployCC.sh $CHANNEL_NAME $CC_NAME $CC_SRC_PATH $CC_SRC_LANGUAGE $CC_VERSION $CC_SEQUENCE $CC_INIT_FCN $CC_END_POLICY $CC_COLL_CONFIG $CLI_DELAY $MAX_RETRY $VERBOSE if [ $? -ne 0 ]; then - echo "ERROR !!! Deploying chaincode failed" - exit 1 + fatalln "Deploying chaincode failed" fi exit 0 @@ -568,9 +532,7 @@ while [[ $# -ge 1 ]] ; do shift ;; * ) - echo - echo "Unknown flag: $key" - echo + errorln "Unknown flag: $key" printHelp exit 1 ;; @@ -587,22 +549,16 @@ fi # Determine mode of operation and printing out what we asked for if [ "$MODE" == "up" ]; then - echo "Starting nodes with CLI timeout of '${MAX_RETRY}' tries and CLI delay of '${CLI_DELAY}' seconds and using database '${DATABASE}' ${CRYPTO_MODE}" - echo + infoln "Starting nodes with CLI timeout of '${MAX_RETRY}' tries and CLI delay of '${CLI_DELAY}' seconds and using database '${DATABASE}' ${CRYPTO_MODE}" elif [ "$MODE" == "createChannel" ]; then - echo "Creating channel '${CHANNEL_NAME}'." - echo - echo "If network is not up, starting nodes with CLI timeout of '${MAX_RETRY}' tries and CLI delay of '${CLI_DELAY}' seconds and using database '${DATABASE} ${CRYPTO_MODE}" - echo + infoln "Creating channel '${CHANNEL_NAME}'." + infoln "If network is not up, starting nodes with CLI timeout of '${MAX_RETRY}' tries and CLI delay of '${CLI_DELAY}' seconds and using database '${DATABASE} ${CRYPTO_MODE}" elif [ "$MODE" == "down" ]; then - echo "Stopping network" - echo + infoln "Stopping network" elif [ "$MODE" == "restart" ]; then - echo "Restarting network" - echo + infoln "Restarting network" elif [ "$MODE" == "deployCC" ]; then - echo "deploying chaincode on channel '${CHANNEL_NAME}'" - echo + infoln "deploying chaincode on channel '${CHANNEL_NAME}'" else printHelp exit 1 diff --git a/test-network/organizations/fabric-ca/registerEnroll.sh b/test-network/organizations/fabric-ca/registerEnroll.sh index 9ba76b50..6c01061d 100755 --- a/test-network/organizations/fabric-ca/registerEnroll.sh +++ b/test-network/organizations/fabric-ca/registerEnroll.sh @@ -1,15 +1,15 @@ +#!/bin/bash +source scriptUtils.sh -function createOrg1 { +function createOrg1() { - echo - echo "Enroll the CA admin" - echo - mkdir -p organizations/peerOrganizations/org1.example.com/ + infoln "Enroll the CA admin" + mkdir -p organizations/peerOrganizations/org1.example.com/ - export FABRIC_CA_CLIENT_HOME=${PWD}/organizations/peerOrganizations/org1.example.com/ -# rm -rf $FABRIC_CA_CLIENT_HOME/fabric-ca-client-config.yaml -# rm -rf $FABRIC_CA_CLIENT_HOME/msp + export FABRIC_CA_CLIENT_HOME=${PWD}/organizations/peerOrganizations/org1.example.com/ + # rm -rf $FABRIC_CA_CLIENT_HOME/fabric-ca-client-config.yaml + # rm -rf $FABRIC_CA_CLIENT_HOME/msp set -x fabric-ca-client enroll -u https://admin:adminpw@localhost:7054 --caname ca-org1 --tls.certfiles ${PWD}/organizations/fabric-ca/org1/tls-cert.pem @@ -28,49 +28,38 @@ function createOrg1 { OrganizationalUnitIdentifier: admin OrdererOUIdentifier: Certificate: cacerts/localhost-7054-ca-org1.pem - OrganizationalUnitIdentifier: orderer' > ${PWD}/organizations/peerOrganizations/org1.example.com/msp/config.yaml + OrganizationalUnitIdentifier: orderer' >${PWD}/organizations/peerOrganizations/org1.example.com/msp/config.yaml - echo - echo "Register peer0" - echo + infoln "Register peer0" set -x - fabric-ca-client register --caname ca-org1 --id.name peer0 --id.secret peer0pw --id.type peer --tls.certfiles ${PWD}/organizations/fabric-ca/org1/tls-cert.pem + fabric-ca-client register --caname ca-org1 --id.name peer0 --id.secret peer0pw --id.type peer --tls.certfiles ${PWD}/organizations/fabric-ca/org1/tls-cert.pem { set +x; } 2>/dev/null - echo - echo "Register user" - echo + infoln "Register user" set -x fabric-ca-client register --caname ca-org1 --id.name user1 --id.secret user1pw --id.type client --tls.certfiles ${PWD}/organizations/fabric-ca/org1/tls-cert.pem { set +x; } 2>/dev/null - echo - echo "Register the org admin" - echo + infoln "Register the org admin" set -x fabric-ca-client register --caname ca-org1 --id.name org1admin --id.secret org1adminpw --id.type admin --tls.certfiles ${PWD}/organizations/fabric-ca/org1/tls-cert.pem { set +x; } 2>/dev/null - mkdir -p organizations/peerOrganizations/org1.example.com/peers + mkdir -p organizations/peerOrganizations/org1.example.com/peers mkdir -p organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com - echo - echo "## Generate the peer0 msp" - echo + infoln "Generate the peer0 msp" set -x - fabric-ca-client enroll -u https://peer0:peer0pw@localhost:7054 --caname ca-org1 -M ${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/msp --csr.hosts peer0.org1.example.com --tls.certfiles ${PWD}/organizations/fabric-ca/org1/tls-cert.pem + fabric-ca-client enroll -u https://peer0:peer0pw@localhost:7054 --caname ca-org1 -M ${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/msp --csr.hosts peer0.org1.example.com --tls.certfiles ${PWD}/organizations/fabric-ca/org1/tls-cert.pem { set +x; } 2>/dev/null cp ${PWD}/organizations/peerOrganizations/org1.example.com/msp/config.yaml ${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/msp/config.yaml - echo - echo "## Generate the peer0-tls certificates" - echo + infoln "Generate the peer0-tls certificates" set -x fabric-ca-client enroll -u https://peer0:peer0pw@localhost:7054 --caname ca-org1 -M ${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls --enrollment.profile tls --csr.hosts peer0.org1.example.com --csr.hosts localhost --tls.certfiles ${PWD}/organizations/fabric-ca/org1/tls-cert.pem { set +x; } 2>/dev/null - cp ${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/tlscacerts/* ${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt cp ${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/signcerts/* ${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/server.crt cp ${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/keystore/* ${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/server.key @@ -87,39 +76,32 @@ function createOrg1 { mkdir -p organizations/peerOrganizations/org1.example.com/users mkdir -p organizations/peerOrganizations/org1.example.com/users/User1@org1.example.com - echo - echo "## Generate the user msp" - echo + infoln "Generate the user msp" set -x - fabric-ca-client enroll -u https://user1:user1pw@localhost:7054 --caname ca-org1 -M ${PWD}/organizations/peerOrganizations/org1.example.com/users/User1@org1.example.com/msp --tls.certfiles ${PWD}/organizations/fabric-ca/org1/tls-cert.pem + fabric-ca-client enroll -u https://user1:user1pw@localhost:7054 --caname ca-org1 -M ${PWD}/organizations/peerOrganizations/org1.example.com/users/User1@org1.example.com/msp --tls.certfiles ${PWD}/organizations/fabric-ca/org1/tls-cert.pem { set +x; } 2>/dev/null cp ${PWD}/organizations/peerOrganizations/org1.example.com/msp/config.yaml ${PWD}/organizations/peerOrganizations/org1.example.com/users/User1@org1.example.com/msp/config.yaml mkdir -p organizations/peerOrganizations/org1.example.com/users/Admin@org1.example.com - echo - echo "## Generate the org admin msp" - echo + infoln "Generate the org admin msp" set -x - fabric-ca-client enroll -u https://org1admin:org1adminpw@localhost:7054 --caname ca-org1 -M ${PWD}/organizations/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp --tls.certfiles ${PWD}/organizations/fabric-ca/org1/tls-cert.pem + fabric-ca-client enroll -u https://org1admin:org1adminpw@localhost:7054 --caname ca-org1 -M ${PWD}/organizations/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp --tls.certfiles ${PWD}/organizations/fabric-ca/org1/tls-cert.pem { set +x; } 2>/dev/null cp ${PWD}/organizations/peerOrganizations/org1.example.com/msp/config.yaml ${PWD}/organizations/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/config.yaml } +function createOrg2() { -function createOrg2 { + infoln "Enroll the CA admin" + mkdir -p organizations/peerOrganizations/org2.example.com/ - echo - echo "Enroll the CA admin" - echo - mkdir -p organizations/peerOrganizations/org2.example.com/ - - export FABRIC_CA_CLIENT_HOME=${PWD}/organizations/peerOrganizations/org2.example.com/ -# rm -rf $FABRIC_CA_CLIENT_HOME/fabric-ca-client-config.yaml -# rm -rf $FABRIC_CA_CLIENT_HOME/msp + export FABRIC_CA_CLIENT_HOME=${PWD}/organizations/peerOrganizations/org2.example.com/ + # rm -rf $FABRIC_CA_CLIENT_HOME/fabric-ca-client-config.yaml + # rm -rf $FABRIC_CA_CLIENT_HOME/msp set -x fabric-ca-client enroll -u https://admin:adminpw@localhost:8054 --caname ca-org2 --tls.certfiles ${PWD}/organizations/fabric-ca/org2/tls-cert.pem @@ -138,49 +120,38 @@ function createOrg2 { OrganizationalUnitIdentifier: admin OrdererOUIdentifier: Certificate: cacerts/localhost-8054-ca-org2.pem - OrganizationalUnitIdentifier: orderer' > ${PWD}/organizations/peerOrganizations/org2.example.com/msp/config.yaml + OrganizationalUnitIdentifier: orderer' >${PWD}/organizations/peerOrganizations/org2.example.com/msp/config.yaml - echo - echo "Register peer0" - echo + infoln "Register peer0" set -x - fabric-ca-client register --caname ca-org2 --id.name peer0 --id.secret peer0pw --id.type peer --tls.certfiles ${PWD}/organizations/fabric-ca/org2/tls-cert.pem + fabric-ca-client register --caname ca-org2 --id.name peer0 --id.secret peer0pw --id.type peer --tls.certfiles ${PWD}/organizations/fabric-ca/org2/tls-cert.pem { set +x; } 2>/dev/null - echo - echo "Register user" - echo + infoln "Register user" set -x fabric-ca-client register --caname ca-org2 --id.name user1 --id.secret user1pw --id.type client --tls.certfiles ${PWD}/organizations/fabric-ca/org2/tls-cert.pem { set +x; } 2>/dev/null - echo - echo "Register the org admin" - echo + infoln "Register the org admin" set -x fabric-ca-client register --caname ca-org2 --id.name org2admin --id.secret org2adminpw --id.type admin --tls.certfiles ${PWD}/organizations/fabric-ca/org2/tls-cert.pem { set +x; } 2>/dev/null - mkdir -p organizations/peerOrganizations/org2.example.com/peers + mkdir -p organizations/peerOrganizations/org2.example.com/peers mkdir -p organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com - echo - echo "## Generate the peer0 msp" - echo + infoln "Generate the peer0 msp" set -x - fabric-ca-client enroll -u https://peer0:peer0pw@localhost:8054 --caname ca-org2 -M ${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/msp --csr.hosts peer0.org2.example.com --tls.certfiles ${PWD}/organizations/fabric-ca/org2/tls-cert.pem + fabric-ca-client enroll -u https://peer0:peer0pw@localhost:8054 --caname ca-org2 -M ${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/msp --csr.hosts peer0.org2.example.com --tls.certfiles ${PWD}/organizations/fabric-ca/org2/tls-cert.pem { set +x; } 2>/dev/null cp ${PWD}/organizations/peerOrganizations/org2.example.com/msp/config.yaml ${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/msp/config.yaml - echo - echo "## Generate the peer0-tls certificates" - echo + infoln "Generate the peer0-tls certificates" set -x fabric-ca-client enroll -u https://peer0:peer0pw@localhost:8054 --caname ca-org2 -M ${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls --enrollment.profile tls --csr.hosts peer0.org2.example.com --csr.hosts localhost --tls.certfiles ${PWD}/organizations/fabric-ca/org2/tls-cert.pem { set +x; } 2>/dev/null - cp ${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/tlscacerts/* ${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt cp ${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/signcerts/* ${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/server.crt cp ${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/keystore/* ${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/server.key @@ -197,38 +168,32 @@ function createOrg2 { mkdir -p organizations/peerOrganizations/org2.example.com/users mkdir -p organizations/peerOrganizations/org2.example.com/users/User1@org2.example.com - echo - echo "## Generate the user msp" - echo + infoln "Generate the user msp" set -x - fabric-ca-client enroll -u https://user1:user1pw@localhost:8054 --caname ca-org2 -M ${PWD}/organizations/peerOrganizations/org2.example.com/users/User1@org2.example.com/msp --tls.certfiles ${PWD}/organizations/fabric-ca/org2/tls-cert.pem + fabric-ca-client enroll -u https://user1:user1pw@localhost:8054 --caname ca-org2 -M ${PWD}/organizations/peerOrganizations/org2.example.com/users/User1@org2.example.com/msp --tls.certfiles ${PWD}/organizations/fabric-ca/org2/tls-cert.pem { set +x; } 2>/dev/null cp ${PWD}/organizations/peerOrganizations/org2.example.com/msp/config.yaml ${PWD}/organizations/peerOrganizations/org2.example.com/users/User1@org2.example.com/msp/config.yaml mkdir -p organizations/peerOrganizations/org2.example.com/users/Admin@org2.example.com - echo - echo "## Generate the org admin msp" - echo + infoln "Generate the org admin msp" set -x - fabric-ca-client enroll -u https://org2admin:org2adminpw@localhost:8054 --caname ca-org2 -M ${PWD}/organizations/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp --tls.certfiles ${PWD}/organizations/fabric-ca/org2/tls-cert.pem + fabric-ca-client enroll -u https://org2admin:org2adminpw@localhost:8054 --caname ca-org2 -M ${PWD}/organizations/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp --tls.certfiles ${PWD}/organizations/fabric-ca/org2/tls-cert.pem { set +x; } 2>/dev/null cp ${PWD}/organizations/peerOrganizations/org2.example.com/msp/config.yaml ${PWD}/organizations/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp/config.yaml } -function createOrderer { +function createOrderer() { - echo - echo "Enroll the CA admin" - echo - mkdir -p organizations/ordererOrganizations/example.com + infoln "Enroll the CA admin" + mkdir -p organizations/ordererOrganizations/example.com - export FABRIC_CA_CLIENT_HOME=${PWD}/organizations/ordererOrganizations/example.com -# rm -rf $FABRIC_CA_CLIENT_HOME/fabric-ca-client-config.yaml -# rm -rf $FABRIC_CA_CLIENT_HOME/msp + export FABRIC_CA_CLIENT_HOME=${PWD}/organizations/ordererOrganizations/example.com + # rm -rf $FABRIC_CA_CLIENT_HOME/fabric-ca-client-config.yaml + # rm -rf $FABRIC_CA_CLIENT_HOME/msp set -x fabric-ca-client enroll -u https://admin:adminpw@localhost:9054 --caname ca-orderer --tls.certfiles ${PWD}/organizations/fabric-ca/ordererOrg/tls-cert.pem @@ -247,40 +212,31 @@ function createOrderer { OrganizationalUnitIdentifier: admin OrdererOUIdentifier: Certificate: cacerts/localhost-9054-ca-orderer.pem - OrganizationalUnitIdentifier: orderer' > ${PWD}/organizations/ordererOrganizations/example.com/msp/config.yaml + OrganizationalUnitIdentifier: orderer' >${PWD}/organizations/ordererOrganizations/example.com/msp/config.yaml - - echo - echo "Register orderer" - echo + infoln "Register orderer" set -x - fabric-ca-client register --caname ca-orderer --id.name orderer --id.secret ordererpw --id.type orderer --tls.certfiles ${PWD}/organizations/fabric-ca/ordererOrg/tls-cert.pem + fabric-ca-client register --caname ca-orderer --id.name orderer --id.secret ordererpw --id.type orderer --tls.certfiles ${PWD}/organizations/fabric-ca/ordererOrg/tls-cert.pem { set +x; } 2>/dev/null - echo - echo "Register the orderer admin" - echo + infoln "Register the orderer admin" set -x fabric-ca-client register --caname ca-orderer --id.name ordererAdmin --id.secret ordererAdminpw --id.type admin --tls.certfiles ${PWD}/organizations/fabric-ca/ordererOrg/tls-cert.pem { set +x; } 2>/dev/null - mkdir -p organizations/ordererOrganizations/example.com/orderers + mkdir -p organizations/ordererOrganizations/example.com/orderers mkdir -p organizations/ordererOrganizations/example.com/orderers/example.com mkdir -p organizations/ordererOrganizations/example.com/orderers/orderer.example.com - echo - echo "## Generate the orderer msp" - echo + infoln "Generate the orderer msp" set -x - fabric-ca-client enroll -u https://orderer:ordererpw@localhost:9054 --caname ca-orderer -M ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp --csr.hosts orderer.example.com --csr.hosts localhost --tls.certfiles ${PWD}/organizations/fabric-ca/ordererOrg/tls-cert.pem + fabric-ca-client enroll -u https://orderer:ordererpw@localhost:9054 --caname ca-orderer -M ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp --csr.hosts orderer.example.com --csr.hosts localhost --tls.certfiles ${PWD}/organizations/fabric-ca/ordererOrg/tls-cert.pem { set +x; } 2>/dev/null cp ${PWD}/organizations/ordererOrganizations/example.com/msp/config.yaml ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/config.yaml - echo - echo "## Generate the orderer-tls certificates" - echo + infoln "Generate the orderer-tls certificates" set -x fabric-ca-client enroll -u https://orderer:ordererpw@localhost:9054 --caname ca-orderer -M ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/tls --enrollment.profile tls --csr.hosts orderer.example.com --csr.hosts localhost --tls.certfiles ${PWD}/organizations/fabric-ca/ordererOrg/tls-cert.pem { set +x; } 2>/dev/null @@ -298,14 +254,11 @@ function createOrderer { mkdir -p organizations/ordererOrganizations/example.com/users mkdir -p organizations/ordererOrganizations/example.com/users/Admin@example.com - echo - echo "## Generate the admin msp" - echo + infoln "Generate the admin msp" set -x - fabric-ca-client enroll -u https://ordererAdmin:ordererAdminpw@localhost:9054 --caname ca-orderer -M ${PWD}/organizations/ordererOrganizations/example.com/users/Admin@example.com/msp --tls.certfiles ${PWD}/organizations/fabric-ca/ordererOrg/tls-cert.pem + fabric-ca-client enroll -u https://ordererAdmin:ordererAdminpw@localhost:9054 --caname ca-orderer -M ${PWD}/organizations/ordererOrganizations/example.com/users/Admin@example.com/msp --tls.certfiles ${PWD}/organizations/fabric-ca/ordererOrg/tls-cert.pem { set +x; } 2>/dev/null cp ${PWD}/organizations/ordererOrganizations/example.com/msp/config.yaml ${PWD}/organizations/ordererOrganizations/example.com/users/Admin@example.com/msp/config.yaml - } diff --git a/test-network/scriptUtils.sh b/test-network/scriptUtils.sh new file mode 100755 index 00000000..3b46a1a8 --- /dev/null +++ b/test-network/scriptUtils.sh @@ -0,0 +1,43 @@ +#!/bin/bash + +C_RESET='\033[0m' +C_RED='\033[0;31m' +C_GREEN='\033[0;32m' +C_BLUE='\033[0;34m' +C_YELLOW='\033[1;33m' + +# println echos string +function println() { + echo -e "$1" +} + +# errorln echos i red color +function errorln() { + println "${C_RED}${1}${C_RESET}" +} + +# successln echos in green color +function successln() { + println "${C_GREEN}${1}${C_RESET}" +} + +# infoln echos in blue color +function infoln() { + println "${C_BLUE}${1}${C_RESET}" +} + +# warnln echos in yellow color +function warnln() { + println "${C_YELLOW}${1}${C_RESET}" +} + +# fatalln echos in red color and exits with fail status +function fatalln() { + errorln "$1" + exit 1 +} + +export -f errorln +export -f successln +export -f infoln +export -f warnln diff --git a/test-network/scripts/createChannel.sh b/test-network/scripts/createChannel.sh index f23881bf..22707937 100755 --- a/test-network/scripts/createChannel.sh +++ b/test-network/scripts/createChannel.sh @@ -1,5 +1,6 @@ #!/bin/bash +source scriptUtils.sh CHANNEL_NAME="$1" DELAY="$2" @@ -24,10 +25,8 @@ createChannelTx() { res=$? { set +x; } 2>/dev/null if [ $res -ne 0 ]; then - echo "Failed to generate channel configuration transaction..." - exit 1 + fatalln "Failed to generate channel configuration transaction..." fi - echo } @@ -35,16 +34,14 @@ createAncorPeerTx() { for orgmsp in Org1MSP Org2MSP; do - echo "####### Generating anchor peer update transaction for ${orgmsp} ##########" + infoln "Generating anchor peer update transaction for ${orgmsp}" set -x configtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate ./channel-artifacts/${orgmsp}anchors.tx -channelID $CHANNEL_NAME -asOrg ${orgmsp} res=$? { set +x; } 2>/dev/null if [ $res -ne 0 ]; then - echo "Failed to generate anchor peer update transaction for ${orgmsp}..." - exit 1 + fatalln "Failed to generate anchor peer update transaction for ${orgmsp}..." fi - echo done } @@ -64,9 +61,7 @@ createChannel() { done cat log.txt verifyResult $res "Channel creation failed" - echo - echo "===================== Channel '$CHANNEL_NAME' created ===================== " - echo + successln "Channel '$CHANNEL_NAME' created" } # queryCommitted ORG @@ -86,7 +81,6 @@ joinChannel() { COUNTER=$(expr $COUNTER + 1) done cat log.txt - echo verifyResult $res "After $MAX_RETRY attempts, peer0.org${ORG} has failed to join channel '$CHANNEL_NAME' " } @@ -107,49 +101,44 @@ updateAnchorPeers() { done cat log.txt verifyResult $res "Anchor peer update failed" - echo "===================== Anchor peers updated for org '$CORE_PEER_LOCALMSPID' on channel '$CHANNEL_NAME' ===================== " + successln "Anchor peers updated for org '$CORE_PEER_LOCALMSPID' on channel '$CHANNEL_NAME'" sleep $DELAY - echo } verifyResult() { if [ $1 -ne 0 ]; then - echo "!!!!!!!!!!!!!!! "$2" !!!!!!!!!!!!!!!!" - echo - exit 1 + fatalln "$2" fi } FABRIC_CFG_PATH=${PWD}/configtx ## Create channeltx -echo "### Generating channel create transaction '${CHANNEL_NAME}.tx' ###" +infoln "Generating channel create transaction '${CHANNEL_NAME}.tx'" createChannelTx ## Create anchorpeertx -echo "### Generating anchor peer update transactions ###" +infoln "Generating anchor peer update transactions" createAncorPeerTx FABRIC_CFG_PATH=$PWD/../config/ ## Create channel -echo "Creating channel "$CHANNEL_NAME +infoln "Creating channel ${CHANNEL_NAME}" createChannel ## Join all the peers to the channel -echo "Join Org1 peers to the channel..." +infoln "Join Org1 peers to the channel..." joinChannel 1 -echo "Join Org2 peers to the channel..." +infoln "Join Org2 peers to the channel..." joinChannel 2 ## Set the anchor peers for each org in the channel -echo "Updating anchor peers for org1..." +infoln "Updating anchor peers for org1..." updateAnchorPeers 1 -echo "Updating anchor peers for org2..." +infoln "Updating anchor peers for org2..." updateAnchorPeers 2 -echo -echo "========= Channel successfully joined =========== " -echo +successln "Channel successfully joined" exit 0 diff --git a/test-network/scripts/deployCC.sh b/test-network/scripts/deployCC.sh index 8491cbeb..1b75ce62 100755 --- a/test-network/scripts/deployCC.sh +++ b/test-network/scripts/deployCC.sh @@ -1,3 +1,7 @@ +#!/bin/bash + +source scriptUtils.sh + CHANNEL_NAME=${1:-"mychannel"} CC_NAME=${2:-"basic"} CC_SRC_PATH=${3:-"NA"} @@ -11,134 +15,125 @@ DELAY=${10:-"3"} MAX_RETRY=${11:-"5"} VERBOSE=${12:-"false"} -echo --- executing with the following -echo - CHANNEL_NAME:$'\e[0;32m'$CHANNEL_NAME$'\e[0m' -echo - CC_NAME:$'\e[0;32m'$CC_NAME$'\e[0m' -echo - CC_SRC_PATH:$'\e[0;32m'$CC_SRC_PATH$'\e[0m' -echo - CC_SRC_LANGUAGE:$'\e[0;32m'$CC_SRC_LANGUAGE$'\e[0m' -echo - CC_VERSION:$'\e[0;32m'$CC_VERSION$'\e[0m' -echo - CC_SEQUENCE:$'\e[0;32m'$CC_SEQUENCE$'\e[0m' -echo - CC_END_POLICY:$'\e[0;32m'$CC_END_POLICY$'\e[0m' -echo - CC_COLL_CONFIG:$'\e[0;32m'$CC_COLL_CONFIG$'\e[0m' -echo - CC_INIT_FCN:$'\e[0;32m'$CC_INIT_FCN$'\e[0m' -echo - DELAY:$'\e[0;32m'$DELAY$'\e[0m' -echo - MAX_RETRY:$'\e[0;32m'$MAX_RETRY$'\e[0m' -echo - VERBOSE:$'\e[0;32m'$VERBOSE$'\e[0m' +println "executing with the following" +println "- CHANNEL_NAME: ${C_GREEN}${CHANNEL_NAME}${C_RESET}" +println "- CC_NAME: ${C_GREEN}${CC_NAME}${C_RESET}" +println "- CC_SRC_PATH: ${C_GREEN}${CC_SRC_PATH}${C_RESET}" +println "- CC_SRC_LANGUAGE: ${C_GREEN}${CC_SRC_LANGUAGE}${C_RESET}" +println "- CC_VERSION: ${C_GREEN}${CC_VERSION}${C_RESET}" +println "- CC_SEQUENCE: ${C_GREEN}${CC_SEQUENCE}${C_RESET}" +println "- CC_END_POLICY: ${C_GREEN}${CC_END_POLICY}${C_RESET}" +println "- CC_COLL_CONFIG: ${C_GREEN}${CC_COLL_CONFIG}${C_RESET}" +println "- CC_INIT_FCN: ${C_GREEN}${CC_INIT_FCN}${C_RESET}" +println "- DELAY: ${C_GREEN}${DELAY}${C_RESET}" +println "- MAX_RETRY: ${C_GREEN}${MAX_RETRY}${C_RESET}" +println "- VERBOSE: ${C_GREEN}${VERBOSE}${C_RESET}" -CC_SRC_LANGUAGE=`echo "$CC_SRC_LANGUAGE" | tr [:upper:] [:lower:]` +CC_SRC_LANGUAGE=$(echo "$CC_SRC_LANGUAGE" | tr [:upper:] [:lower:]) FABRIC_CFG_PATH=$PWD/../config/ - - # User has not provided a path, therefore the CC_NAME must # be the short name of a known chaincode sample if [ "$CC_SRC_PATH" = "NA" ]; then - echo Determining the path to the chaincode - # first see which chaincode we have. This will be based on the - # short name of the known chaincode sample - if [ "$CC_NAME" = "basic" ]; then - echo $'\e[0;32m'asset-transfer-basic$'\e[0m' chaincode - CC_SRC_PATH="../asset-transfer-basic" - elif [ "$CC_NAME" = "secured" ]; then - echo $'\e[0;32m'asset-transfer-secured-agreeement$'\e[0m' chaincode - CC_SRC_PATH="../asset-transfer-secured-agreement" - elif [ "$CC_NAME" = "ledger" ]; then - echo $'\e[0;32m'asset-transfer-ledger-agreeement$'\e[0m' chaincode - CC_SRC_PATH="../asset-transfer-ledger-queries" - elif [ "$CC_NAME" = "private" ]; then - echo $'\e[0;32m'asset-transfer-private-data$'\e[0m' chaincode - CC_SRC_PATH="../asset-transfer-private-data" - elif [ "$CC_NAME" = "sbe" ]; then - echo $'\e[0;32m'asset-transfer-sbe$'\e[0m' chaincode - CC_SRC_PATH="../asset-transfer-sbe" - else - echo The chaincode name ${CC_NAME} is not supported by this script - echo Supported chaincode names are: basic, ledger, private, sbe, secured - exit 1 - fi + infoln "Determining the path to the chaincode" + # first see which chaincode we have. This will be based on the + # short name of the known chaincode sample + if [ "$CC_NAME" = "basic" ]; then + println $'\e[0;32m'asset-transfer-basic$'\e[0m' chaincode + CC_SRC_PATH="../asset-transfer-basic" + elif [ "$CC_NAME" = "secured" ]; then + println $'\e[0;32m'asset-transfer-secured-agreeement$'\e[0m' chaincode + CC_SRC_PATH="../asset-transfer-secured-agreement" + elif [ "$CC_NAME" = "ledger" ]; then + println $'\e[0;32m'asset-transfer-ledger-agreeement$'\e[0m' chaincode + CC_SRC_PATH="../asset-transfer-ledger-queries" + elif [ "$CC_NAME" = "private" ]; then + println $'\e[0;32m'asset-transfer-private-data$'\e[0m' chaincode + CC_SRC_PATH="../asset-transfer-private-data" + elif [ "$CC_NAME" = "sbe" ]; then + println $'\e[0;32m'asset-transfer-sbe$'\e[0m' chaincode + CC_SRC_PATH="../asset-transfer-sbe" + else + fatalln "The chaincode name ${CC_NAME} is not supported by this script. Supported chaincode names are: basic, ledger, private, sbe, secured" + fi - # now see what language it is written in - if [ "$CC_SRC_LANGUAGE" = "go" ]; then - CC_SRC_PATH="$CC_SRC_PATH/chaincode-go/" - elif [ "$CC_SRC_LANGUAGE" = "java" ]; then - CC_SRC_PATH="$CC_SRC_PATH/chaincode-java/" - elif [ "$CC_SRC_LANGUAGE" = "javascript" ]; then - CC_SRC_PATH="$CC_SRC_PATH/chaincode-javascript/" - elif [ "$CC_SRC_LANGUAGE" = "typescript" ]; then - CC_SRC_PATH="$CC_SRC_PATH/chaincode-typescript/" - fi + # now see what language it is written in + if [ "$CC_SRC_LANGUAGE" = "go" ]; then + CC_SRC_PATH="$CC_SRC_PATH/chaincode-go/" + elif [ "$CC_SRC_LANGUAGE" = "java" ]; then + CC_SRC_PATH="$CC_SRC_PATH/chaincode-java/" + elif [ "$CC_SRC_LANGUAGE" = "javascript" ]; then + CC_SRC_PATH="$CC_SRC_PATH/chaincode-javascript/" + elif [ "$CC_SRC_LANGUAGE" = "typescript" ]; then + CC_SRC_PATH="$CC_SRC_PATH/chaincode-typescript/" + fi - # check that the language is available for the sample chaincode - if [ ! -d "$CC_SRC_PATH" ]; then - echo The smart contract language "$CC_SRC_LANGUAGE" is not yet available for - echo the "$CC_NAME" sample smart contract - exit 1 - fi + # check that the language is available for the sample chaincode + if [ ! -d "$CC_SRC_PATH" ]; then + fatalln "The smart contract language \"$CC_SRC_LANGUAGE\" is not yet available for the \"$CC_NAME\" sample smart contract" + fi ## Make sure that the path the chaincode exists if provided elif [ ! -d "$CC_SRC_PATH" ]; then - echo Path to chaincode does not exist. Please provide different path - exit 1 + fatalln "Path to chaincode does not exist. Please provide different path" fi # do some language specific preparation to the chaincode before packaging if [ "$CC_SRC_LANGUAGE" = "go" ]; then - CC_RUNTIME_LANGUAGE=golang + CC_RUNTIME_LANGUAGE=golang - echo Vendoring Go dependencies at $CC_SRC_PATH - pushd $CC_SRC_PATH - GO111MODULE=on go mod vendor - popd - echo Finished vendoring Go dependencies + infoln "Vendoring Go dependencies at $CC_SRC_PATH" + pushd $CC_SRC_PATH + GO111MODULE=on go mod vendor + popd + successln "Finished vendoring Go dependencies" elif [ "$CC_SRC_LANGUAGE" = "java" ]; then - CC_RUNTIME_LANGUAGE=java + CC_RUNTIME_LANGUAGE=java - echo Compiling Java code ... - pushd $CC_SRC_PATH - ./gradlew installDist - popd - echo Finished compiling Java code - CC_SRC_PATH=$CC_SRC_PATH/build/install/$CC_NAME + infoln "Compiling Java code..." + pushd $CC_SRC_PATH + ./gradlew installDist + popd + successln "Finished compiling Java code" + CC_SRC_PATH=$CC_SRC_PATH/build/install/$CC_NAME elif [ "$CC_SRC_LANGUAGE" = "javascript" ]; then - CC_RUNTIME_LANGUAGE=node + CC_RUNTIME_LANGUAGE=node elif [ "$CC_SRC_LANGUAGE" = "typescript" ]; then - CC_RUNTIME_LANGUAGE=node + CC_RUNTIME_LANGUAGE=node - echo Compiling TypeScript code into JavaScript ... - pushd $CC_SRC_PATH - npm install - npm run build - popd - echo Finished compiling TypeScript code into JavaScript + infoln "Compiling TypeScript code into JavaScript..." + pushd $CC_SRC_PATH + npm install + npm run build + popd + successln "Finished compiling TypeScript code into JavaScript" else - echo The chaincode language ${CC_SRC_LANGUAGE} is not supported by this script - echo Supported chaincode languages are: go, java, javascript, and typescript - exit 1 + fatalln "The chaincode language ${CC_SRC_LANGUAGE} is not supported by this script. Supported chaincode languages are: go, java, javascript, and typescript" + exit 1 fi INIT_REQUIRED="--init-required" # check if the init fcn should be called if [ "$CC_INIT_FCN" = "NA" ]; then - INIT_REQUIRED="" + INIT_REQUIRED="" fi if [ "$CC_END_POLICY" = "NA" ]; then - CC_END_POLICY="" + CC_END_POLICY="" else - CC_END_POLICY="--signature-policy $CC_END_POLICY" + CC_END_POLICY="--signature-policy $CC_END_POLICY" fi if [ "$CC_COLL_CONFIG" = "NA" ]; then - CC_COLL_CONFIG="" + CC_COLL_CONFIG="" else - CC_COLL_CONFIG="--collections-config $CC_COLL_CONFIG" + CC_COLL_CONFIG="--collections-config $CC_COLL_CONFIG" fi - #if [ "$CC_INIT_FCN" = "NA" ]; then # INIT_REQUIRED="" #fi @@ -146,208 +141,188 @@ fi # import utils . scripts/envVar.sh - packageChaincode() { - ORG=$1 - setGlobals $ORG - set -x - peer lifecycle chaincode package ${CC_NAME}.tar.gz --path ${CC_SRC_PATH} --lang ${CC_RUNTIME_LANGUAGE} --label ${CC_NAME}_${CC_VERSION} >&log.txt - res=$? - { set +x; } 2>/dev/null - cat log.txt - verifyResult $res "Chaincode packaging on peer0.org${ORG} has failed" - echo "===================== Chaincode is packaged on peer0.org${ORG} ===================== " - echo + ORG=$1 + setGlobals $ORG + set -x + peer lifecycle chaincode package ${CC_NAME}.tar.gz --path ${CC_SRC_PATH} --lang ${CC_RUNTIME_LANGUAGE} --label ${CC_NAME}_${CC_VERSION} >&log.txt + res=$? + { set +x; } 2>/dev/null + cat log.txt + verifyResult $res "Chaincode packaging on peer0.org${ORG} has failed" + successln "Chaincode is packaged on peer0.org${ORG}" } # installChaincode PEER ORG installChaincode() { - ORG=$1 - setGlobals $ORG - set -x - peer lifecycle chaincode install ${CC_NAME}.tar.gz >&log.txt - res=$? - { set +x; } 2>/dev/null - cat log.txt - verifyResult $res "Chaincode installation on peer0.org${ORG} has failed" - echo "===================== Chaincode is installed on peer0.org${ORG} ===================== " - echo + ORG=$1 + setGlobals $ORG + set -x + peer lifecycle chaincode install ${CC_NAME}.tar.gz >&log.txt + res=$? + { 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 queryInstalled() { - ORG=$1 - setGlobals $ORG - set -x - peer lifecycle chaincode queryinstalled >&log.txt - res=$? - { set +x; } 2>/dev/null - cat log.txt - PACKAGE_ID=$(sed -n "/${CC_NAME}_${CC_VERSION}/{s/^Package ID: //; s/, Label:.*$//; p;}" log.txt) - verifyResult $res "Query installed on peer0.org${ORG} has failed" - echo "===================== Query installed successful on peer0.org${ORG} on channel ===================== " - echo + ORG=$1 + setGlobals $ORG + set -x + peer lifecycle chaincode queryinstalled >&log.txt + res=$? + { set +x; } 2>/dev/null + cat log.txt + PACKAGE_ID=$(sed -n "/${CC_NAME}_${CC_VERSION}/{s/^Package ID: //; s/, Label:.*$//; p;}" 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 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" - echo "===================== Chaincode definition approved on peer0.org${ORG} on channel '$CHANNEL_NAME' ===================== " - echo + 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 checkCommitReadiness() { - ORG=$1 - shift 1 - setGlobals $ORG - echo "===================== 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 - echo "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 - echo "===================== Checking the commit readiness of the chaincode definition successful on peer0.org${ORG} on channel '$CHANNEL_NAME' ===================== " - else - echo - echo $'\e[1;31m'"!!!!!!!!!!!!!!! After $MAX_RETRY attempts, Check commit readiness result on peer0.org${ORG} is INVALID !!!!!!!!!!!!!!!!"$'\e[0m' - echo - exit 1 - fi + 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)... commitChaincodeDefinition() { - parsePeerConnectionParameters $@ - res=$? - verifyResult $res "Invoke transaction failed on channel '$CHANNEL_NAME' due to uneven number of peer and org parameters " + 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" - echo "===================== Chaincode definition committed on channel '$CHANNEL_NAME' ===================== " - echo + # 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 queryCommitted() { - ORG=$1 - setGlobals $ORG - EXPECTED_RESULT="Version: ${CC_VERSION}, Sequence: ${CC_SEQUENCE}, Endorsement Plugin: escc, Validation Plugin: vscc" - echo "===================== 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 - echo "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 - echo - cat log.txt - if test $rc -eq 0; then - echo "===================== Query chaincode definition successful on peer0.org${ORG} on channel '$CHANNEL_NAME' ===================== " - echo - else - echo - echo $'\e[1;31m'"!!!!!!!!!!!!!!! After $MAX_RETRY attempts, Query chaincode definition result on peer0.org${ORG} is INVALID !!!!!!!!!!!!!!!!"$'\e[0m' - echo - exit 1 - fi + 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 } chaincodeInvokeInit() { - parsePeerConnectionParameters $@ - res=$? - verifyResult $res "Invoke transaction failed on channel '$CHANNEL_NAME' due to uneven number of peer and org parameters " + 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 - fcn_call='{"function":"'${CC_INIT_FCN}'","Args":[]}' - echo 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 - cat log.txt - verifyResult $res "Invoke execution on $PEERS failed " - echo "===================== Invoke transaction successful on $PEERS on channel '$CHANNEL_NAME' ===================== " - echo + # 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 + fcn_call='{"function":"'${CC_INIT_FCN}'","Args":[]}' + 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 + cat log.txt + verifyResult $res "Invoke execution on $PEERS failed " + successln "Invoke transaction successful on $PEERS on channel '$CHANNEL_NAME'" } chaincodeQuery() { - ORG=$1 - setGlobals $ORG - echo "===================== 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 - echo "Attempting to Query peer0.org${ORG}, Retry after $DELAY seconds." - set -x - peer chaincode query -C $CHANNEL_NAME -n ${CC_NAME} -c '{"Args":["queryAllCars"]}' >&log.txt - res=$? - { set +x; } 2>/dev/null - let rc=$res - COUNTER=$(expr $COUNTER + 1) - done - echo - cat log.txt - if test $rc -eq 0; then - echo "===================== Query successful on peer0.org${ORG} on channel '$CHANNEL_NAME' ===================== " - echo - else - echo - echo $'\e[1;31m'"!!!!!!!!!!!!!!! After $MAX_RETRY attempts, Query result on peer0.org${ORG} is INVALID !!!!!!!!!!!!!!!!"$'\e[0m' - echo - exit 1 - fi + 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":["queryAllCars"]}' >&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 } ## package the chaincode packageChaincode 1 ## Install chaincode on peer0.org1 and peer0.org2 -echo "Installing chaincode on peer0.org1..." +infoln "Installing chaincode on peer0.org1..." installChaincode 1 -echo "Install chaincode on peer0.org2..." +infoln "Install chaincode on peer0.org2..." installChaincode 2 ## query whether the chaincode is installed @@ -379,10 +354,9 @@ queryCommitted 2 ## Invoke the chaincode - this does require that the chaincode have the 'initLedger' ## method defined if [ "$CC_INIT_FCN" = "NA" ]; then - echo "===================== Chaincode initialization is not required ===================== " - echo + infoln "Chaincode initialization is not required" else - chaincodeInvokeInit 1 2 + chaincodeInvokeInit 1 2 fi exit 0 diff --git a/test-network/scripts/envVar.sh b/test-network/scripts/envVar.sh index 6ab0aaa0..8ef2bd25 100755 --- a/test-network/scripts/envVar.sh +++ b/test-network/scripts/envVar.sh @@ -6,6 +6,8 @@ # This is a collection of bash functions used by different scripts +source scriptUtils.sh + export CORE_PEER_TLS_ENABLED=true export ORDERER_CA=${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem export PEER0_ORG1_CA=${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt @@ -27,7 +29,7 @@ setGlobals() { else USING_ORG="${OVERRIDE_ORG}" fi - echo "Using organization ${USING_ORG}" + infoln "Using organization ${USING_ORG}" if [ $USING_ORG -eq 1 ]; then export CORE_PEER_LOCALMSPID="Org1MSP" export CORE_PEER_TLS_ROOTCERT_FILE=$PEER0_ORG1_CA @@ -45,7 +47,7 @@ setGlobals() { export CORE_PEER_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org3.example.com/users/Admin@org3.example.com/msp export CORE_PEER_ADDRESS=localhost:11051 else - echo "================== ERROR !!! ORG Unknown ==================" + errorln "ORG Unknown" fi if [ "$VERBOSE" == "true" ]; then @@ -63,7 +65,7 @@ parsePeerConnectionParameters() { while [ "$#" -gt 0 ]; do setGlobals $1 PEER="peer0.org$1" - ## Set peer adresses + ## Set peer addresses PEERS="$PEERS $PEER" PEER_CONN_PARMS="$PEER_CONN_PARMS --peerAddresses $CORE_PEER_ADDRESS" ## Set path to TLS certificate @@ -78,8 +80,6 @@ parsePeerConnectionParameters() { verifyResult() { if [ $1 -ne 0 ]; then - echo $'\e[1;31m'!!!!!!!!!!!!!!! $2 !!!!!!!!!!!!!!!!$'\e[0m' - echo - exit 1 + fatalln "$2" fi }