mirror of
https://github.com/hyperledger/fabric-samples.git
synced 2026-06-21 09:05:10 +00:00
Add chaincode utilities
This change is meant to help cover end user functionality that was previously covered by the blockchain VSCode Plugin. Functions added: - cc mode with package, list chaincode, invoke and query functions - auto sequencing for chaincode deployment - move variables into config file Signed-off-by: Chris Elder <celder@Chriss-MacBook-Air.local>
This commit is contained in:
parent
99a1f49da0
commit
e73bb717db
6 changed files with 533 additions and 110 deletions
58
test-network/network.config
Normal file
58
test-network/network.config
Normal file
|
|
@ -0,0 +1,58 @@
|
||||||
|
# default image tag, example: "2.5.4". "default" will download the latest. (-i)
|
||||||
|
IMAGETAG="default"
|
||||||
|
|
||||||
|
# default ca image tag, example: "1.5.7". "default" will download the latest. (-cai)
|
||||||
|
CA_IMAGETAG="default"
|
||||||
|
|
||||||
|
# Using crpto vs CA. default is cryptogen
|
||||||
|
CRYPTO="cryptogen"
|
||||||
|
|
||||||
|
# max number of retries before giving up (-r)
|
||||||
|
MAX_RETRY=5
|
||||||
|
|
||||||
|
# default for delay between commands (-d)
|
||||||
|
CLI_DELAY=3
|
||||||
|
|
||||||
|
# channel name defaults to "mychannel" (-c)
|
||||||
|
CHANNEL_NAME="mychannel"
|
||||||
|
|
||||||
|
# default database (-s)
|
||||||
|
DATABASE="leveldb"
|
||||||
|
|
||||||
|
# default org (-org)
|
||||||
|
ORG=1
|
||||||
|
|
||||||
|
# chaincode language defaults to "NA" (-ccl)
|
||||||
|
CC_SRC_LANGUAGE="go"
|
||||||
|
|
||||||
|
# Chaincode version (-ccv)
|
||||||
|
CC_VERSION="1.0.1"
|
||||||
|
|
||||||
|
# chaincode name defaults to "NA" (-ccn)
|
||||||
|
CC_NAME="basic"
|
||||||
|
|
||||||
|
# default to running the docker commands for the CCAAS (-ccaasdocker)
|
||||||
|
CCAAS_DOCKER_RUN=true
|
||||||
|
|
||||||
|
# chaincode path defaults to "NA" (-ccp)
|
||||||
|
CC_SRC_PATH="../asset-transfer-basic/chaincode-go"
|
||||||
|
|
||||||
|
# endorsement policy defaults to "NA". This would allow chaincodes to use the majority default policy. (-ccep)
|
||||||
|
CC_END_POLICY="NA"
|
||||||
|
|
||||||
|
# collection configuration defaults to "NA" (-cccg)
|
||||||
|
CC_COLL_CONFIG="NA"
|
||||||
|
|
||||||
|
# chaincode init function defaults to "NA" (-cci)
|
||||||
|
CC_INIT_FCN="NA"
|
||||||
|
|
||||||
|
# Chaincode definition sequence, this should be an integer or auto (-ccs)
|
||||||
|
CC_SEQUENCE=auto
|
||||||
|
|
||||||
|
# Default constructor for testing a chaincode invoke (-ccic)
|
||||||
|
CC_INVOKE_CONSTRUCTOR=''{\"Args\":[\"InitLedger\"]}''
|
||||||
|
|
||||||
|
# Default constructor for testing a chaincode query (-cciq)
|
||||||
|
CC_QUERY_CONSTRUCTOR=''{\"Args\":[\"GetAllAssets\"]}''
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -351,6 +351,66 @@ function deployCCAAS() {
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
## Call the script to package the chaincode
|
||||||
|
function packageChaincode() {
|
||||||
|
|
||||||
|
infoln "Packaging chaincode"
|
||||||
|
|
||||||
|
scripts/packageCC.sh $CC_NAME $CC_SRC_PATH $CC_SRC_LANGUAGE $CC_VERSION true
|
||||||
|
|
||||||
|
if [ $? -ne 0 ]; then
|
||||||
|
fatalln "Packaging the chaincode failed"
|
||||||
|
fi
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
## Call the script to list installed and committed chaincode on a peer
|
||||||
|
function listChaincode() {
|
||||||
|
|
||||||
|
export FABRIC_CFG_PATH=${PWD}/../config
|
||||||
|
|
||||||
|
. scripts/envVar.sh
|
||||||
|
. scripts/ccutils.sh
|
||||||
|
|
||||||
|
setGlobals $ORG
|
||||||
|
|
||||||
|
println
|
||||||
|
queryInstalledOnPeer
|
||||||
|
println
|
||||||
|
|
||||||
|
listAllCommitted
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
## Call the script to invoke
|
||||||
|
function invokeChaincode() {
|
||||||
|
|
||||||
|
export FABRIC_CFG_PATH=${PWD}/../config
|
||||||
|
|
||||||
|
. scripts/envVar.sh
|
||||||
|
. scripts/ccutils.sh
|
||||||
|
|
||||||
|
setGlobals $ORG
|
||||||
|
|
||||||
|
chaincodeInvoke $ORG $CHANNEL_NAME $CC_NAME $CC_INVOKE_CONSTRUCTOR
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
## Call the script to query chaincode
|
||||||
|
function queryChaincode() {
|
||||||
|
|
||||||
|
export FABRIC_CFG_PATH=${PWD}/../config
|
||||||
|
|
||||||
|
. scripts/envVar.sh
|
||||||
|
. scripts/ccutils.sh
|
||||||
|
|
||||||
|
setGlobals $ORG
|
||||||
|
|
||||||
|
chaincodeQuery $ORG $CHANNEL_NAME $CC_NAME $CC_QUERY_CONSTRUCTOR
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
# Tear down running network
|
# Tear down running network
|
||||||
function networkDown() {
|
function networkDown() {
|
||||||
local temp_compose=$COMPOSE_FILE_BASE
|
local temp_compose=$COMPOSE_FILE_BASE
|
||||||
|
|
@ -396,25 +456,8 @@ function networkDown() {
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# Using crpto vs CA. default is cryptogen
|
. ./network.config
|
||||||
CRYPTO="cryptogen"
|
|
||||||
# timeout duration - the duration the CLI should wait for a response from
|
|
||||||
# another container before giving up
|
|
||||||
MAX_RETRY=5
|
|
||||||
# default for delay between commands
|
|
||||||
CLI_DELAY=3
|
|
||||||
# channel name defaults to "mychannel"
|
|
||||||
CHANNEL_NAME="mychannel"
|
|
||||||
# chaincode name defaults to "NA"
|
|
||||||
CC_NAME="NA"
|
|
||||||
# chaincode path defaults to "NA"
|
|
||||||
CC_SRC_PATH="NA"
|
|
||||||
# endorsement policy defaults to "NA". This would allow chaincodes to use the majority default policy.
|
|
||||||
CC_END_POLICY="NA"
|
|
||||||
# collection configuration defaults to "NA"
|
|
||||||
CC_COLL_CONFIG="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=compose-test-net.yaml
|
COMPOSE_FILE_BASE=compose-test-net.yaml
|
||||||
# docker-compose.yaml file if you are using couchdb
|
# docker-compose.yaml file if you are using couchdb
|
||||||
|
|
@ -428,16 +471,6 @@ COMPOSE_FILE_ORG3_COUCH=compose-couch-org3.yaml
|
||||||
# certificate authorities compose file
|
# certificate authorities compose file
|
||||||
COMPOSE_FILE_ORG3_CA=compose-ca-org3.yaml
|
COMPOSE_FILE_ORG3_CA=compose-ca-org3.yaml
|
||||||
#
|
#
|
||||||
# chaincode language defaults to "NA"
|
|
||||||
CC_SRC_LANGUAGE="NA"
|
|
||||||
# default to running the docker commands for the CCAAS
|
|
||||||
CCAAS_DOCKER_RUN=true
|
|
||||||
# Chaincode version
|
|
||||||
CC_VERSION="1.0"
|
|
||||||
# Chaincode definition sequence
|
|
||||||
CC_SEQUENCE=1
|
|
||||||
# default database
|
|
||||||
DATABASE="leveldb"
|
|
||||||
|
|
||||||
# Get docker sock path from environment variable
|
# Get docker sock path from environment variable
|
||||||
SOCK="${DOCKER_HOST:-/var/run/docker.sock}"
|
SOCK="${DOCKER_HOST:-/var/run/docker.sock}"
|
||||||
|
|
@ -457,15 +490,29 @@ else
|
||||||
shift
|
shift
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# parse a createChannel subcommand if used
|
## if no parameters are passed, show the help for cc
|
||||||
|
if [ "$MODE" == "cc" ] && [[ $# -lt 1 ]]; then
|
||||||
|
printHelp $MODE
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# parse subcommands if used
|
||||||
if [[ $# -ge 1 ]] ; then
|
if [[ $# -ge 1 ]] ; then
|
||||||
key="$1"
|
key="$1"
|
||||||
|
# check for the createChannel subcommand
|
||||||
if [[ "$key" == "createChannel" ]]; then
|
if [[ "$key" == "createChannel" ]]; then
|
||||||
export MODE="createChannel"
|
export MODE="createChannel"
|
||||||
shift
|
shift
|
||||||
|
# check for the cc command
|
||||||
|
elif [[ "$MODE" == "cc" ]]; then
|
||||||
|
if [ "$1" != "-h" ]; then
|
||||||
|
export SUBCOMMAND=$key
|
||||||
|
shift
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
# parse flags
|
# parse flags
|
||||||
|
|
||||||
while [[ $# -ge 1 ]] ; do
|
while [[ $# -ge 1 ]] ; do
|
||||||
|
|
@ -539,6 +586,26 @@ while [[ $# -ge 1 ]] ; do
|
||||||
-verbose )
|
-verbose )
|
||||||
VERBOSE=true
|
VERBOSE=true
|
||||||
;;
|
;;
|
||||||
|
-org )
|
||||||
|
ORG="$2"
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
-i )
|
||||||
|
IMAGETAG="$2"
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
-cai )
|
||||||
|
CA_IMAGETAG="$2"
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
-ccic )
|
||||||
|
CC_INVOKE_CONSTRUCTOR="$2"
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
-ccqc )
|
||||||
|
CC_QUERY_CONSTRUCTOR="$2"
|
||||||
|
shift
|
||||||
|
;;
|
||||||
* )
|
* )
|
||||||
errorln "Unknown flag: $key"
|
errorln "Unknown flag: $key"
|
||||||
printHelp
|
printHelp
|
||||||
|
|
@ -566,7 +633,10 @@ else
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Determine mode of operation and printing out what we asked for
|
# Determine mode of operation and printing out what we asked for
|
||||||
if [ "$MODE" == "up" ]; then
|
if [ "$MODE" == "prereq" ]; then
|
||||||
|
infoln "Installing binaries and fabric images. Fabric Version: ${IMAGETAG} Fabric CA Version: ${CA_IMAGETAG}"
|
||||||
|
installPrereqs
|
||||||
|
elif [ "$MODE" == "up" ]; then
|
||||||
infoln "Starting nodes with CLI timeout of '${MAX_RETRY}' tries and CLI delay of '${CLI_DELAY}' seconds and using database '${DATABASE}' ${CRYPTO_MODE}"
|
infoln "Starting nodes with CLI timeout of '${MAX_RETRY}' tries and CLI delay of '${CLI_DELAY}' seconds and using database '${DATABASE}' ${CRYPTO_MODE}"
|
||||||
networkUp
|
networkUp
|
||||||
elif [ "$MODE" == "createChannel" ]; then
|
elif [ "$MODE" == "createChannel" ]; then
|
||||||
|
|
@ -586,6 +656,14 @@ elif [ "$MODE" == "deployCC" ]; then
|
||||||
elif [ "$MODE" == "deployCCAAS" ]; then
|
elif [ "$MODE" == "deployCCAAS" ]; then
|
||||||
infoln "deploying chaincode-as-a-service on channel '${CHANNEL_NAME}'"
|
infoln "deploying chaincode-as-a-service on channel '${CHANNEL_NAME}'"
|
||||||
deployCCAAS
|
deployCCAAS
|
||||||
|
elif [ "$MODE" == "cc" ] && [ "$SUBCOMMAND" == "package" ]; then
|
||||||
|
packageChaincode
|
||||||
|
elif [ "$MODE" == "cc" ] && [ "$SUBCOMMAND" == "list" ]; then
|
||||||
|
listChaincode
|
||||||
|
elif [ "$MODE" == "cc" ] && [ "$SUBCOMMAND" == "invoke" ]; then
|
||||||
|
invokeChaincode
|
||||||
|
elif [ "$MODE" == "cc" ] && [ "$SUBCOMMAND" == "query" ]; then
|
||||||
|
queryChaincode
|
||||||
else
|
else
|
||||||
printHelp
|
printHelp
|
||||||
exit 1
|
exit 1
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,5 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
|
|
||||||
# installChaincode PEER ORG
|
# installChaincode PEER ORG
|
||||||
function installChaincode() {
|
function installChaincode() {
|
||||||
ORG=$1
|
ORG=$1
|
||||||
|
|
@ -173,4 +172,175 @@ function chaincodeQuery() {
|
||||||
else
|
else
|
||||||
fatalln "After $MAX_RETRY attempts, Query result on peer0.org${ORG} is INVALID!"
|
fatalln "After $MAX_RETRY attempts, Query result on peer0.org${ORG} is INVALID!"
|
||||||
fi
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
function resolveSequence() {
|
||||||
|
|
||||||
|
#if the sequence is not "auto", then use the provided sequence
|
||||||
|
if [[ "${CC_SEQUENCE}" != "auto" ]]; then
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
local rc=1
|
||||||
|
local COUNTER=1
|
||||||
|
# first, find the sequence number of the committed chaincode
|
||||||
|
# we either get a successful response, or reach MAX RETRY
|
||||||
|
while [ $rc -ne 0 -a $COUNTER -lt $MAX_RETRY ]; do
|
||||||
|
set -x
|
||||||
|
COMMITTED_CC_SEQUENCE=$(peer lifecycle chaincode querycommitted --channelID $CHANNEL_NAME --name ${CC_NAME} | sed -n "/Version:/{s/.*Sequence: //; s/, Endorsement Plugin:.*$//; p;}")
|
||||||
|
res=$?
|
||||||
|
{ set +x; } 2>/dev/null
|
||||||
|
let rc=$res
|
||||||
|
COUNTER=$(expr $COUNTER + 1)
|
||||||
|
done
|
||||||
|
|
||||||
|
# if there are no committed versions, then set the sequence to 1
|
||||||
|
if [ -z $COMMITTED_CC_SEQUENCE ]; then
|
||||||
|
CC_SEQUENCE=1
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
rc=1
|
||||||
|
COUNTER=1
|
||||||
|
# next, find the sequence number of the approved chaincode
|
||||||
|
# we either get a successful response, or reach MAX RETRY
|
||||||
|
while [ $rc -ne 0 -a $COUNTER -lt $MAX_RETRY ]; do
|
||||||
|
set -x
|
||||||
|
APPROVED_CC_SEQUENCE=$(peer lifecycle chaincode queryapproved --channelID $CHANNEL_NAME --name ${CC_NAME} | sed -n "/sequence:/{s/^sequence: //; s/, version:.*$//; p;}")
|
||||||
|
res=$?
|
||||||
|
{ set +x; } 2>/dev/null
|
||||||
|
let rc=$res
|
||||||
|
COUNTER=$(expr $COUNTER + 1)
|
||||||
|
done
|
||||||
|
|
||||||
|
# if the committed sequence and the approved sequence match, then increment the sequence
|
||||||
|
# otherwise, use the approved sequence
|
||||||
|
if [ $COMMITTED_CC_SEQUENCE == $APPROVED_CC_SEQUENCE ]; then
|
||||||
|
CC_SEQUENCE=$((COMMITTED_CC_SEQUENCE+1))
|
||||||
|
else
|
||||||
|
CC_SEQUENCE=$APPROVED_CC_SEQUENCE
|
||||||
|
fi
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#. scripts/envVar.sh
|
||||||
|
|
||||||
|
queryInstalledOnPeer() {
|
||||||
|
|
||||||
|
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 list on peer0.org${ORG}, Retry after $DELAY seconds."
|
||||||
|
peer lifecycle chaincode queryinstalled >&log.txt
|
||||||
|
res=$?
|
||||||
|
let rc=$res
|
||||||
|
COUNTER=$(expr $COUNTER + 1)
|
||||||
|
done
|
||||||
|
cat log.txt
|
||||||
|
}
|
||||||
|
|
||||||
|
queryCommittedOnChannel() {
|
||||||
|
CHANNEL=$1
|
||||||
|
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 list on peer0.org${ORG}, Retry after $DELAY seconds."
|
||||||
|
peer lifecycle chaincode querycommitted -C $CHANNEL >&log.txt
|
||||||
|
res=$?
|
||||||
|
let rc=$res
|
||||||
|
COUNTER=$(expr $COUNTER + 1)
|
||||||
|
done
|
||||||
|
cat log.txt
|
||||||
|
if test $rc -ne 0; then
|
||||||
|
fatalln "After $MAX_RETRY attempts, Failed to retrieve committed chaincode!"
|
||||||
|
fi
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
## Function to list chaincodes installed on the peer and committed chaincode visible to the org
|
||||||
|
listAllCommitted() {
|
||||||
|
|
||||||
|
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
|
||||||
|
CHANNEL_LIST=$(peer channel list | sed '1,1d')
|
||||||
|
res=$?
|
||||||
|
let rc=$res
|
||||||
|
COUNTER=$(expr $COUNTER + 1)
|
||||||
|
done
|
||||||
|
if test $rc -eq 0; then
|
||||||
|
for channel in $CHANNEL_LIST
|
||||||
|
do
|
||||||
|
queryCommittedOnChannel "$channel"
|
||||||
|
done
|
||||||
|
else
|
||||||
|
fatalln "After $MAX_RETRY attempts, Failed to retrieve committed chaincode!"
|
||||||
|
fi
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
chaincodeInvoke() {
|
||||||
|
ORG=$1
|
||||||
|
CHANNEL=$2
|
||||||
|
CC_NAME=$3
|
||||||
|
CC_INVOKE_CONSTRUCTOR=$4
|
||||||
|
|
||||||
|
infoln "Invoking 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 Invoke on peer0.org${ORG}, Retry after $DELAY seconds."
|
||||||
|
set -x
|
||||||
|
peer chaincode invoke -o localhost:7050 -C $CHANNEL_NAME -n ${CC_NAME} -c ${CC_INVOKE_CONSTRUCTOR} --tls --cafile $ORDERER_CA --peerAddresses localhost:7051 --tlsRootCertFiles $PEER0_ORG1_CA --peerAddresses localhost:9051 --tlsRootCertFiles $PEER0_ORG2_CA >&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 "Invoke successful on peer0.org${ORG} on channel '$CHANNEL_NAME'"
|
||||||
|
else
|
||||||
|
fatalln "After $MAX_RETRY attempts, Invoke result on peer0.org${ORG} is INVALID!"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
chaincodeQuery() {
|
||||||
|
ORG=$1
|
||||||
|
CHANNEL=$2
|
||||||
|
CC_NAME=$3
|
||||||
|
CC_QUERY_CONSTRUCTOR=$4
|
||||||
|
|
||||||
|
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 ${CC_QUERY_CONSTRUCTOR} >&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
|
||||||
}
|
}
|
||||||
|
|
@ -29,66 +29,6 @@ println "- DELAY: ${C_GREEN}${DELAY}${C_RESET}"
|
||||||
println "- MAX_RETRY: ${C_GREEN}${MAX_RETRY}${C_RESET}"
|
println "- MAX_RETRY: ${C_GREEN}${MAX_RETRY}${C_RESET}"
|
||||||
println "- VERBOSE: ${C_GREEN}${VERBOSE}${C_RESET}"
|
println "- VERBOSE: ${C_GREEN}${VERBOSE}${C_RESET}"
|
||||||
|
|
||||||
FABRIC_CFG_PATH=$PWD/../config/
|
|
||||||
|
|
||||||
#User has not provided a name
|
|
||||||
if [ -z "$CC_NAME" ] || [ "$CC_NAME" = "NA" ]; then
|
|
||||||
fatalln "No chaincode name was provided. Valid call example: ./network.sh deployCC -ccn basic -ccp ../asset-transfer-basic/chaincode-go -ccl go"
|
|
||||||
|
|
||||||
# User has not provided a path
|
|
||||||
elif [ -z "$CC_SRC_PATH" ] || [ "$CC_SRC_PATH" = "NA" ]; then
|
|
||||||
fatalln "No chaincode path was provided. Valid call example: ./network.sh deployCC -ccn basic -ccp ../asset-transfer-basic/chaincode-go -ccl go"
|
|
||||||
|
|
||||||
# User has not provided a language
|
|
||||||
elif [ -z "$CC_SRC_LANGUAGE" ] || [ "$CC_SRC_LANGUAGE" = "NA" ]; then
|
|
||||||
fatalln "No chaincode language was provided. Valid call example: ./network.sh deployCC -ccn basic -ccp ../asset-transfer-basic/chaincode-go -ccl go"
|
|
||||||
|
|
||||||
## Make sure that the path to the chaincode exists
|
|
||||||
elif [ ! -d "$CC_SRC_PATH" ] && [ ! -f "$CC_SRC_PATH" ]; then
|
|
||||||
fatalln "Path to chaincode does not exist. Please provide different path."
|
|
||||||
fi
|
|
||||||
|
|
||||||
CC_SRC_LANGUAGE=$(echo "$CC_SRC_LANGUAGE" | tr [:upper:] [:lower:])
|
|
||||||
|
|
||||||
# do some language specific preparation to the chaincode before packaging
|
|
||||||
if [ "$CC_SRC_LANGUAGE" = "go" ]; then
|
|
||||||
CC_RUNTIME_LANGUAGE=golang
|
|
||||||
|
|
||||||
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
|
|
||||||
|
|
||||||
rm -rf $CC_SRC_PATH/build/install/
|
|
||||||
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
|
|
||||||
|
|
||||||
elif [ "$CC_SRC_LANGUAGE" = "typescript" ]; then
|
|
||||||
CC_RUNTIME_LANGUAGE=node
|
|
||||||
|
|
||||||
infoln "Compiling TypeScript code into JavaScript..."
|
|
||||||
pushd $CC_SRC_PATH
|
|
||||||
npm install
|
|
||||||
npm run build
|
|
||||||
popd
|
|
||||||
successln "Finished compiling TypeScript code into JavaScript"
|
|
||||||
|
|
||||||
else
|
|
||||||
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"
|
INIT_REQUIRED="--init-required"
|
||||||
# check if the init fcn should be called
|
# check if the init fcn should be called
|
||||||
if [ "$CC_INIT_FCN" = "NA" ]; then
|
if [ "$CC_INIT_FCN" = "NA" ]; then
|
||||||
|
|
@ -107,21 +47,12 @@ else
|
||||||
CC_COLL_CONFIG="--collections-config $CC_COLL_CONFIG"
|
CC_COLL_CONFIG="--collections-config $CC_COLL_CONFIG"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
FABRIC_CFG_PATH=$PWD/../config/
|
||||||
|
|
||||||
# import utils
|
# import utils
|
||||||
. scripts/envVar.sh
|
. scripts/envVar.sh
|
||||||
. scripts/ccutils.sh
|
. scripts/ccutils.sh
|
||||||
|
|
||||||
packageChaincode() {
|
|
||||||
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=$?
|
|
||||||
PACKAGE_ID=$(peer lifecycle chaincode calculatepackageid ${CC_NAME}.tar.gz)
|
|
||||||
{ set +x; } 2>/dev/null
|
|
||||||
cat log.txt
|
|
||||||
verifyResult $res "Chaincode packaging has failed"
|
|
||||||
successln "Chaincode is packaged"
|
|
||||||
}
|
|
||||||
|
|
||||||
function checkPrereqs() {
|
function checkPrereqs() {
|
||||||
jq --version > /dev/null 2>&1
|
jq --version > /dev/null 2>&1
|
||||||
|
|
||||||
|
|
@ -138,7 +69,9 @@ function checkPrereqs() {
|
||||||
checkPrereqs
|
checkPrereqs
|
||||||
|
|
||||||
## package the chaincode
|
## package the chaincode
|
||||||
packageChaincode
|
./scripts/packageCC.sh $CC_NAME $CC_SRC_PATH $CC_SRC_LANGUAGE $CC_VERSION
|
||||||
|
|
||||||
|
PACKAGE_ID=$(peer lifecycle chaincode calculatepackageid ${CC_NAME}.tar.gz)
|
||||||
|
|
||||||
## Install chaincode on peer0.org1 and peer0.org2
|
## Install chaincode on peer0.org1 and peer0.org2
|
||||||
infoln "Installing chaincode on peer0.org1..."
|
infoln "Installing chaincode on peer0.org1..."
|
||||||
|
|
@ -146,6 +79,8 @@ installChaincode 1
|
||||||
infoln "Install chaincode on peer0.org2..."
|
infoln "Install chaincode on peer0.org2..."
|
||||||
installChaincode 2
|
installChaincode 2
|
||||||
|
|
||||||
|
resolveSequence
|
||||||
|
|
||||||
## query whether the chaincode is installed
|
## query whether the chaincode is installed
|
||||||
queryInstalled 1
|
queryInstalled 1
|
||||||
|
|
||||||
|
|
|
||||||
103
test-network/scripts/packageCC.sh
Executable file
103
test-network/scripts/packageCC.sh
Executable file
|
|
@ -0,0 +1,103 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
source scripts/utils.sh
|
||||||
|
|
||||||
|
CC_NAME=${1}
|
||||||
|
CC_SRC_PATH=${2}
|
||||||
|
CC_SRC_LANGUAGE=${3}
|
||||||
|
CC_VERSION=${4}
|
||||||
|
CC_PACKAGE_ONLY=${5:-false}
|
||||||
|
|
||||||
|
println "executing with the following"
|
||||||
|
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}"
|
||||||
|
|
||||||
|
FABRIC_CFG_PATH=$PWD/../config/
|
||||||
|
|
||||||
|
#User has not provided a name
|
||||||
|
if [ -z "$CC_NAME" ] || [ "$CC_NAME" = "NA" ]; then
|
||||||
|
fatalln "No chaincode name was provided. Valid call example: ./network.sh packageCC -ccn basic -ccp chaincode/asset-transfer-basic/chaincode-go -ccv 1.0.0 -ccl go"
|
||||||
|
|
||||||
|
# User has not provided a path
|
||||||
|
elif [ -z "$CC_SRC_PATH" ] || [ "$CC_SRC_PATH" = "NA" ]; then
|
||||||
|
fatalln "No chaincode path was provided. Valid call example: ./network.sh packageCC -ccn basic -ccp chaincode/asset-transfer-basic/chaincode-go -ccv 1.0.0 -ccl go"
|
||||||
|
|
||||||
|
# User has not provided a language
|
||||||
|
elif [ -z "$CC_SRC_LANGUAGE" ] || [ "$CC_SRC_LANGUAGE" = "NA" ]; then
|
||||||
|
fatalln "No chaincode language was provided. Valid call example: ./network.sh packageCC -ccn basic -ccp chaincode/asset-transfer-basic/chaincode-go -ccv 1.0.0 -ccl go"
|
||||||
|
|
||||||
|
## Make sure that the path to the chaincode exists
|
||||||
|
elif [ ! -d "$CC_SRC_PATH" ]; then
|
||||||
|
fatalln "Path to chaincode does not exist. Please provide different path."
|
||||||
|
fi
|
||||||
|
|
||||||
|
CC_SRC_LANGUAGE=$(echo "$CC_SRC_LANGUAGE" | tr [:upper:] [:lower:])
|
||||||
|
|
||||||
|
# do some language specific preparation to the chaincode before packaging
|
||||||
|
if [ "$CC_SRC_LANGUAGE" = "go" ]; then
|
||||||
|
CC_RUNTIME_LANGUAGE=golang
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|
elif [ "$CC_SRC_LANGUAGE" = "typescript" ]; then
|
||||||
|
CC_RUNTIME_LANGUAGE=node
|
||||||
|
|
||||||
|
infoln "Compiling TypeScript code into JavaScript..."
|
||||||
|
pushd $CC_SRC_PATH
|
||||||
|
npm install
|
||||||
|
npm run build
|
||||||
|
popd
|
||||||
|
successln "Finished compiling TypeScript code into JavaScript"
|
||||||
|
|
||||||
|
else
|
||||||
|
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
|
||||||
|
|
||||||
|
verifyResult() {
|
||||||
|
if [ $1 -ne 0 ]; then
|
||||||
|
fatalln "$2"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
packageChaincode() {
|
||||||
|
set -x
|
||||||
|
if [ ${CC_PACKAGE_ONLY} = true ] ; then
|
||||||
|
mkdir -p packagedChaincode
|
||||||
|
peer lifecycle chaincode package packagedChaincode/${CC_NAME}_${CC_VERSION}.tar.gz --path ${CC_SRC_PATH} --lang ${CC_RUNTIME_LANGUAGE} --label ${CC_NAME}_${CC_VERSION} >&log.txt
|
||||||
|
else
|
||||||
|
peer lifecycle chaincode package ${CC_NAME}.tar.gz --path ${CC_SRC_PATH} --lang ${CC_RUNTIME_LANGUAGE} --label ${CC_NAME}_${CC_VERSION} >&log.txt
|
||||||
|
fi
|
||||||
|
res=$?
|
||||||
|
{ set +x; } 2>/dev/null
|
||||||
|
cat log.txt
|
||||||
|
PACKAGE_ID=$(peer lifecycle chaincode calculatepackageid ${CC_NAME}.tar.gz)
|
||||||
|
verifyResult $res "Chaincode packaging has failed"
|
||||||
|
successln "Chaincode is packaged"
|
||||||
|
}
|
||||||
|
|
||||||
|
## package the chaincode
|
||||||
|
packageChaincode
|
||||||
|
|
||||||
|
exit 0
|
||||||
|
|
@ -9,7 +9,18 @@ C_YELLOW='\033[1;33m'
|
||||||
# Print the usage message
|
# Print the usage message
|
||||||
function printHelp() {
|
function printHelp() {
|
||||||
USAGE="$1"
|
USAGE="$1"
|
||||||
if [ "$USAGE" == "up" ]; then
|
if [ "$USAGE" == "prereq" ]; then
|
||||||
|
println "Usage: "
|
||||||
|
println " network.sh <Mode> [Flags]"
|
||||||
|
println " Modes:"
|
||||||
|
println " \033[0;32mprereq\033[0m - Install Fabric binaries and docker images"
|
||||||
|
println
|
||||||
|
println " Flags:"
|
||||||
|
println " Used with \033[0;32mnetwork.sh prereq\033[0m:"
|
||||||
|
println " -i FabricVersion (default: '2.5.4')"
|
||||||
|
println " -cai Fabric CA Version (default: '1.5.7')"
|
||||||
|
println
|
||||||
|
elif [ "$USAGE" == "up" ]; then
|
||||||
println "Usage: "
|
println "Usage: "
|
||||||
println " network.sh \033[0;32mup\033[0m [Flags]"
|
println " network.sh \033[0;32mup\033[0m [Flags]"
|
||||||
println
|
println
|
||||||
|
|
@ -62,7 +73,7 @@ function printHelp() {
|
||||||
println " -ccn <name> - Chaincode name."
|
println " -ccn <name> - Chaincode name."
|
||||||
println " -ccl <language> - Programming language of chaincode to deploy: go, java, javascript, typescript"
|
println " -ccl <language> - Programming language of chaincode to deploy: go, java, javascript, typescript"
|
||||||
println " -ccv <version> - Chaincode version. 1.0 (default), v2, version3.x, etc"
|
println " -ccv <version> - Chaincode version. 1.0 (default), v2, version3.x, etc"
|
||||||
println " -ccs <sequence> - Chaincode definition sequence. Must be an integer, 1 (default), 2, 3, etc"
|
println " -ccs <sequence> - Chaincode definition sequence. Must be auto (default) or an integer, 1 , 2, 3, etc"
|
||||||
println " -ccp <path> - File path to the chaincode."
|
println " -ccp <path> - File path to the chaincode."
|
||||||
println " -ccep <policy> - (Optional) Chaincode endorsement policy using signature policy syntax. The default policy requires an endorsement from Org1 and Org2"
|
println " -ccep <policy> - (Optional) Chaincode endorsement policy using signature policy syntax. The default policy requires an endorsement from Org1 and Org2"
|
||||||
println " -cccg <collection-config> - (Optional) File path to private data collections configuration file"
|
println " -cccg <collection-config> - (Optional) File path to private data collections configuration file"
|
||||||
|
|
@ -84,7 +95,7 @@ function printHelp() {
|
||||||
println " -c <channel name> - Name of channel to deploy chaincode to"
|
println " -c <channel name> - Name of channel to deploy chaincode to"
|
||||||
println " -ccn <name> - Chaincode name."
|
println " -ccn <name> - Chaincode name."
|
||||||
println " -ccv <version> - Chaincode version. 1.0 (default), v2, version3.x, etc"
|
println " -ccv <version> - Chaincode version. 1.0 (default), v2, version3.x, etc"
|
||||||
println " -ccs <sequence> - Chaincode definition sequence. Must be an integer, 1 (default), 2, 3, etc"
|
println " -ccs <sequence> - Chaincode definition sequence. Must be auto (default) or an integer, 1 , 2, 3, etc"
|
||||||
println " -ccp <path> - File path to the chaincode. (used to find the dockerfile for building the docker image only)"
|
println " -ccp <path> - File path to the chaincode. (used to find the dockerfile for building the docker image only)"
|
||||||
println " -ccep <policy> - (Optional) Chaincode endorsement policy using signature policy syntax. The default policy requires an endorsement from Org1 and Org2"
|
println " -ccep <policy> - (Optional) Chaincode endorsement policy using signature policy syntax. The default policy requires an endorsement from Org1 and Org2"
|
||||||
println " -cccg <collection-config> - (Optional) File path to private data collections configuration file"
|
println " -cccg <collection-config> - (Optional) File path to private data collections configuration file"
|
||||||
|
|
@ -98,18 +109,59 @@ function printHelp() {
|
||||||
println
|
println
|
||||||
println " Examples:"
|
println " Examples:"
|
||||||
println " network.sh deployCCAAS -ccn basicj -ccp ../asset-transfer-basic/chaincode-java"
|
println " network.sh deployCCAAS -ccn basicj -ccp ../asset-transfer-basic/chaincode-java"
|
||||||
println " network.sh deployCCAAS -ccn basict -ccp ../asset-transfer-basic/chaincode-typescript -ccaasdocker false"
|
println " network.sh deployCCAAS -ccn basict -ccp ../asset-transfer-basic/chaincode-typescript -ccaasdocker false"
|
||||||
|
elif [ "$USAGE" == "cc" ] ; then
|
||||||
|
println "Usage: "
|
||||||
|
println " network.sh cc <Mode> [Flags]"
|
||||||
|
println
|
||||||
|
println " Modes:"
|
||||||
|
println " \033[0;32mlist\033[0m - list chaincodes installed on a peer and committed on a channel"
|
||||||
|
println " \033[0;32mpackage\033[0m - package a chaincode in tar format. Stores in directory packagedChaincode"
|
||||||
|
println " \033[0;32minvoke\033[0m - execute an invoke operation"
|
||||||
|
println " \033[0;32mquery\033[0m - execute an query operation"
|
||||||
|
println
|
||||||
|
println " Flags:"
|
||||||
|
println " -org <number> - Org number for the executing the command (1,2,etc) (default is 1)."
|
||||||
|
println " -c <channel name> - Name of channel"
|
||||||
|
println " -ccn <name> - Chaincode name."
|
||||||
|
println " -ccl <language> - Programming language of chaincode to deploy: go, java, javascript, typescript"
|
||||||
|
println " -ccv <version> - Chaincode version. 1.0 (default), v2, version3.x, etc"
|
||||||
|
println " -ccp <path> - File path to the chaincode."
|
||||||
|
println " -ccic <string> - Chaincode invoke constructor."
|
||||||
|
println " -ccqc <string> - Chaincode query constructor."
|
||||||
|
println " -h - Print this message"
|
||||||
|
println
|
||||||
|
println " Possible Mode and flag combinations"
|
||||||
|
println " \033[0;32mcc list\033[0m -org -verbose"
|
||||||
|
println " \033[0;32mcc package\033[0m -ccn -ccl -ccv -ccp -verbose"
|
||||||
|
println " \033[0;32mcc invoke\033[0m -org -c -ccic -verbose"
|
||||||
|
println " \033[0;32mcc query\033[0m -org -c -ccqc -verbose"
|
||||||
|
println
|
||||||
|
println " Examples:"
|
||||||
|
println " network.sh cc list -org 1"
|
||||||
|
println " network.sh cc package -ccn basic -ccp chaincode/asset-transfer-basic/go -ccv 1.0.0 -ccl go"
|
||||||
|
println " network.sh cc invoke -c channel1 -ccic '{\"Args\":[\"CreateAsset\",\"asset1\",\"red\",\"10\",\"fred\",\"500\"]}'"
|
||||||
|
println " network.sh cc query -c channel1 -ccqc '{\"Args\":[\"ReadAsset\",\"asset1\"]}'"
|
||||||
|
println
|
||||||
|
println " NOTE: Default settings can be changed in network.config"
|
||||||
|
println
|
||||||
else
|
else
|
||||||
println "Usage: "
|
println "Usage: "
|
||||||
println " network.sh <Mode> [Flags]"
|
println " network.sh <Mode> [Flags]"
|
||||||
println " Modes:"
|
println " Modes:"
|
||||||
|
println " \033[0;32mprereq\033[0m - Install Fabric binaries and docker images"
|
||||||
println " \033[0;32mup\033[0m - Bring up Fabric orderer and peer nodes. No channel is created"
|
println " \033[0;32mup\033[0m - Bring up Fabric orderer and peer nodes. No channel is created"
|
||||||
println " \033[0;32mup createChannel\033[0m - Bring up fabric network with one channel"
|
println " \033[0;32mup createChannel\033[0m - Bring up fabric network with one channel"
|
||||||
println " \033[0;32mcreateChannel\033[0m - Create and join a channel after the network is created"
|
println " \033[0;32mcreateChannel\033[0m - Create and join a channel after the network is created"
|
||||||
println " \033[0;32mdeployCC\033[0m - Deploy a chaincode to a channel (defaults to asset-transfer-basic)"
|
println " \033[0;32mdeployCC\033[0m - Deploy a chaincode to a channel (defaults to asset-transfer-basic)"
|
||||||
|
println " \033[0;32mcc\033[0m - chaincode functions, use \"network.sh cc -h\" for options"
|
||||||
println " \033[0;32mdown\033[0m - Bring down the network"
|
println " \033[0;32mdown\033[0m - Bring down the network"
|
||||||
println
|
println
|
||||||
println " Flags:"
|
println " Flags:"
|
||||||
|
println " Used with \033[0;32mnetwork.sh prereq\033[0m"
|
||||||
|
println " -i FabricVersion (default: '2.5.4')"
|
||||||
|
println " -cai Fabric CA Version (default: '1.5.7')"
|
||||||
|
println
|
||||||
println " Used with \033[0;32mnetwork.sh up\033[0m, \033[0;32mnetwork.sh createChannel\033[0m:"
|
println " Used with \033[0;32mnetwork.sh up\033[0m, \033[0;32mnetwork.sh createChannel\033[0m:"
|
||||||
println " -ca - Use Certificate Authorities to generate network crypto material"
|
println " -ca - Use Certificate Authorities to generate network crypto material"
|
||||||
println " -cfssl <use CFSSL> - Use CFSSL CA to generate network crypto material"
|
println " -cfssl <use CFSSL> - Use CFSSL CA to generate network crypto material"
|
||||||
|
|
@ -120,12 +172,12 @@ function printHelp() {
|
||||||
println " -d <delay> - CLI delays for a certain number of seconds (defaults to 3)"
|
println " -d <delay> - CLI delays for a certain number of seconds (defaults to 3)"
|
||||||
println " -verbose - Verbose mode"
|
println " -verbose - Verbose mode"
|
||||||
println
|
println
|
||||||
println " Used with \033[0;32mnetwork.sh deployCC\033[0m"
|
println " Used with \033[0;32mnetwork.sh deployCC\033[0m:"
|
||||||
println " -c <channel name> - Name of channel to deploy chaincode to"
|
println " -c <channel name> - Name of channel to deploy chaincode to"
|
||||||
println " -ccn <name> - Chaincode name."
|
println " -ccn <name> - Chaincode name."
|
||||||
println " -ccl <language> - Programming language of the chaincode to deploy: go, java, javascript, typescript"
|
println " -ccl <language> - Programming language of the chaincode to deploy: go, java, javascript, typescript"
|
||||||
println " -ccv <version> - Chaincode version. 1.0 (default), v2, version3.x, etc"
|
println " -ccv <version> - Chaincode version. 1.0 (default), v2, version3.x, etc"
|
||||||
println " -ccs <sequence> - Chaincode definition sequence. Must be an integer, 1 (default), 2, 3, etc"
|
println " -ccs <sequence> - Chaincode definition sequence. Must be auto (default) or an integer, 1 , 2, 3, etc"
|
||||||
println " -ccp <path> - File path to the chaincode."
|
println " -ccp <path> - File path to the chaincode."
|
||||||
println " -ccep <policy> - (Optional) Chaincode endorsement policy using signature policy syntax. The default policy requires an endorsement from Org1 and Org2"
|
println " -ccep <policy> - (Optional) Chaincode endorsement policy using signature policy syntax. The default policy requires an endorsement from Org1 and Org2"
|
||||||
println " -cccg <collection-config> - (Optional) File path to private data collections configuration file"
|
println " -cccg <collection-config> - (Optional) File path to private data collections configuration file"
|
||||||
|
|
@ -146,9 +198,36 @@ function printHelp() {
|
||||||
println " network.sh createChannel -c channelName"
|
println " network.sh createChannel -c channelName"
|
||||||
println " network.sh deployCC -ccn basic -ccp ../asset-transfer-basic/chaincode-javascript/ -ccl javascript"
|
println " network.sh deployCC -ccn basic -ccp ../asset-transfer-basic/chaincode-javascript/ -ccl javascript"
|
||||||
println " network.sh deployCC -ccn mychaincode -ccp ./user/mychaincode -ccv 1 -ccl javascript"
|
println " network.sh deployCC -ccn mychaincode -ccp ./user/mychaincode -ccv 1 -ccl javascript"
|
||||||
|
println
|
||||||
|
println " NOTE: Default settings can be changed in network.config"
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function installPrereqs() {
|
||||||
|
|
||||||
|
infoln "installing prereqs"
|
||||||
|
|
||||||
|
FILE=../install-fabric.sh
|
||||||
|
if [ ! -f $FILE ]; then
|
||||||
|
curl -sSLO https://raw.githubusercontent.com/hyperledger/fabric/main/scripts/install-fabric.sh && chmod +x install-fabric.sh
|
||||||
|
cp install-fabric.sh ..
|
||||||
|
fi
|
||||||
|
|
||||||
|
IMAGE_PARAMETER=""
|
||||||
|
if [ "$IMAGETAG" != "default" ]; then
|
||||||
|
IMAGE_PARAMETER="-f ${IMAGETAG}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
CA_IMAGE_PARAMETER=""
|
||||||
|
if [ "$CA_IMAGETAG" != "default" ]; then
|
||||||
|
CA_IMAGE_PARAMETER="-c ${CA_IMAGETAG}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
cd ..
|
||||||
|
./install-fabric.sh ${IMAGE_PARAMETER} ${CA_IMAGE_PARAMETER} docker binary
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
# println echos string
|
# println echos string
|
||||||
function println() {
|
function println() {
|
||||||
echo -e "$1"
|
echo -e "$1"
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue