mirror of
https://github.com/hyperledger/fabric-samples.git
synced 2026-06-22 09:35:10 +00:00
Allow install of a chaincode
options on the network script to deploy chaincode
-ccn The name to be used as the deployed name and used as
the short name of known chaincodes when the -ccp is not included.
known short names
'basic' - asset-transfer-basic
'secure' - asset-transfer-secured-agreement
'ledger' - asset-transfer-ledger-queries
'private' - asset-transfer-private-data
-ccl the language of the chaincode
-ccv the version
-ccs the sequence
-ccp [optional] the path to the chaincode, when provided
the -ccn will be the deployed name
-cci [optional] the chaincode function to call during deployment
that will perform an initialization of the channel state
required for this chaincode
Signed-off-by: Bret Harrison <beharrison@nc.rr.com>
This commit is contained in:
parent
5f80da096c
commit
1f27c327f3
8 changed files with 306 additions and 214 deletions
|
|
@ -5,7 +5,10 @@
|
||||||
steps:
|
steps:
|
||||||
- script: |
|
- script: |
|
||||||
./network.sh up createChannel -s couchdb -i ${FABRIC_VERSION} # FABRIC_VERSION is set in ci/azure-pipelines.yml
|
./network.sh up createChannel -s couchdb -i ${FABRIC_VERSION} # FABRIC_VERSION is set in ci/azure-pipelines.yml
|
||||||
./network.sh deployCC -l javascript
|
./network.sh deployCC -ccn basic -ccv 1 -ccl javascript -cci initLedger
|
||||||
|
./network.sh deployCC -ccn basic -ccv 2 -ccl golang -cci initLedger
|
||||||
|
./network.sh deployCC -ccn basic -ccv 3 -ccl typescript -cci initLedger
|
||||||
|
./network.sh deployCC -ccn secure -ccv 1 -ccl golang
|
||||||
./network.sh down
|
./network.sh down
|
||||||
workingDirectory: test-network
|
workingDirectory: test-network
|
||||||
displayName: Start Test Network
|
displayName: Start Test Network
|
||||||
|
|
|
||||||
|
|
@ -12,13 +12,19 @@ export MSYS_NO_PATHCONV=1
|
||||||
starttime=$(date +%s)
|
starttime=$(date +%s)
|
||||||
CC_SRC_LANGUAGE=${1:-"go"}
|
CC_SRC_LANGUAGE=${1:-"go"}
|
||||||
CC_SRC_LANGUAGE=`echo "$CC_SRC_LANGUAGE" | tr [:upper:] [:lower:]`
|
CC_SRC_LANGUAGE=`echo "$CC_SRC_LANGUAGE" | tr [:upper:] [:lower:]`
|
||||||
if [ "$CC_SRC_LANGUAGE" != "go" -a "$CC_SRC_LANGUAGE" != "golang" -a "$CC_SRC_LANGUAGE" != "java" \
|
|
||||||
-a "$CC_SRC_LANGUAGE" != "javascript" -a "$CC_SRC_LANGUAGE" != "typescript" ] ; then
|
|
||||||
|
|
||||||
|
if [ "$CC_SRC_LANGUAGE" = "go" -o "$CC_SRC_LANGUAGE" = "golang" ] ; then
|
||||||
|
CC_SRC_PATH="../chaincode/fabcar/go/"
|
||||||
|
elif [ "$CC_SRC_LANGUAGE" = "javascript" ]; then
|
||||||
|
CC_SRC_PATH="../chaincode/fabcar/javascript/"
|
||||||
|
elif [ "$CC_SRC_LANGUAGE" = "java" ]; then
|
||||||
|
CC_SRC_PATH="../chaincode/fabcar/java"
|
||||||
|
elif [ "$CC_SRC_LANGUAGE" = "typescript" ]; then
|
||||||
|
CC_SRC_PATH="../chaincode/fabcar/typescript/"
|
||||||
|
else
|
||||||
echo The chaincode language ${CC_SRC_LANGUAGE} is not supported by this script
|
echo The chaincode language ${CC_SRC_LANGUAGE} is not supported by this script
|
||||||
echo Supported chaincode languages are: go, java, javascript, and typescript
|
echo Supported chaincode languages are: go, java, javascript, and typescript
|
||||||
exit 1
|
exit 1
|
||||||
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# clean out any old identites in the wallets
|
# clean out any old identites in the wallets
|
||||||
|
|
@ -31,7 +37,7 @@ rm -rf go/wallet/*
|
||||||
pushd ../test-network
|
pushd ../test-network
|
||||||
./network.sh down
|
./network.sh down
|
||||||
./network.sh up createChannel -ca -s couchdb
|
./network.sh up createChannel -ca -s couchdb
|
||||||
./network.sh deployCC -l ${CC_SRC_LANGUAGE}
|
./network.sh deployCC -ccn fabcar -ccv 1 -cci initLedger -ccl ${CC_SRC_LANGUAGE} -ccp ${CC_SRC_PATH}
|
||||||
popd
|
popd
|
||||||
|
|
||||||
cat <<EOF
|
cat <<EOF
|
||||||
|
|
|
||||||
2
test-network/.gitignore
vendored
2
test-network/.gitignore
vendored
|
|
@ -10,5 +10,5 @@ organizations/fabric-ca/org2/*
|
||||||
organizations/ordererOrganizations/*
|
organizations/ordererOrganizations/*
|
||||||
organizations/peerOrganizations/*
|
organizations/peerOrganizations/*
|
||||||
system-genesis-block/*
|
system-genesis-block/*
|
||||||
fabcar.tar.gz
|
*.tar.gz
|
||||||
log.txt
|
log.txt
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
## Running the test network
|
## Running the test network
|
||||||
|
|
||||||
You can use the `./network.sh` script to stand up a simple Fabric test network. The test network has two peer organizations with one peer each and a single node raft ordering service. You can also use the `./network.sh` script to create channels and deploy the fabcar chaincode. For more information, see [Using the Fabric test network](https://hyperledger-fabric.readthedocs.io/en/latest/test_network.html). The test network is being introduced in Fabric v2.0 as the long term replacement for the `first-network` sample.
|
You can use the `./network.sh` script to stand up a simple Fabric test network. The test network has two peer organizations with one peer each and a single node raft ordering service. You can also use the `./network.sh` script to create channels and deploy chaincode. For more information, see [Using the Fabric test network](https://hyperledger-fabric.readthedocs.io/en/latest/test_network.html). The test network is being introduced in Fabric v2.0 as the long term replacement for the `first-network` sample.
|
||||||
|
|
||||||
Before you can deploy the test network, you need to follow the instructions to [Install the Samples, Binaries and Docker Images](https://hyperledger-fabric.readthedocs.io/en/latest/install.html) in the Hyperledger Fabric documentation.
|
Before you can deploy the test network, you need to follow the instructions to [Install the Samples, Binaries and Docker Images](https://hyperledger-fabric.readthedocs.io/en/latest/install.html) in the Hyperledger Fabric documentation.
|
||||||
|
|
|
||||||
|
|
@ -20,13 +20,13 @@ export VERBOSE=false
|
||||||
function printHelp() {
|
function printHelp() {
|
||||||
echo "Usage: "
|
echo "Usage: "
|
||||||
echo " network.sh <Mode> [Flags]"
|
echo " network.sh <Mode> [Flags]"
|
||||||
echo " <Mode>"
|
echo " Modes:"
|
||||||
echo " - 'up' - bring up fabric orderer and peer nodes. No channel is created"
|
echo " "$'\e[0;32m'up$'\e[0m' - bring up fabric orderer and peer nodes. No channel is created
|
||||||
echo " - 'up createChannel' - bring up fabric network with one channel"
|
echo " "$'\e[0;32m'up createChannel$'\e[0m' - bring up fabric network with one channel
|
||||||
echo " - 'createChannel' - create and join a channel after the network is created"
|
echo " "$'\e[0;32m'createChannel$'\e[0m' - create and join a channel after the network is created
|
||||||
echo " - 'deployCC' - deploy the fabcar chaincode on the channel"
|
echo " "$'\e[0;32m'deployCC$'\e[0m' - deploy the asset transfer basic chaincode on the channel or specify
|
||||||
echo " - 'down' - clear the network with docker-compose down"
|
echo " "$'\e[0;32m'down$'\e[0m' - clear the network with docker-compose down
|
||||||
echo " - 'restart' - restart the network"
|
echo " "$'\e[0;32m'restart$'\e[0m' - restart the network
|
||||||
echo
|
echo
|
||||||
echo " Flags:"
|
echo " Flags:"
|
||||||
echo " -ca <use CAs> - create Certificate Authorities to generate the crypto material"
|
echo " -ca <use CAs> - create Certificate Authorities to generate the crypto material"
|
||||||
|
|
@ -34,26 +34,31 @@ function printHelp() {
|
||||||
echo " -s <dbtype> - the database backend to use: goleveldb (default) or couchdb"
|
echo " -s <dbtype> - the database backend to use: goleveldb (default) or couchdb"
|
||||||
echo " -r <max retry> - CLI times out after certain number of attempts (defaults to 5)"
|
echo " -r <max retry> - CLI times out after certain number of attempts (defaults to 5)"
|
||||||
echo " -d <delay> - delay duration in seconds (defaults to 3)"
|
echo " -d <delay> - delay duration in seconds (defaults to 3)"
|
||||||
echo " -l <language> - the programming language of the chaincode to deploy: go (default), java, javascript, typescript"
|
echo " -ccn <name> - the short name of the chaincode to deploy: basic (default),ledger, private, secured"
|
||||||
echo " -v <version> - chaincode version. Must be a round number, 1, 2, 3, etc"
|
echo " -ccl <language> - the programming language of the chaincode to deploy: go (default), java, javascript, typescript"
|
||||||
|
echo " -ccv <version> - chaincode version. 1.0 (default)"
|
||||||
|
echo " -ccs <sequence> - chaincode definition sequence. Must be an integer, 1 (default), 2, 3, etc"
|
||||||
|
echo " -ccp <path> - Optional, chaincode path. 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 " -cci <fcn name> - 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 " -i <imagetag> - the tag to be used to launch the network (defaults to \"latest\")"
|
echo " -i <imagetag> - the tag to be used to launch the network (defaults to \"latest\")"
|
||||||
echo " -cai <ca_imagetag> - the image tag to be used for CA (defaults to \"${CA_IMAGETAG}\")"
|
echo " -cai <ca_imagetag> - the image tag to be used for CA (defaults to \"${CA_IMAGETAG}\")"
|
||||||
echo " -verbose - verbose mode"
|
echo " -verbose - verbose mode"
|
||||||
echo " network.sh -h (print this message)"
|
echo " -h - print this message"
|
||||||
echo
|
echo
|
||||||
echo " Possible Mode and flags"
|
echo " Possible Mode and flag combinations"
|
||||||
echo " network.sh up -ca -c -r -d -s -i -verbose"
|
echo " "$'\e[0;32m'up$'\e[0m' -ca -c -r -d -s -i -verbose
|
||||||
echo " network.sh up createChannel -ca -c -r -d -s -i -verbose"
|
echo " "$'\e[0;32m'up createChannel$'\e[0m' -ca -c -r -d -s -i -verbose
|
||||||
echo " network.sh createChannel -c -r -d -verbose"
|
echo " "$'\e[0;32m'createChannel$'\e[0m' -c -r -d -verbose
|
||||||
echo " network.sh deployCC -l -v -r -d -verbose"
|
echo " "$'\e[0;32m'deployCC$'\e[0m' -ccn -ccl -ccv -ccs -ccp -cci -r -d -verbose
|
||||||
echo
|
echo
|
||||||
echo " Taking all defaults:"
|
echo " Taking all defaults:"
|
||||||
echo " network.sh up"
|
echo " network.sh up"
|
||||||
echo
|
echo
|
||||||
echo " Examples:"
|
echo " Examples:"
|
||||||
echo " network.sh up createChannel -ca -c mychannel -s couchdb -i 2.0.0"
|
echo " network.sh up createChannel -ca -c mychannel -s couchdb -i 2.0.0"
|
||||||
echo " network.sh createChannel -c channelName"
|
echo " network.sh createChannel -c channelName"
|
||||||
echo " network.sh deployCC -l javascript"
|
echo " network.sh deployCC -ccn basic -ccl javascript"
|
||||||
|
echo " network.sh deployCC -ccn mychaincode -ccp ./user/mychaincode -ccv 1 -ccl javascript"
|
||||||
}
|
}
|
||||||
|
|
||||||
# Obtain CONTAINER_IDS and remove them
|
# Obtain CONTAINER_IDS and remove them
|
||||||
|
|
@ -81,7 +86,7 @@ function removeUnwantedImages() {
|
||||||
}
|
}
|
||||||
|
|
||||||
# Versions of fabric known not to work with the test network
|
# Versions of fabric known not to work with the test network
|
||||||
BLACKLISTED_VERSIONS="^1\.0\. ^1\.1\. ^1\.2\. ^1\.3\. ^1\.4\."
|
NONWORKING_VERSIONS="^1\.0\. ^1\.1\. ^1\.2\. ^1\.3\. ^1\.4\."
|
||||||
|
|
||||||
# Do some basic sanity checking to make sure that the appropriate versions of fabric
|
# Do some basic sanity checking to make sure that the appropriate versions of fabric
|
||||||
# binaries/images are available. In the future, additional checking for the presence
|
# binaries/images are available. In the future, additional checking for the presence
|
||||||
|
|
@ -112,7 +117,7 @@ function checkPrereqs() {
|
||||||
echo "==============================================="
|
echo "==============================================="
|
||||||
fi
|
fi
|
||||||
|
|
||||||
for UNSUPPORTED_VERSION in $BLACKLISTED_VERSIONS; do
|
for UNSUPPORTED_VERSION in $NONWORKING_VERSIONS; do
|
||||||
echo "$LOCAL_VERSION" | grep -q $UNSUPPORTED_VERSION
|
echo "$LOCAL_VERSION" | grep -q $UNSUPPORTED_VERSION
|
||||||
if [ $? -eq 0 ]; then
|
if [ $? -eq 0 ]; then
|
||||||
echo "ERROR! Local Fabric binary version of $LOCAL_VERSION does not match the versions supported by the test network."
|
echo "ERROR! Local Fabric binary version of $LOCAL_VERSION does not match the versions supported by the test network."
|
||||||
|
|
@ -205,7 +210,7 @@ function createOrgs() {
|
||||||
res=$?
|
res=$?
|
||||||
set +x
|
set +x
|
||||||
if [ $res -ne 0 ]; then
|
if [ $res -ne 0 ]; then
|
||||||
echo "Failed to generate certificates..."
|
echo $'\e[1;32m'"Failed to generate certificates..."$'\e[0m'
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
@ -218,7 +223,7 @@ function createOrgs() {
|
||||||
res=$?
|
res=$?
|
||||||
set +x
|
set +x
|
||||||
if [ $res -ne 0 ]; then
|
if [ $res -ne 0 ]; then
|
||||||
echo "Failed to generate certificates..."
|
echo $'\e[1;32m'"Failed to generate certificates..."$'\e[0m'
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
@ -231,7 +236,7 @@ function createOrgs() {
|
||||||
res=$?
|
res=$?
|
||||||
set +x
|
set +x
|
||||||
if [ $res -ne 0 ]; then
|
if [ $res -ne 0 ]; then
|
||||||
echo "Failed to generate certificates..."
|
echo $'\e[1;32m'"Failed to generate certificates..."$'\e[0m'
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
@ -320,7 +325,7 @@ function createConsortium() {
|
||||||
res=$?
|
res=$?
|
||||||
set +x
|
set +x
|
||||||
if [ $res -ne 0 ]; then
|
if [ $res -ne 0 ]; then
|
||||||
echo "Failed to generate orderer genesis block..."
|
echo $'\e[1;32m'"Failed to generate orderer genesis block..."$'\e[0m'
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
@ -381,7 +386,7 @@ function createChannel() {
|
||||||
## Call the script to isntall and instantiate a chaincode on the channel
|
## Call the script to isntall and instantiate a chaincode on the channel
|
||||||
function deployCC() {
|
function deployCC() {
|
||||||
|
|
||||||
scripts/deployCC.sh $CHANNEL_NAME $CC_SRC_LANGUAGE $VERSION $CLI_DELAY $MAX_RETRY $VERBOSE
|
scripts/deployCC.sh $CHANNEL_NAME $CC_NAME $CC_SRC_PATH $CC_SRC_LANGUAGE $CC_VERSION $CC_SEQUENCE $CC_INIT_FCN $CLI_DELAY $MAX_RETRY $VERBOSE
|
||||||
|
|
||||||
if [ $? -ne 0 ]; then
|
if [ $? -ne 0 ]; then
|
||||||
echo "ERROR !!! Deploying chaincode failed"
|
echo "ERROR !!! Deploying chaincode failed"
|
||||||
|
|
@ -431,6 +436,12 @@ MAX_RETRY=5
|
||||||
CLI_DELAY=3
|
CLI_DELAY=3
|
||||||
# channel name defaults to "mychannel"
|
# channel name defaults to "mychannel"
|
||||||
CHANNEL_NAME="mychannel"
|
CHANNEL_NAME="mychannel"
|
||||||
|
# chaincode name defaults to "basic"
|
||||||
|
CC_NAME="basic"
|
||||||
|
# chaincode path defaults to "NA"
|
||||||
|
CC_SRC_PATH="NA"
|
||||||
|
# chaincode init function defaults to "NA"
|
||||||
|
CC_INIT_FCN="NA"
|
||||||
# use this as the default docker-compose yaml definition
|
# use this as the default docker-compose yaml definition
|
||||||
COMPOSE_FILE_BASE=docker/docker-compose-test-net.yaml
|
COMPOSE_FILE_BASE=docker/docker-compose-test-net.yaml
|
||||||
# docker-compose.yaml file if you are using couchdb
|
# docker-compose.yaml file if you are using couchdb
|
||||||
|
|
@ -442,10 +453,12 @@ COMPOSE_FILE_COUCH_ORG3=addOrg3/docker/docker-compose-couch-org3.yaml
|
||||||
# use this as the default docker-compose yaml definition for org3
|
# use this as the default docker-compose yaml definition for org3
|
||||||
COMPOSE_FILE_ORG3=addOrg3/docker/docker-compose-org3.yaml
|
COMPOSE_FILE_ORG3=addOrg3/docker/docker-compose-org3.yaml
|
||||||
#
|
#
|
||||||
# use golang as the default language for chaincode
|
# use go as the default language for chaincode
|
||||||
CC_SRC_LANGUAGE=golang
|
CC_SRC_LANGUAGE="go"
|
||||||
# Chaincode version
|
# Chaincode version
|
||||||
VERSION=1
|
CC_VERSION="1.0"
|
||||||
|
# Chaincode definition sequence
|
||||||
|
CC_SEQUENCE=1
|
||||||
# default image tag
|
# default image tag
|
||||||
IMAGETAG="latest"
|
IMAGETAG="latest"
|
||||||
# default ca image tag
|
# default ca image tag
|
||||||
|
|
@ -501,12 +514,28 @@ while [[ $# -ge 1 ]] ; do
|
||||||
DATABASE="$2"
|
DATABASE="$2"
|
||||||
shift
|
shift
|
||||||
;;
|
;;
|
||||||
-l )
|
-ccl )
|
||||||
CC_SRC_LANGUAGE="$2"
|
CC_SRC_LANGUAGE="$2"
|
||||||
shift
|
shift
|
||||||
;;
|
;;
|
||||||
-v )
|
-ccn )
|
||||||
VERSION="$2"
|
CC_NAME="$2"
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
-ccv )
|
||||||
|
CC_VERSION="$2"
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
-ccs )
|
||||||
|
CC_SEQUENCE="$2"
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
-ccp )
|
||||||
|
CC_SRC_PATH="$2"
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
-cci )
|
||||||
|
CC_INIT_FCN="$2"
|
||||||
shift
|
shift
|
||||||
;;
|
;;
|
||||||
-i )
|
-i )
|
||||||
|
|
|
||||||
|
|
@ -1,50 +1,94 @@
|
||||||
|
CHANNEL_NAME=${1:-"mychannel"}
|
||||||
|
CC_NAME=${2:-"basic"}
|
||||||
|
CC_SRC_PATH=${3:-"NA"}
|
||||||
|
CC_SRC_LANGUAGE=${4:-"go"}
|
||||||
|
CC_VERSION=${5:-"1.0"}
|
||||||
|
CC_SEQUENCE=${6:-"1"}
|
||||||
|
CC_INIT_FCN=${7:-"NA"}
|
||||||
|
DELAY=${8:-"3"}
|
||||||
|
MAX_RETRY=${9:-"5"}
|
||||||
|
VERBOSE=${10:-"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_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'
|
||||||
|
|
||||||
CHANNEL_NAME="$1"
|
|
||||||
CC_SRC_LANGUAGE="$2"
|
|
||||||
VERSION="$3"
|
|
||||||
DELAY="$4"
|
|
||||||
MAX_RETRY="$5"
|
|
||||||
VERBOSE="$6"
|
|
||||||
: ${CHANNEL_NAME:="mychannel"}
|
|
||||||
: ${CC_SRC_LANGUAGE:="golang"}
|
|
||||||
: ${VERSION:="1"}
|
|
||||||
: ${DELAY:="3"}
|
|
||||||
: ${MAX_RETRY:="5"}
|
|
||||||
: ${VERBOSE:="false"}
|
|
||||||
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/
|
FABRIC_CFG_PATH=$PWD/../config/
|
||||||
|
|
||||||
if [ "$CC_SRC_LANGUAGE" = "go" -o "$CC_SRC_LANGUAGE" = "golang" ] ; then
|
# User has not provided a path, therefore the CC_NAME must
|
||||||
CC_RUNTIME_LANGUAGE=golang
|
# be the short name of a known chaincode sample
|
||||||
CC_SRC_PATH="../chaincode/fabcar/go/"
|
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" = "secure" ]; 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-secured-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"
|
||||||
|
else
|
||||||
|
echo The chaincode name ${CC_NAME} is not supported by this script
|
||||||
|
echo Supported chaincode names are: basic, secure, and private
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
echo Vendoring Go dependencies ...
|
# now see what language it is written in
|
||||||
pushd ../chaincode/fabcar/go
|
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
|
||||||
|
fi
|
||||||
|
|
||||||
|
# do some language specific preparation to the chaincode before packaging
|
||||||
|
if [ "$CC_SRC_LANGUAGE" = "go" ]; then
|
||||||
|
CC_RUNTIME_LANGUAGE=golang
|
||||||
|
|
||||||
|
echo Vendoring Go dependencies at $CC_SRC_PATH
|
||||||
|
pushd $CC_SRC_PATH
|
||||||
GO111MODULE=on go mod vendor
|
GO111MODULE=on go mod vendor
|
||||||
popd
|
popd
|
||||||
echo Finished vendoring Go dependencies
|
echo Finished vendoring Go dependencies
|
||||||
|
|
||||||
elif [ "$CC_SRC_LANGUAGE" = "javascript" ]; then
|
|
||||||
CC_RUNTIME_LANGUAGE=node # chaincode runtime language is node.js
|
|
||||||
CC_SRC_PATH="../chaincode/fabcar/javascript/"
|
|
||||||
|
|
||||||
elif [ "$CC_SRC_LANGUAGE" = "java" ]; then
|
elif [ "$CC_SRC_LANGUAGE" = "java" ]; then
|
||||||
CC_RUNTIME_LANGUAGE=java
|
CC_RUNTIME_LANGUAGE=java
|
||||||
CC_SRC_PATH="../chaincode/fabcar/java/build/install/fabcar"
|
|
||||||
|
|
||||||
echo Compiling Java code ...
|
echo Compiling Java code ...
|
||||||
pushd ../chaincode/fabcar/java
|
pushd $CC_SRC_PATH
|
||||||
./gradlew installDist
|
./gradlew installDist
|
||||||
popd
|
popd
|
||||||
echo Finished compiling Java code
|
echo Finished compiling Java code
|
||||||
|
CC_SRC_PATH=$CC_SRC_PATH/build/install/$CC_NAME
|
||||||
|
|
||||||
|
elif [ "$CC_SRC_LANGUAGE" = "javascript" ]; then
|
||||||
|
CC_RUNTIME_LANGUAGE=node
|
||||||
|
|
||||||
elif [ "$CC_SRC_LANGUAGE" = "typescript" ]; then
|
elif [ "$CC_SRC_LANGUAGE" = "typescript" ]; then
|
||||||
CC_RUNTIME_LANGUAGE=node # chaincode runtime language is node.js
|
CC_RUNTIME_LANGUAGE=node
|
||||||
CC_SRC_PATH="../chaincode/fabcar/typescript/"
|
|
||||||
|
|
||||||
echo Compiling TypeScript code into JavaScript ...
|
echo Compiling TypeScript code into JavaScript ...
|
||||||
pushd ../chaincode/fabcar/typescript
|
pushd $CC_SRC_PATH
|
||||||
npm install
|
npm install
|
||||||
npm run build
|
npm run build
|
||||||
popd
|
popd
|
||||||
|
|
@ -56,200 +100,210 @@ else
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
INIT_REQUIRED="--init-required"
|
||||||
|
# check if the init fcn should be called
|
||||||
|
if [ "$CC_INIT_FCN" = "NA" ]; then
|
||||||
|
INIT_REQUIRED=""
|
||||||
|
fi
|
||||||
|
|
||||||
# import utils
|
# import utils
|
||||||
. scripts/envVar.sh
|
. scripts/envVar.sh
|
||||||
|
|
||||||
|
|
||||||
packageChaincode() {
|
packageChaincode() {
|
||||||
ORG=$1
|
ORG=$1
|
||||||
setGlobals $ORG
|
setGlobals $ORG
|
||||||
set -x
|
set -x
|
||||||
peer lifecycle chaincode package fabcar.tar.gz --path ${CC_SRC_PATH} --lang ${CC_RUNTIME_LANGUAGE} --label fabcar_${VERSION} >&log.txt
|
peer lifecycle chaincode package ${CC_NAME}.tar.gz --path ${CC_SRC_PATH} --lang ${CC_RUNTIME_LANGUAGE} --label ${CC_NAME}_${CC_VERSION} >&log.txt
|
||||||
res=$?
|
res=$?
|
||||||
set +x
|
set +x
|
||||||
cat log.txt
|
cat log.txt
|
||||||
verifyResult $res "Chaincode packaging on peer0.org${ORG} has failed"
|
verifyResult $res "Chaincode packaging on peer0.org${ORG} has failed"
|
||||||
echo "===================== Chaincode is packaged on peer0.org${ORG} ===================== "
|
echo "===================== Chaincode is packaged on peer0.org${ORG} ===================== "
|
||||||
echo
|
echo
|
||||||
}
|
}
|
||||||
|
|
||||||
# installChaincode PEER ORG
|
# installChaincode PEER ORG
|
||||||
installChaincode() {
|
installChaincode() {
|
||||||
ORG=$1
|
ORG=$1
|
||||||
setGlobals $ORG
|
setGlobals $ORG
|
||||||
set -x
|
set -x
|
||||||
peer lifecycle chaincode install fabcar.tar.gz >&log.txt
|
peer lifecycle chaincode install ${CC_NAME}.tar.gz >&log.txt
|
||||||
res=$?
|
res=$?
|
||||||
set +x
|
set +x
|
||||||
cat log.txt
|
cat log.txt
|
||||||
verifyResult $res "Chaincode installation on peer0.org${ORG} has failed"
|
verifyResult $res "Chaincode installation on peer0.org${ORG} has failed"
|
||||||
echo "===================== Chaincode is installed on peer0.org${ORG} ===================== "
|
echo "===================== Chaincode is installed on peer0.org${ORG} ===================== "
|
||||||
echo
|
echo
|
||||||
}
|
}
|
||||||
|
|
||||||
# queryInstalled PEER ORG
|
# queryInstalled PEER ORG
|
||||||
queryInstalled() {
|
queryInstalled() {
|
||||||
ORG=$1
|
ORG=$1
|
||||||
setGlobals $ORG
|
setGlobals $ORG
|
||||||
set -x
|
set -x
|
||||||
peer lifecycle chaincode queryinstalled >&log.txt
|
peer lifecycle chaincode queryinstalled >&log.txt
|
||||||
res=$?
|
res=$?
|
||||||
set +x
|
set +x
|
||||||
cat log.txt
|
cat log.txt
|
||||||
PACKAGE_ID=$(sed -n "/fabcar_${VERSION}/{s/^Package ID: //; s/, Label:.*$//; p;}" 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"
|
verifyResult $res "Query installed on peer0.org${ORG} has failed"
|
||||||
echo "===================== Query installed successful on peer0.org${ORG} on channel ===================== "
|
echo "===================== Query installed successful on peer0.org${ORG} on channel ===================== "
|
||||||
echo
|
echo
|
||||||
}
|
}
|
||||||
|
|
||||||
# approveForMyOrg VERSION PEER ORG
|
# approveForMyOrg VERSION PEER ORG
|
||||||
approveForMyOrg() {
|
approveForMyOrg() {
|
||||||
ORG=$1
|
ORG=$1
|
||||||
setGlobals $ORG
|
setGlobals $ORG
|
||||||
set -x
|
set -x
|
||||||
peer lifecycle chaincode approveformyorg -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --tls --cafile $ORDERER_CA --channelID $CHANNEL_NAME --name fabcar --version ${VERSION} --init-required --package-id ${PACKAGE_ID} --sequence ${VERSION} >&log.txt
|
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} >&log.txt
|
||||||
set +x
|
set +x
|
||||||
cat log.txt
|
cat log.txt
|
||||||
verifyResult $res "Chaincode definition approved on peer0.org${ORG} on channel '$CHANNEL_NAME' failed"
|
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 "===================== Chaincode definition approved on peer0.org${ORG} on channel '$CHANNEL_NAME' ===================== "
|
||||||
echo
|
echo
|
||||||
}
|
}
|
||||||
|
|
||||||
# checkCommitReadiness VERSION PEER ORG
|
# checkCommitReadiness VERSION PEER ORG
|
||||||
checkCommitReadiness() {
|
checkCommitReadiness() {
|
||||||
ORG=$1
|
ORG=$1
|
||||||
shift 1
|
shift 1
|
||||||
setGlobals $ORG
|
setGlobals $ORG
|
||||||
echo "===================== Checking the commit readiness of the chaincode definition on peer0.org${ORG} on channel '$CHANNEL_NAME'... ===================== "
|
echo "===================== Checking the commit readiness of the chaincode definition on peer0.org${ORG} on channel '$CHANNEL_NAME'... ===================== "
|
||||||
local rc=1
|
local rc=1
|
||||||
local COUNTER=1
|
local COUNTER=1
|
||||||
# continue to poll
|
# continue to poll
|
||||||
# we either get a successful response, or reach MAX RETRY
|
# we either get a successful response, or reach MAX RETRY
|
||||||
while [ $rc -ne 0 -a $COUNTER -lt $MAX_RETRY ] ; do
|
while [ $rc -ne 0 -a $COUNTER -lt $MAX_RETRY ]; do
|
||||||
sleep $DELAY
|
sleep $DELAY
|
||||||
echo "Attempting to check the commit readiness of the chaincode definition on peer0.org${ORG}, Retry after $DELAY seconds."
|
echo "Attempting to check the commit readiness of the chaincode definition on peer0.org${ORG}, Retry after $DELAY seconds."
|
||||||
set -x
|
set -x
|
||||||
peer lifecycle chaincode checkcommitreadiness --channelID $CHANNEL_NAME --name fabcar --version ${VERSION} --sequence ${VERSION} --output json --init-required >&log.txt
|
peer lifecycle chaincode checkcommitreadiness --channelID $CHANNEL_NAME --name ${CC_NAME} --version ${CC_VERSION} --sequence ${CC_SEQUENCE} ${INIT_REQUIRED} --output json >&log.txt
|
||||||
res=$?
|
res=$?
|
||||||
set +x
|
set +x
|
||||||
let rc=0
|
let rc=0
|
||||||
for var in "$@"
|
for var in "$@"; do
|
||||||
do
|
grep "$var" log.txt &>/dev/null || let rc=1
|
||||||
grep "$var" log.txt &>/dev/null || let rc=1
|
done
|
||||||
done
|
|
||||||
COUNTER=$(expr $COUNTER + 1)
|
COUNTER=$(expr $COUNTER + 1)
|
||||||
done
|
done
|
||||||
cat log.txt
|
cat log.txt
|
||||||
if test $rc -eq 0; then
|
if test $rc -eq 0; then
|
||||||
echo "===================== Checking the commit readiness of the chaincode definition successful on peer0.org${ORG} on channel '$CHANNEL_NAME' ===================== "
|
echo "===================== Checking the commit readiness of the chaincode definition successful on peer0.org${ORG} on channel '$CHANNEL_NAME' ===================== "
|
||||||
else
|
else
|
||||||
echo "!!!!!!!!!!!!!!! After $MAX_RETRY attempts, Check commit readiness result on peer0.org${ORG} is INVALID !!!!!!!!!!!!!!!!"
|
echo
|
||||||
echo
|
echo $'\e[1;31m'"!!!!!!!!!!!!!!! After $MAX_RETRY attempts, Check commit readiness result on peer0.org${ORG} is INVALID !!!!!!!!!!!!!!!!"$'\e[0m'
|
||||||
exit 1
|
echo
|
||||||
fi
|
exit 1
|
||||||
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# commitChaincodeDefinition VERSION PEER ORG (PEER ORG)...
|
# commitChaincodeDefinition VERSION PEER ORG (PEER ORG)...
|
||||||
commitChaincodeDefinition() {
|
commitChaincodeDefinition() {
|
||||||
parsePeerConnectionParameters $@
|
parsePeerConnectionParameters $@
|
||||||
res=$?
|
res=$?
|
||||||
verifyResult $res "Invoke transaction failed on channel '$CHANNEL_NAME' due to uneven number of peer and org parameters "
|
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
|
# while 'peer chaincode' command can get the orderer endpoint from the
|
||||||
# peer (if join was successful), let's supply it directly as we know
|
# peer (if join was successful), let's supply it directly as we know
|
||||||
# it using the "-o" option
|
# it using the "-o" option
|
||||||
set -x
|
set -x
|
||||||
peer lifecycle chaincode commit -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --tls --cafile $ORDERER_CA --channelID $CHANNEL_NAME --name fabcar $PEER_CONN_PARMS --version ${VERSION} --sequence ${VERSION} --init-required >&log.txt
|
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} >&log.txt
|
||||||
res=$?
|
res=$?
|
||||||
set +x
|
set +x
|
||||||
cat log.txt
|
cat log.txt
|
||||||
verifyResult $res "Chaincode definition commit failed on peer0.org${ORG} on channel '$CHANNEL_NAME' failed"
|
verifyResult $res "Chaincode definition commit failed on peer0.org${ORG} on channel '$CHANNEL_NAME' failed"
|
||||||
echo "===================== Chaincode definition committed on channel '$CHANNEL_NAME' ===================== "
|
echo "===================== Chaincode definition committed on channel '$CHANNEL_NAME' ===================== "
|
||||||
echo
|
echo
|
||||||
}
|
}
|
||||||
|
|
||||||
# queryCommitted ORG
|
# queryCommitted ORG
|
||||||
queryCommitted() {
|
queryCommitted() {
|
||||||
ORG=$1
|
ORG=$1
|
||||||
setGlobals $ORG
|
setGlobals $ORG
|
||||||
EXPECTED_RESULT="Version: ${VERSION}, Sequence: ${VERSION}, Endorsement Plugin: escc, Validation Plugin: vscc"
|
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'... ===================== "
|
echo "===================== Querying chaincode definition on peer0.org${ORG} on channel '$CHANNEL_NAME'... ===================== "
|
||||||
local rc=1
|
local rc=1
|
||||||
local COUNTER=1
|
local COUNTER=1
|
||||||
# continue to poll
|
# continue to poll
|
||||||
# we either get a successful response, or reach MAX RETRY
|
# we either get a successful response, or reach MAX RETRY
|
||||||
while [ $rc -ne 0 -a $COUNTER -lt $MAX_RETRY ] ; do
|
while [ $rc -ne 0 -a $COUNTER -lt $MAX_RETRY ]; do
|
||||||
sleep $DELAY
|
sleep $DELAY
|
||||||
echo "Attempting to Query committed status on peer0.org${ORG}, Retry after $DELAY seconds."
|
echo "Attempting to Query committed status on peer0.org${ORG}, Retry after $DELAY seconds."
|
||||||
set -x
|
set -x
|
||||||
peer lifecycle chaincode querycommitted --channelID $CHANNEL_NAME --name fabcar >&log.txt
|
peer lifecycle chaincode querycommitted --channelID $CHANNEL_NAME --name ${CC_NAME} >&log.txt
|
||||||
res=$?
|
res=$?
|
||||||
set +x
|
set +x
|
||||||
test $res -eq 0 && VALUE=$(cat log.txt | grep -o '^Version: [0-9], Sequence: [0-9], Endorsement Plugin: escc, Validation Plugin: vscc')
|
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
|
test "$VALUE" = "$EXPECTED_RESULT" && let rc=0
|
||||||
COUNTER=$(expr $COUNTER + 1)
|
COUNTER=$(expr $COUNTER + 1)
|
||||||
done
|
done
|
||||||
echo
|
echo
|
||||||
cat log.txt
|
cat log.txt
|
||||||
if test $rc -eq 0; then
|
if test $rc -eq 0; then
|
||||||
echo "===================== Query chaincode definition successful on peer0.org${ORG} on channel '$CHANNEL_NAME' ===================== "
|
echo "===================== Query chaincode definition successful on peer0.org${ORG} on channel '$CHANNEL_NAME' ===================== "
|
||||||
echo
|
echo
|
||||||
else
|
else
|
||||||
echo "!!!!!!!!!!!!!!! After $MAX_RETRY attempts, Query chaincode definition result on peer0.org${ORG} is INVALID !!!!!!!!!!!!!!!!"
|
echo
|
||||||
echo
|
echo $'\e[1;31m'"!!!!!!!!!!!!!!! After $MAX_RETRY attempts, Query chaincode definition result on peer0.org${ORG} is INVALID !!!!!!!!!!!!!!!!"$'\e[0m'
|
||||||
exit 1
|
echo
|
||||||
fi
|
exit 1
|
||||||
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
chaincodeInvokeInit() {
|
chaincodeInvokeInit() {
|
||||||
parsePeerConnectionParameters $@
|
parsePeerConnectionParameters $@
|
||||||
res=$?
|
res=$?
|
||||||
verifyResult $res "Invoke transaction failed on channel '$CHANNEL_NAME' due to uneven number of peer and org parameters "
|
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
|
# while 'peer chaincode' command can get the orderer endpoint from the
|
||||||
# peer (if join was successful), let's supply it directly as we know
|
# peer (if join was successful), let's supply it directly as we know
|
||||||
# it using the "-o" option
|
# it using the "-o" option
|
||||||
set -x
|
set -x
|
||||||
peer chaincode invoke -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --tls --cafile $ORDERER_CA -C $CHANNEL_NAME -n fabcar $PEER_CONN_PARMS --isInit -c '{"function":"initLedger","Args":[]}' >&log.txt
|
fcn_call='{"function":"'${CC_INIT_FCN}'","Args":[]}'
|
||||||
res=$?
|
echo invoke fcn call:${fcn_call}
|
||||||
set +x
|
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
|
||||||
cat log.txt
|
res=$?
|
||||||
verifyResult $res "Invoke execution on $PEERS failed "
|
set +x
|
||||||
echo "===================== Invoke transaction successful on $PEERS on channel '$CHANNEL_NAME' ===================== "
|
cat log.txt
|
||||||
echo
|
verifyResult $res "Invoke execution on $PEERS failed "
|
||||||
|
echo "===================== Invoke transaction successful on $PEERS on channel '$CHANNEL_NAME' ===================== "
|
||||||
|
echo
|
||||||
}
|
}
|
||||||
|
|
||||||
chaincodeQuery() {
|
chaincodeQuery() {
|
||||||
ORG=$1
|
ORG=$1
|
||||||
setGlobals $ORG
|
setGlobals $ORG
|
||||||
echo "===================== Querying on peer0.org${ORG} on channel '$CHANNEL_NAME'... ===================== "
|
echo "===================== Querying on peer0.org${ORG} on channel '$CHANNEL_NAME'... ===================== "
|
||||||
local rc=1
|
local rc=1
|
||||||
local COUNTER=1
|
local COUNTER=1
|
||||||
# continue to poll
|
# continue to poll
|
||||||
# we either get a successful response, or reach MAX RETRY
|
# we either get a successful response, or reach MAX RETRY
|
||||||
while [ $rc -ne 0 -a $COUNTER -lt $MAX_RETRY ] ; do
|
while [ $rc -ne 0 -a $COUNTER -lt $MAX_RETRY ]; do
|
||||||
sleep $DELAY
|
sleep $DELAY
|
||||||
echo "Attempting to Query peer0.org${ORG}, Retry after $DELAY seconds."
|
echo "Attempting to Query peer0.org${ORG}, Retry after $DELAY seconds."
|
||||||
set -x
|
set -x
|
||||||
peer chaincode query -C $CHANNEL_NAME -n fabcar -c '{"Args":["queryAllCars"]}' >&log.txt
|
peer chaincode query -C $CHANNEL_NAME -n ${CC_NAME} -c '{"Args":["queryAllCars"]}' >&log.txt
|
||||||
res=$?
|
res=$?
|
||||||
set +x
|
set +x
|
||||||
let rc=$res
|
let rc=$res
|
||||||
COUNTER=$(expr $COUNTER + 1)
|
COUNTER=$(expr $COUNTER + 1)
|
||||||
done
|
done
|
||||||
echo
|
echo
|
||||||
cat log.txt
|
cat log.txt
|
||||||
if test $rc -eq 0; then
|
if test $rc -eq 0; then
|
||||||
echo "===================== Query successful on peer0.org${ORG} on channel '$CHANNEL_NAME' ===================== "
|
echo "===================== Query successful on peer0.org${ORG} on channel '$CHANNEL_NAME' ===================== "
|
||||||
echo
|
echo
|
||||||
else
|
else
|
||||||
echo "!!!!!!!!!!!!!!! After $MAX_RETRY attempts, Query result on peer0.org${ORG} is INVALID !!!!!!!!!!!!!!!!"
|
echo
|
||||||
echo
|
echo $'\e[1;31m'"!!!!!!!!!!!!!!! After $MAX_RETRY attempts, Query result on peer0.org${ORG} is INVALID !!!!!!!!!!!!!!!!"$'\e[0m'
|
||||||
exit 1
|
echo
|
||||||
fi
|
exit 1
|
||||||
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
## at first we package the chaincode
|
## package the chaincode
|
||||||
packageChaincode 1
|
packageChaincode 1
|
||||||
|
|
||||||
## Install chaincode on peer0.org1 and peer0.org2
|
## Install chaincode on peer0.org1 and peer0.org2
|
||||||
|
|
@ -284,13 +338,13 @@ commitChaincodeDefinition 1 2
|
||||||
queryCommitted 1
|
queryCommitted 1
|
||||||
queryCommitted 2
|
queryCommitted 2
|
||||||
|
|
||||||
## Invoke the chaincode
|
## Invoke the chaincode - this does require that the chaincode have the 'initLedger'
|
||||||
chaincodeInvokeInit 1 2
|
## method defined
|
||||||
|
if [ "$CC_INIT_FCN" = "NA" ]; then
|
||||||
sleep 10
|
echo "===================== Chaincode initialization is not required ===================== "
|
||||||
|
echo
|
||||||
# Query chaincode on peer0.org1
|
else
|
||||||
echo "Querying chaincode on peer0.org1..."
|
chaincodeInvokeInit 1 2
|
||||||
chaincodeQuery 1
|
fi
|
||||||
|
|
||||||
exit 0
|
exit 0
|
||||||
|
|
|
||||||
|
|
@ -78,7 +78,7 @@ parsePeerConnectionParameters() {
|
||||||
|
|
||||||
verifyResult() {
|
verifyResult() {
|
||||||
if [ $1 -ne 0 ]; then
|
if [ $1 -ne 0 ]; then
|
||||||
echo "!!!!!!!!!!!!!!! "$2" !!!!!!!!!!!!!!!!"
|
echo $'\e[1;31m'!!!!!!!!!!!!!!! $2 !!!!!!!!!!!!!!!!$'\e[0m'
|
||||||
echo
|
echo
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
|
||||||
|
|
@ -47,7 +47,7 @@ setGlobals() {
|
||||||
|
|
||||||
verifyResult() {
|
verifyResult() {
|
||||||
if [ $1 -ne 0 ]; then
|
if [ $1 -ne 0 ]; then
|
||||||
echo "!!!!!!!!!!!!!!! "$2" !!!!!!!!!!!!!!!!"
|
echo $'\e[1;31m'!!!!!!!!!!!!!!! $2 !!!!!!!!!!!!!!!!$'\e[0m'
|
||||||
echo
|
echo
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue