support deployment of any contract

This commit is contained in:
ccorley 2020-05-11 14:48:15 -05:00
parent b26fd5c4fc
commit 47d84bd566
6 changed files with 101 additions and 34 deletions

View file

@ -31,6 +31,7 @@
export PATH=${PWD}/../bin:${PWD}:$PATH
export FABRIC_CFG_PATH=${PWD}
export VERBOSE=false
export NO_CHAINCODE=false
# Print the usage message
function printHelp() {
@ -47,6 +48,9 @@ function printHelp() {
echo " -d <delay> - delay duration in seconds (defaults to 3)"
echo " -s <dbtype> - the database backend to use: goleveldb (default) or couchdb"
echo " -l <language> - the programming language of the chaincode to deploy: go (default), javascript, or java"
echo " -p <chaincode path> - the path of the chaincode to package and deploy"
echo " -m <chaincode name> - the name of the chaincode to deploy"
echo " -e <chaincode version> - the version of the chaincode to be deployed"
echo " -i <imagetag> - the tag to be used to launch the network (defaults to \"latest\")"
echo " -a - launch certificate authorities (no certificate authorities are launched by default)"
echo " -n - do not deploy chaincode (abstore chaincode is deployed by default)"
@ -67,6 +71,10 @@ function printHelp() {
echo " byfn.sh generate"
echo " byfn.sh up"
echo " byfn.sh down"
echo
echo "Installing your own chaincode:"
echo " byfn.sh up -c mychannel -l javascript -cpath ../../fabric-samples/chaincode/mychaincode -cname mychaincode -version 1"
echo
}
# Ask user for confirmation to proceed
@ -174,7 +182,7 @@ function networkUp() {
echo "Sleeping 15s to allow Raft cluster to complete booting"
sleep 15
if [ "${NO_CHAINCODE}" != "true" ]; then
if [[ "${NO_CHAINCODE}" != "true" ]] && [[ -z "${CC_SRC_PATH}" ]]; then
echo Vendoring Go dependencies ...
pushd ../chaincode/abstore/go
GO111MODULE=on go mod vendor
@ -183,7 +191,7 @@ function networkUp() {
fi
# now run the end to end script
docker exec cli scripts/script.sh $CHANNEL_NAME $CLI_DELAY $CC_SRC_LANGUAGE $CLI_TIMEOUT $VERBOSE $NO_CHAINCODE
docker exec cli scripts/script.sh $CHANNEL_NAME $CLI_DELAY $CC_SRC_LANGUAGE $CLI_TIMEOUT $VERBOSE $NO_CHAINCODE $CC_SRC_PATH $CC_NAME $VERSION
if [ $? -ne 0 ]; then
echo "ERROR !!!! Test failed"
exit 1
@ -465,7 +473,7 @@ else
exit 1
fi
while getopts "h?c:t:d:s:l:i:anv" opt; do
while getopts "h?c:t:d:s:l:i:p:m:e:anv" opt; do
case "$opt" in
h | \?)
printHelp
@ -473,30 +481,51 @@ while getopts "h?c:t:d:s:l:i:anv" opt; do
;;
c)
CHANNEL_NAME=$OPTARG
echo "CHANNEL_NAME: "$CHANNEL_NAME
;;
t)
CLI_TIMEOUT=$OPTARG
echo "CLI_TIMEOUT: "$CLI_TIMEOUT
;;
d)
CLI_DELAY=$OPTARG
echo "CLI_DELAY: "$CLI_DELAY
;;
s)
IF_COUCHDB=$OPTARG
echo "IF_COUCHDB: "$IF_COUCHDB
;;
l)
CC_SRC_LANGUAGE=$OPTARG
echo "CC_SRC_LANGUAGE: "$CC_SRC_LANGUAGE
;;
i)
IMAGETAG=$(go env GOARCH)"-"$OPTARG
echo "IMAGETAG: "$IMAGETAG
;;
p)
CC_SRC_PATH=$OPTARG
echo "CC_SRC_PATH: "$CC_SRC_PATH
;;
m)
CC_NAME=$OPTARG
echo "CC_NAME: "$CC_NAME
;;
e)
VERSION=$OPTARG
echo "VERSION: "$VERSION
;;
a)
CERTIFICATE_AUTHORITIES=true
echo "CERTIFICATE_AUTHORITIES: "$CERTIFICATE_AUTHORITIES
;;
n)
NO_CHAINCODE=true
echo "NO_CHAINCODE: "$NO_CHAINCODE
;;
v)
VERBOSE=true
echo "VERBOSE: "$VERBOSE
;;
esac
done

7
first-network/scripts/env.sh Executable file
View file

@ -0,0 +1,7 @@
#!/bin/sh
export CHANNEL_NAME=channel1
export CAFILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem
export ORG1TLS=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt
export ORG2TLS=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt

8
first-network/scripts/org1.sh Executable file
View file

@ -0,0 +1,8 @@
#!/bin/sh
# Environment variables for PEER0 in Org1
CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp
CORE_PEER_ADDRESS=peer0.org1.example.com:7051
CORE_PEER_LOCALMSPID="Org1MSP"
CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt

8
first-network/scripts/org2.sh Executable file
View file

@ -0,0 +1,8 @@
#!/bin/sh
# Environment variables for PEER0 in Org2
CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp
CORE_PEER_ADDRESS=peer0.org2.example.com:9051
CORE_PEER_LOCALMSPID="Org2MSP"
CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt

View file

@ -15,32 +15,47 @@ CC_SRC_LANGUAGE="$3"
TIMEOUT="$4"
VERBOSE="$5"
NO_CHAINCODE="$6"
CC_SRC_PATH="$7"
CC_NAME="$8"
VERSION="$9"
: ${CHANNEL_NAME:="mychannel"}
: ${DELAY:="3"}
: ${CC_SRC_LANGUAGE:="go"}
: ${TIMEOUT:="10"}
: ${VERBOSE:="false"}
: ${NO_CHAINCODE:="false"}
: ${CC_NAME:="mycc"}
: ${VERSION:="1"}
CC_SRC_LANGUAGE=`echo "$CC_SRC_LANGUAGE" | tr [:upper:] [:lower:]`
COUNTER=1
MAX_RETRY=20
PACKAGE_ID=""
echo "script.sh inputs: "$1 $2 $3 $4 $5 $6 $7 $8 $9
# set chaincode runtime language
if [ "$CC_SRC_LANGUAGE" = "go" -o "$CC_SRC_LANGUAGE" = "golang" ]; then
CC_RUNTIME_LANGUAGE=golang
CC_SRC_PATH="github.com/hyperledger/fabric-samples/chaincode/abstore/go/"
elif [ "$CC_SRC_LANGUAGE" = "javascript" ]; then
CC_RUNTIME_LANGUAGE=node # chaincode runtime language is node.js
CC_SRC_PATH="/opt/gopath/src/github.com/hyperledger/fabric-samples/chaincode/abstore/javascript/"
elif [ "$CC_SRC_LANGUAGE" = "java" ]; then
CC_RUNTIME_LANGUAGE=java
CC_SRC_PATH="/opt/gopath/src/github.com/hyperledger/fabric-samples/chaincode/abstore/java/"
else
echo The chaincode language ${CC_SRC_LANGUAGE} is not supported by this script
echo Supported chaincode languages are: go, javascript, java
exit 1
fi
# set chaincode src path to use default contract, if not provided
if [-z "$CC_SRC_PATH"]; then
if [ "$CC_SRC_LANGUAGE" = "go" -o "$CC_SRC_LANGUAGE" = "golang" ]; then
CC_SRC_PATH="github.com/hyperledger/fabric-samples/chaincode/abstore/go/"
elif [ "$CC_SRC_LANGUAGE" = "javascript" ]; then
CC_SRC_PATH="/opt/gopath/src/github.com/hyperledger/fabric-samples/chaincode/abstore/javascript/"
elif [ "$CC_SRC_LANGUAGE" = "java" ]; then
CC_SRC_PATH="/opt/gopath/src/github.com/hyperledger/fabric-samples/chaincode/abstore/java/"
fi
fi
echo "Channel name : "$CHANNEL_NAME
@ -95,7 +110,7 @@ updateAnchorPeers 0 2
if [ "${NO_CHAINCODE}" != "true" ]; then
## at first we package the chaincode
packageChaincode 1 0 1
packageChaincode "${VERSION}" 0 1
## Install chaincode on peer0.org1 and peer0.org2
echo "Installing chaincode on peer0.org1..."
@ -107,7 +122,7 @@ if [ "${NO_CHAINCODE}" != "true" ]; then
queryInstalled 0 1
## approve the definition for org1
approveForMyOrg 1 0 1
approveForMyOrg "${VERSION}" 0 1
## check whether the chaincode definition is ready to be committed
## expect org1 to have approved and org2 not to
@ -115,42 +130,42 @@ if [ "${NO_CHAINCODE}" != "true" ]; then
checkCommitReadiness 1 0 2 "\"Org1MSP\": true" "\"Org2MSP\": false"
## now approve also for org2
approveForMyOrg 1 0 2
approveForMyOrg "${VERSION}" 0 2
## check whether the chaincode definition is ready to be committed
## expect them both to have approved
checkCommitReadiness 1 0 1 "\"Org1MSP\": true" "\"Org2MSP\": true"
checkCommitReadiness 1 0 2 "\"Org1MSP\": true" "\"Org2MSP\": true"
checkCommitReadiness "${VERSION}" 0 1 "\"Org1MSP\": true" "\"Org2MSP\": true"
checkCommitReadiness "${VERSION}" 0 2 "\"Org1MSP\": true" "\"Org2MSP\": true"
## now that we know for sure both orgs have approved, commit the definition
commitChaincodeDefinition 1 0 1 0 2
commitChaincodeDefinition "${VERSION}" 0 1 0 2
## query on both orgs to see that the definition committed successfully
queryCommitted 1 0 1
queryCommitted 1 0 2
queryCommitted "${VERSION}" 0 1
queryCommitted "${VERSION}" 0 2
# invoke init
chaincodeInvoke 1 0 1 0 2
#chaincodeInvoke 1 0 1 0 2
# Query chaincode on peer0.org1
echo "Querying chaincode on peer0.org1..."
chaincodeQuery 0 1 100
# echo "Querying chaincode on peer0.org1..."
# chaincodeQuery 0 1 100
# Invoke chaincode on peer0.org1 and peer0.org2
echo "Sending invoke transaction on peer0.org1 peer0.org2..."
chaincodeInvoke 0 0 1 0 2
# echo "Sending invoke transaction on peer0.org1 peer0.org2..."
# chaincodeInvoke 0 0 1 0 2
# Query chaincode on peer0.org1
echo "Querying chaincode on peer0.org1..."
chaincodeQuery 0 1 90
# echo "Querying chaincode on peer0.org1..."
# chaincodeQuery 0 1 90
## Install chaincode on peer1.org2
echo "Installing chaincode on peer1.org2..."
installChaincode 1 2
# Query on chaincode on peer1.org2, check if the result is 90
echo "Querying chaincode on peer1.org2..."
chaincodeQuery 1 2 90
# echo "Querying chaincode on peer1.org2..."
# chaincodeQuery 1 2 90
fi

View file

@ -120,7 +120,7 @@ packageChaincode() {
ORG=$3
setGlobals $PEER $ORG
set -x
peer lifecycle chaincode package mycc.tar.gz --path ${CC_SRC_PATH} --lang ${CC_RUNTIME_LANGUAGE} --label mycc_${VERSION} >&log.txt
peer lifecycle chaincode package ${CC_NAME}.tar.gz --path ${CC_SRC_PATH} --lang ${CC_RUNTIME_LANGUAGE} --label ${CC_NAME}_${VERSION} >&log.txt
res=$?
set +x
cat log.txt
@ -135,7 +135,7 @@ installChaincode() {
ORG=$2
setGlobals $PEER $ORG
set -x
peer lifecycle chaincode install mycc.tar.gz >&log.txt
peer lifecycle chaincode install ${CC_NAME}.tar.gz >&log.txt
res=$?
set +x
cat log.txt
@ -170,11 +170,11 @@ approveForMyOrg() {
if [ -z "$CORE_PEER_TLS_ENABLED" -o "$CORE_PEER_TLS_ENABLED" = "false" ]; then
set -x
peer lifecycle chaincode approveformyorg --channelID $CHANNEL_NAME --name mycc --version ${VERSION} --init-required --package-id ${PACKAGE_ID} --sequence ${VERSION} --waitForEvent >&log.txt
peer lifecycle chaincode approveformyorg --channelID $CHANNEL_NAME --name ${CC_NAME} --version ${VERSION} --init-required --package-id ${PACKAGE_ID} --sequence ${VERSION} --waitForEvent >&log.txt
set +x
else
set -x
peer lifecycle chaincode approveformyorg --tls $CORE_PEER_TLS_ENABLED --cafile $ORDERER_CA --channelID $CHANNEL_NAME --name mycc --version ${VERSION} --init-required --package-id ${PACKAGE_ID} --sequence ${VERSION} --waitForEvent >&log.txt
peer lifecycle chaincode approveformyorg --tls $CORE_PEER_TLS_ENABLED --cafile $ORDERER_CA --channelID $CHANNEL_NAME --name ${CC_NAME} --version ${VERSION} --init-required --package-id ${PACKAGE_ID} --sequence ${VERSION} --waitForEvent >&log.txt
set +x
fi
cat log.txt
@ -196,12 +196,12 @@ commitChaincodeDefinition() {
# it using the "-o" option
if [ -z "$CORE_PEER_TLS_ENABLED" -o "$CORE_PEER_TLS_ENABLED" = "false" ]; then
set -x
peer lifecycle chaincode commit -o orderer.example.com:7050 --channelID $CHANNEL_NAME --name mycc $PEER_CONN_PARMS --version ${VERSION} --sequence ${VERSION} --init-required >&log.txt
peer lifecycle chaincode commit -o orderer.example.com:7050 --channelID $CHANNEL_NAME --name ${CC_NAME} $PEER_CONN_PARMS --version ${VERSION} --sequence ${VERSION} --init-required >&log.txt
res=$?
set +x
else
set -x
peer lifecycle chaincode commit -o orderer.example.com:7050 --tls $CORE_PEER_TLS_ENABLED --cafile $ORDERER_CA --channelID $CHANNEL_NAME --name mycc $PEER_CONN_PARMS --version ${VERSION} --sequence ${VERSION} --init-required >&log.txt
peer lifecycle chaincode commit -o orderer.example.com:7050 --tls $CORE_PEER_TLS_ENABLED --cafile $ORDERER_CA --channelID $CHANNEL_NAME --name ${CC_NAME} $PEER_CONN_PARMS --version ${VERSION} --sequence ${VERSION} --init-required >&log.txt
res=$?
set +x
fi
@ -230,7 +230,7 @@ checkCommitReadiness() {
sleep $DELAY
echo "Attempting to check the commit readiness of the chaincode definition on peer${PEER}.org${ORG} ...$(($(date +%s) - starttime)) secs"
set -x
peer lifecycle chaincode checkcommitreadiness --channelID $CHANNEL_NAME --name mycc $PEER_CONN_PARMS --version ${VERSION} --sequence ${VERSION} --output json --init-required >&log.txt
peer lifecycle chaincode checkcommitreadiness --channelID $CHANNEL_NAME --name ${CC_NAME} $PEER_CONN_PARMS --version ${VERSION} --sequence ${VERSION} --output json --init-required >&log.txt
res=$?
set +x
test $res -eq 0 || continue
@ -271,7 +271,7 @@ queryCommitted() {
sleep $DELAY
echo "Attempting to Query committed status on peer${PEER}.org${ORG} ...$(($(date +%s) - starttime)) secs"
set -x
peer lifecycle chaincode querycommitted --channelID $CHANNEL_NAME --name mycc >&log.txt
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: [0-9], Sequence: [0-9], Endorsement Plugin: escc, Validation Plugin: vscc')
@ -306,7 +306,7 @@ chaincodeQuery() {
sleep $DELAY
echo "Attempting to Query peer${PEER}.org${ORG} ...$(($(date +%s) - starttime)) secs"
set -x
peer chaincode query -C $CHANNEL_NAME -n mycc -c '{"Args":["query","a"]}' >&log.txt
peer chaincode query -C $CHANNEL_NAME -n ${CC_NAME} -c '{"Args":["query","a"]}' >&log.txt
res=$?
set +x
test $res -eq 0 && VALUE=$(cat log.txt | awk '/Query Result/ {print $NF}')
@ -435,12 +435,12 @@ chaincodeInvoke() {
# it using the "-o" option
if [ -z "$CORE_PEER_TLS_ENABLED" -o "$CORE_PEER_TLS_ENABLED" = "false" ]; then
set -x
peer chaincode invoke -o orderer.example.com:7050 -C $CHANNEL_NAME -n mycc $PEER_CONN_PARMS ${INIT_ARG} -c ${CCARGS} >&log.txt
peer chaincode invoke -o orderer.example.com:7050 -C $CHANNEL_NAME -n ${CC_NAME} $PEER_CONN_PARMS ${INIT_ARG} -c ${CCARGS} >&log.txt
res=$?
set +x
else
set -x
peer chaincode invoke -o orderer.example.com:7050 --tls $CORE_PEER_TLS_ENABLED --cafile $ORDERER_CA -C $CHANNEL_NAME -n mycc $PEER_CONN_PARMS ${INIT_ARG} -c ${CCARGS} >&log.txt
peer chaincode invoke -o orderer.example.com:7050 --tls $CORE_PEER_TLS_ENABLED --cafile $ORDERER_CA -C $CHANNEL_NAME -n ${CC_NAME} $PEER_CONN_PARMS ${INIT_ARG} -c ${CCARGS} >&log.txt
res=$?
set +x
fi