mirror of
https://github.com/hyperledger/fabric-samples.git
synced 2026-06-19 00:15:08 +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:
|
||||
- script: |
|
||||
./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
|
||||
workingDirectory: test-network
|
||||
displayName: Start Test Network
|
||||
|
|
|
|||
|
|
@ -12,13 +12,19 @@ export MSYS_NO_PATHCONV=1
|
|||
starttime=$(date +%s)
|
||||
CC_SRC_LANGUAGE=${1:-"go"}
|
||||
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 Supported chaincode languages are: go, java, javascript, and typescript
|
||||
exit 1
|
||||
|
||||
echo Supported chaincode languages are: go, java, javascript, and typescript
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# clean out any old identites in the wallets
|
||||
|
|
@ -31,7 +37,7 @@ rm -rf go/wallet/*
|
|||
pushd ../test-network
|
||||
./network.sh down
|
||||
./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
|
||||
|
||||
cat <<EOF
|
||||
|
|
|
|||
2
test-network/.gitignore
vendored
2
test-network/.gitignore
vendored
|
|
@ -10,5 +10,5 @@ organizations/fabric-ca/org2/*
|
|||
organizations/ordererOrganizations/*
|
||||
organizations/peerOrganizations/*
|
||||
system-genesis-block/*
|
||||
fabcar.tar.gz
|
||||
*.tar.gz
|
||||
log.txt
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
## 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.
|
||||
|
|
|
|||
|
|
@ -20,13 +20,13 @@ export VERBOSE=false
|
|||
function printHelp() {
|
||||
echo "Usage: "
|
||||
echo " network.sh <Mode> [Flags]"
|
||||
echo " <Mode>"
|
||||
echo " - 'up' - bring up fabric orderer and peer nodes. No channel is created"
|
||||
echo " - 'up createChannel' - bring up fabric network with one channel"
|
||||
echo " - 'createChannel' - create and join a channel after the network is created"
|
||||
echo " - 'deployCC' - deploy the fabcar chaincode on the channel"
|
||||
echo " - 'down' - clear the network with docker-compose down"
|
||||
echo " - 'restart' - restart the network"
|
||||
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 " -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 " -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 " -l <language> - the programming language of the chaincode to deploy: go (default), java, javascript, typescript"
|
||||
echo " -v <version> - chaincode version. Must be a round number, 1, 2, 3, etc"
|
||||
echo " -ccn <name> - the short name of the chaincode to deploy: basic (default),ledger, private, secured"
|
||||
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 " -cai <ca_imagetag> - the image tag to be used for CA (defaults to \"${CA_IMAGETAG}\")"
|
||||
echo " -verbose - verbose mode"
|
||||
echo " network.sh -h (print this message)"
|
||||
echo " -h - print this message"
|
||||
echo
|
||||
echo " Possible Mode and flags"
|
||||
echo " network.sh up -ca -c -r -d -s -i -verbose"
|
||||
echo " network.sh up createChannel -ca -c -r -d -s -i -verbose"
|
||||
echo " network.sh createChannel -c -r -d -verbose"
|
||||
echo " network.sh deployCC -l -v -r -d -verbose"
|
||||
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 " 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 -l javascript"
|
||||
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"
|
||||
}
|
||||
|
||||
# Obtain CONTAINER_IDS and remove them
|
||||
|
|
@ -81,7 +86,7 @@ function removeUnwantedImages() {
|
|||
}
|
||||
|
||||
# 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
|
||||
# binaries/images are available. In the future, additional checking for the presence
|
||||
|
|
@ -112,7 +117,7 @@ function checkPrereqs() {
|
|||
echo "==============================================="
|
||||
fi
|
||||
|
||||
for UNSUPPORTED_VERSION in $BLACKLISTED_VERSIONS; do
|
||||
for UNSUPPORTED_VERSION in $NONWORKING_VERSIONS; do
|
||||
echo "$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."
|
||||
|
|
@ -205,7 +210,7 @@ function createOrgs() {
|
|||
res=$?
|
||||
set +x
|
||||
if [ $res -ne 0 ]; then
|
||||
echo "Failed to generate certificates..."
|
||||
echo $'\e[1;32m'"Failed to generate certificates..."$'\e[0m'
|
||||
exit 1
|
||||
fi
|
||||
|
||||
|
|
@ -218,7 +223,7 @@ function createOrgs() {
|
|||
res=$?
|
||||
set +x
|
||||
if [ $res -ne 0 ]; then
|
||||
echo "Failed to generate certificates..."
|
||||
echo $'\e[1;32m'"Failed to generate certificates..."$'\e[0m'
|
||||
exit 1
|
||||
fi
|
||||
|
||||
|
|
@ -231,7 +236,7 @@ function createOrgs() {
|
|||
res=$?
|
||||
set +x
|
||||
if [ $res -ne 0 ]; then
|
||||
echo "Failed to generate certificates..."
|
||||
echo $'\e[1;32m'"Failed to generate certificates..."$'\e[0m'
|
||||
exit 1
|
||||
fi
|
||||
|
||||
|
|
@ -320,7 +325,7 @@ function createConsortium() {
|
|||
res=$?
|
||||
set +x
|
||||
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
|
||||
fi
|
||||
}
|
||||
|
|
@ -381,7 +386,7 @@ function createChannel() {
|
|||
## Call the script to isntall and instantiate a chaincode on the channel
|
||||
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
|
||||
echo "ERROR !!! Deploying chaincode failed"
|
||||
|
|
@ -431,6 +436,12 @@ MAX_RETRY=5
|
|||
CLI_DELAY=3
|
||||
# channel name defaults to "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
|
||||
COMPOSE_FILE_BASE=docker/docker-compose-test-net.yaml
|
||||
# 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
|
||||
COMPOSE_FILE_ORG3=addOrg3/docker/docker-compose-org3.yaml
|
||||
#
|
||||
# use golang as the default language for chaincode
|
||||
CC_SRC_LANGUAGE=golang
|
||||
# use go as the default language for chaincode
|
||||
CC_SRC_LANGUAGE="go"
|
||||
# Chaincode version
|
||||
VERSION=1
|
||||
CC_VERSION="1.0"
|
||||
# Chaincode definition sequence
|
||||
CC_SEQUENCE=1
|
||||
# default image tag
|
||||
IMAGETAG="latest"
|
||||
# default ca image tag
|
||||
|
|
@ -501,12 +514,28 @@ while [[ $# -ge 1 ]] ; do
|
|||
DATABASE="$2"
|
||||
shift
|
||||
;;
|
||||
-l )
|
||||
-ccl )
|
||||
CC_SRC_LANGUAGE="$2"
|
||||
shift
|
||||
;;
|
||||
-v )
|
||||
VERSION="$2"
|
||||
-ccn )
|
||||
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
|
||||
;;
|
||||
-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:]`
|
||||
|
||||
FABRIC_CFG_PATH=$PWD/../config/
|
||||
|
||||
if [ "$CC_SRC_LANGUAGE" = "go" -o "$CC_SRC_LANGUAGE" = "golang" ] ; then
|
||||
CC_RUNTIME_LANGUAGE=golang
|
||||
CC_SRC_PATH="../chaincode/fabcar/go/"
|
||||
# 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" = "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 ...
|
||||
pushd ../chaincode/fabcar/go
|
||||
# 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
|
||||
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
|
||||
popd
|
||||
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
|
||||
CC_RUNTIME_LANGUAGE=java
|
||||
CC_SRC_PATH="../chaincode/fabcar/java/build/install/fabcar"
|
||||
|
||||
echo Compiling Java code ...
|
||||
pushd ../chaincode/fabcar/java
|
||||
pushd $CC_SRC_PATH
|
||||
./gradlew installDist
|
||||
popd
|
||||
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
|
||||
CC_RUNTIME_LANGUAGE=node # chaincode runtime language is node.js
|
||||
CC_SRC_PATH="../chaincode/fabcar/typescript/"
|
||||
CC_RUNTIME_LANGUAGE=node
|
||||
|
||||
echo Compiling TypeScript code into JavaScript ...
|
||||
pushd ../chaincode/fabcar/typescript
|
||||
pushd $CC_SRC_PATH
|
||||
npm install
|
||||
npm run build
|
||||
popd
|
||||
|
|
@ -56,200 +100,210 @@ else
|
|||
exit 1
|
||||
fi
|
||||
|
||||
INIT_REQUIRED="--init-required"
|
||||
# check if the init fcn should be called
|
||||
if [ "$CC_INIT_FCN" = "NA" ]; then
|
||||
INIT_REQUIRED=""
|
||||
fi
|
||||
|
||||
# import utils
|
||||
. scripts/envVar.sh
|
||||
|
||||
|
||||
packageChaincode() {
|
||||
ORG=$1
|
||||
setGlobals $ORG
|
||||
set -x
|
||||
peer lifecycle chaincode package fabcar.tar.gz --path ${CC_SRC_PATH} --lang ${CC_RUNTIME_LANGUAGE} --label fabcar_${VERSION} >&log.txt
|
||||
res=$?
|
||||
set +x
|
||||
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
|
||||
cat log.txt
|
||||
verifyResult $res "Chaincode packaging on peer0.org${ORG} has failed"
|
||||
echo "===================== Chaincode is packaged on peer0.org${ORG} ===================== "
|
||||
echo
|
||||
}
|
||||
|
||||
# installChaincode PEER ORG
|
||||
installChaincode() {
|
||||
ORG=$1
|
||||
setGlobals $ORG
|
||||
set -x
|
||||
peer lifecycle chaincode install fabcar.tar.gz >&log.txt
|
||||
res=$?
|
||||
set +x
|
||||
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
|
||||
cat log.txt
|
||||
verifyResult $res "Chaincode installation on peer0.org${ORG} has failed"
|
||||
echo "===================== Chaincode is installed on peer0.org${ORG} ===================== "
|
||||
echo
|
||||
}
|
||||
|
||||
# queryInstalled PEER ORG
|
||||
queryInstalled() {
|
||||
ORG=$1
|
||||
setGlobals $ORG
|
||||
set -x
|
||||
peer lifecycle chaincode queryinstalled >&log.txt
|
||||
res=$?
|
||||
set +x
|
||||
cat log.txt
|
||||
PACKAGE_ID=$(sed -n "/fabcar_${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
|
||||
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
|
||||
}
|
||||
|
||||
# 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 fabcar --version ${VERSION} --init-required --package-id ${PACKAGE_ID} --sequence ${VERSION} >&log.txt
|
||||
set +x
|
||||
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} >&log.txt
|
||||
set +x
|
||||
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
|
||||
}
|
||||
|
||||
# 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'... ===================== "
|
||||
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 fabcar --version ${VERSION} --sequence ${VERSION} --output json --init-required >&log.txt
|
||||
res=$?
|
||||
set +x
|
||||
let rc=0
|
||||
for var in "$@"
|
||||
do
|
||||
grep "$var" log.txt &>/dev/null || let rc=1
|
||||
done
|
||||
# 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} --output json >&log.txt
|
||||
res=$?
|
||||
set +x
|
||||
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 "!!!!!!!!!!!!!!! After $MAX_RETRY attempts, Check commit readiness result on peer0.org${ORG} is INVALID !!!!!!!!!!!!!!!!"
|
||||
echo
|
||||
exit 1
|
||||
fi
|
||||
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
|
||||
}
|
||||
|
||||
# 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 fabcar $PEER_CONN_PARMS --version ${VERSION} --sequence ${VERSION} --init-required >&log.txt
|
||||
res=$?
|
||||
set +x
|
||||
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} >&log.txt
|
||||
res=$?
|
||||
set +x
|
||||
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
|
||||
}
|
||||
|
||||
# queryCommitted ORG
|
||||
queryCommitted() {
|
||||
ORG=$1
|
||||
setGlobals $ORG
|
||||
EXPECTED_RESULT="Version: ${VERSION}, Sequence: ${VERSION}, Endorsement Plugin: escc, Validation Plugin: vscc"
|
||||
echo "===================== Querying chaincode definition on peer0.org${ORG} on channel '$CHANNEL_NAME'... ===================== "
|
||||
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 fabcar >&log.txt
|
||||
res=$?
|
||||
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 "$VALUE" = "$EXPECTED_RESULT" && let rc=0
|
||||
# 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
|
||||
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
|
||||
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 "!!!!!!!!!!!!!!! After $MAX_RETRY attempts, Query chaincode definition result on peer0.org${ORG} is INVALID !!!!!!!!!!!!!!!!"
|
||||
echo
|
||||
exit 1
|
||||
fi
|
||||
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
|
||||
}
|
||||
|
||||
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
|
||||
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
|
||||
res=$?
|
||||
set +x
|
||||
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":[]}'
|
||||
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
|
||||
cat log.txt
|
||||
verifyResult $res "Invoke execution on $PEERS failed "
|
||||
echo "===================== Invoke transaction successful on $PEERS on channel '$CHANNEL_NAME' ===================== "
|
||||
echo
|
||||
}
|
||||
|
||||
chaincodeQuery() {
|
||||
ORG=$1
|
||||
setGlobals $ORG
|
||||
echo "===================== Querying on peer0.org${ORG} on channel '$CHANNEL_NAME'... ===================== "
|
||||
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 fabcar -c '{"Args":["queryAllCars"]}' >&log.txt
|
||||
res=$?
|
||||
set +x
|
||||
# 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
|
||||
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
|
||||
cat log.txt
|
||||
if test $rc -eq 0; then
|
||||
echo "===================== Query successful on peer0.org${ORG} on channel '$CHANNEL_NAME' ===================== "
|
||||
echo
|
||||
else
|
||||
echo "!!!!!!!!!!!!!!! After $MAX_RETRY attempts, Query result on peer0.org${ORG} is INVALID !!!!!!!!!!!!!!!!"
|
||||
echo
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
echo
|
||||
echo $'\e[1;31m'"!!!!!!!!!!!!!!! After $MAX_RETRY attempts, Query result on peer0.org${ORG} is INVALID !!!!!!!!!!!!!!!!"$'\e[0m'
|
||||
echo
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
## at first we package the chaincode
|
||||
## package the chaincode
|
||||
packageChaincode 1
|
||||
|
||||
## Install chaincode on peer0.org1 and peer0.org2
|
||||
|
|
@ -284,13 +338,13 @@ commitChaincodeDefinition 1 2
|
|||
queryCommitted 1
|
||||
queryCommitted 2
|
||||
|
||||
## Invoke the chaincode
|
||||
chaincodeInvokeInit 1 2
|
||||
|
||||
sleep 10
|
||||
|
||||
# Query chaincode on peer0.org1
|
||||
echo "Querying chaincode on peer0.org1..."
|
||||
chaincodeQuery 1
|
||||
## 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
|
||||
else
|
||||
chaincodeInvokeInit 1 2
|
||||
fi
|
||||
|
||||
exit 0
|
||||
|
|
|
|||
|
|
@ -78,7 +78,7 @@ parsePeerConnectionParameters() {
|
|||
|
||||
verifyResult() {
|
||||
if [ $1 -ne 0 ]; then
|
||||
echo "!!!!!!!!!!!!!!! "$2" !!!!!!!!!!!!!!!!"
|
||||
echo $'\e[1;31m'!!!!!!!!!!!!!!! $2 !!!!!!!!!!!!!!!!$'\e[0m'
|
||||
echo
|
||||
exit 1
|
||||
fi
|
||||
|
|
|
|||
|
|
@ -47,7 +47,7 @@ setGlobals() {
|
|||
|
||||
verifyResult() {
|
||||
if [ $1 -ne 0 ]; then
|
||||
echo "!!!!!!!!!!!!!!! "$2" !!!!!!!!!!!!!!!!"
|
||||
echo $'\e[1;31m'!!!!!!!!!!!!!!! $2 !!!!!!!!!!!!!!!!$'\e[0m'
|
||||
echo
|
||||
exit 1
|
||||
fi
|
||||
|
|
|
|||
Loading…
Reference in a new issue