From b5dad8cd25a778e1c9c957bcab325c7b79ca4a8d Mon Sep 17 00:00:00 2001 From: Will Lahti Date: Wed, 2 May 2018 11:30:41 -0400 Subject: [PATCH] [FAB-9317] Update first-network with multi endorse This CR updates the first-network (BYFN and EYFN) to use an 'AND (...)' endorsement policy. It also cleans up some of the output and fixes the line length of some comments. Change-Id: I741f41226955ccfcd3eb5369d8ba6eb77e49e89e Signed-off-by: Will Lahti --- first-network/docker-compose-org3.yaml | 2 + first-network/scripts/script.sh | 11 ++- first-network/scripts/step1org3.sh | 1 - first-network/scripts/step2org3.sh | 9 +-- first-network/scripts/step3org3.sh | 1 - first-network/scripts/testorg3.sh | 11 ++- first-network/scripts/upgrade_to_v11.sh | 1 - first-network/scripts/utils.sh | 93 ++++++++++++++++++------- 8 files changed, 85 insertions(+), 44 deletions(-) diff --git a/first-network/docker-compose-org3.yaml b/first-network/docker-compose-org3.yaml index c46ad4e36f..49fc939ce4 100644 --- a/first-network/docker-compose-org3.yaml +++ b/first-network/docker-compose-org3.yaml @@ -82,6 +82,8 @@ services: - /var/run/:/host/var/run/ - ./../chaincode/:/opt/gopath/src/github.com/chaincode - ./org3-artifacts/crypto-config:/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ + - ./crypto-config/peerOrganizations/org1.example.com:/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com + - ./crypto-config/peerOrganizations/org2.example.com:/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com - ./scripts:/opt/gopath/src/github.com/hyperledger/fabric/peer/scripts/ depends_on: - peer0.org3.example.com diff --git a/first-network/scripts/script.sh b/first-network/scripts/script.sh index 7823d6004d..1d43a37ec1 100755 --- a/first-network/scripts/script.sh +++ b/first-network/scripts/script.sh @@ -22,7 +22,6 @@ VERBOSE="$5" LANGUAGE=`echo "$LANGUAGE" | tr [:upper:] [:lower:]` COUNTER=1 MAX_RETRY=5 -ORDERER_CA=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem CC_SRC_PATH="github.com/chaincode/chaincode_example02/go/" if [ "$LANGUAGE" = "node" ]; then @@ -50,7 +49,7 @@ createChannel() { fi cat log.txt verifyResult $res "Channel creation failed" - echo "===================== Channel \"$CHANNEL_NAME\" is created successfully ===================== " + echo "===================== Channel '$CHANNEL_NAME' created ===================== " echo } @@ -58,7 +57,7 @@ joinChannel () { for org in 1 2; do for peer in 0 1; do joinChannelWithRetry $peer $org - echo "===================== peer${peer}.org${org} joined on the channel \"$CHANNEL_NAME\" ===================== " + echo "===================== peer${peer}.org${org} joined channel '$CHANNEL_NAME' ===================== " sleep $DELAY echo done @@ -93,9 +92,9 @@ instantiateChaincode 0 2 echo "Querying chaincode on peer0.org1..." chaincodeQuery 0 1 100 -# Invoke chaincode on peer0.org1 -echo "Sending invoke transaction on peer0.org1..." -chaincodeInvoke 0 1 +# Invoke chaincode on peer0.org1 and peer0.org2 +echo "Sending invoke transaction on peer0.org1 peer0.org2..." +chaincodeInvoke 0 1 0 2 ## Install chaincode on peer1.org2 echo "Installing chaincode on peer1.org2..." diff --git a/first-network/scripts/step1org3.sh b/first-network/scripts/step1org3.sh index 2efb64da62..bff4d6a047 100755 --- a/first-network/scripts/step1org3.sh +++ b/first-network/scripts/step1org3.sh @@ -24,7 +24,6 @@ VERBOSE="$5" LANGUAGE=`echo "$LANGUAGE" | tr [:upper:] [:lower:]` COUNTER=1 MAX_RETRY=5 -ORDERER_CA=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem CC_SRC_PATH="github.com/chaincode/chaincode_example02/go/" if [ "$LANGUAGE" = "node" ]; then diff --git a/first-network/scripts/step2org3.sh b/first-network/scripts/step2org3.sh index f4df00d4be..75745ef936 100755 --- a/first-network/scripts/step2org3.sh +++ b/first-network/scripts/step2org3.sh @@ -27,7 +27,6 @@ VERBOSE="$5" LANGUAGE=`echo "$LANGUAGE" | tr [:upper:] [:lower:]` COUNTER=1 MAX_RETRY=5 -ORDERER_CA=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem CC_SRC_PATH="github.com/chaincode/chaincode_example02/go/" if [ "$LANGUAGE" = "node" ]; then @@ -45,17 +44,15 @@ set +x cat log.txt verifyResult $res "Fetching config block from orderer has Failed" -echo "===================== Having peer0.org3 join the channel ===================== " joinChannelWithRetry 0 3 -echo "===================== peer0.org3 joined the channel \"$CHANNEL_NAME\" ===================== " -echo "===================== Having peer1.org3 join the channel ===================== " +echo "===================== peer0.org3 joined channel '$CHANNEL_NAME' ===================== " joinChannelWithRetry 1 3 -echo "===================== peer1.org3 joined the channel \"$CHANNEL_NAME\" ===================== " +echo "===================== peer1.org3 joined channel '$CHANNEL_NAME' ===================== " echo "Installing chaincode 2.0 on peer0.org3..." installChaincode 0 3 2.0 echo -echo "========= Got Org3 halfway onto your first network ========= " +echo "========= Org3 is now halfway onto your first network ========= " echo exit 0 diff --git a/first-network/scripts/step3org3.sh b/first-network/scripts/step3org3.sh index 895a451329..9588a8b8af 100755 --- a/first-network/scripts/step3org3.sh +++ b/first-network/scripts/step3org3.sh @@ -28,7 +28,6 @@ VERBOSE="$5" LANGUAGE=`echo "$LANGUAGE" | tr [:upper:] [:lower:]` COUNTER=1 MAX_RETRY=5 -ORDERER_CA=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem CC_SRC_PATH="github.com/chaincode/chaincode_example02/go/" if [ "$LANGUAGE" = "node" ]; then diff --git a/first-network/scripts/testorg3.sh b/first-network/scripts/testorg3.sh index 7c3685e8b8..7133877501 100755 --- a/first-network/scripts/testorg3.sh +++ b/first-network/scripts/testorg3.sh @@ -32,7 +32,6 @@ VERBOSE="$5" LANGUAGE=`echo "$LANGUAGE" | tr [:upper:] [:lower:]` COUNTER=1 MAX_RETRY=5 -ORDERER_CA=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem CC_SRC_PATH="github.com/chaincode/chaincode_example02/go/" if [ "$LANGUAGE" = "node" ]; then @@ -44,8 +43,16 @@ echo "Channel name : "$CHANNEL_NAME # import functions . scripts/utils.sh +# Query chaincode on peer0.org3, check if the result is 90 +echo "Querying chaincode on peer0.org3..." chaincodeQuery 0 3 90 -chaincodeInvoke 0 3 + +# Invoke chaincode on peer0.org1, peer0.org2, and peer0.org3 +echo "Sending invoke transaction on peer0.org1 peer0.org2 peer0.org3..." +chaincodeInvoke 0 1 0 2 0 3 + +# Query on chaincode on peer0.org3, check if the result is 80 +echo "Querying chaincode on peer0.org3..." chaincodeQuery 0 3 80 echo diff --git a/first-network/scripts/upgrade_to_v11.sh b/first-network/scripts/upgrade_to_v11.sh index 54ee890555..93ab6f61eb 100755 --- a/first-network/scripts/upgrade_to_v11.sh +++ b/first-network/scripts/upgrade_to_v11.sh @@ -22,7 +22,6 @@ VERBOSE="$5" LANGUAGE=`echo "$LANGUAGE" | tr [:upper:] [:lower:]` COUNTER=1 MAX_RETRY=5 -ORDERER_CA=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem CC_SRC_PATH="github.com/chaincode/chaincode_example02/go/" if [ "$LANGUAGE" = "node" ]; then diff --git a/first-network/scripts/utils.sh b/first-network/scripts/utils.sh index f53b2698cc..a82eed8ad8 100755 --- a/first-network/scripts/utils.sh +++ b/first-network/scripts/utils.sh @@ -6,6 +6,10 @@ # This is a collection of bash functions used by different scripts +ORDERER_CA=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem +PEER0_ORG1_CA=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt +PEER0_ORG2_CA=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt +PEER0_ORG3_CA=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org3.example.com/peers/peer0.org3.example.com/tls/ca.crt # verify the result of the end-to-end test verifyResult () { @@ -29,7 +33,7 @@ setGlobals () { ORG=$2 if [ $ORG -eq 1 ] ; then 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 + CORE_PEER_TLS_ROOTCERT_FILE=$PEER0_ORG1_CA CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp if [ $PEER -eq 0 ]; then CORE_PEER_ADDRESS=peer0.org1.example.com:7051 @@ -38,7 +42,7 @@ setGlobals () { fi elif [ $ORG -eq 2 ] ; then 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 + CORE_PEER_TLS_ROOTCERT_FILE=$PEER0_ORG2_CA CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp if [ $PEER -eq 0 ]; then CORE_PEER_ADDRESS=peer0.org2.example.com:7051 @@ -48,7 +52,7 @@ setGlobals () { elif [ $ORG -eq 3 ] ; then CORE_PEER_LOCALMSPID="Org3MSP" - CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org3.example.com/peers/peer0.org3.example.com/tls/ca.crt + CORE_PEER_TLS_ROOTCERT_FILE=$PEER0_ORG3_CA CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org3.example.com/users/Admin@org3.example.com/msp if [ $PEER -eq 0 ]; then CORE_PEER_ADDRESS=peer0.org3.example.com:7051 @@ -83,12 +87,12 @@ updateAnchorPeers() { fi cat log.txt verifyResult $res "Anchor peer update failed" - echo "===================== Anchor peers for org \"$CORE_PEER_LOCALMSPID\" on \"$CHANNEL_NAME\" is updated successfully ===================== " + echo "===================== Anchor peers updated for org '$CORE_PEER_LOCALMSPID' on channel '$CHANNEL_NAME' ===================== " sleep $DELAY echo } -## Sometimes Join takes time hence RETRY at least for 5 times +## Sometimes Join takes time hence RETRY at least 5 times joinChannelWithRetry () { PEER=$1 ORG=$2 @@ -107,7 +111,7 @@ joinChannelWithRetry () { else COUNTER=1 fi - verifyResult $res "After $MAX_RETRY attempts, peer${PEER}.org${ORG} has failed to Join the Channel" + verifyResult $res "After $MAX_RETRY attempts, peer${PEER}.org${ORG} has failed to join channel '$CHANNEL_NAME' " } installChaincode () { @@ -120,7 +124,7 @@ installChaincode () { res=$? set +x cat log.txt - verifyResult $res "Chaincode installation on peer${PEER}.org${ORG} has Failed" + verifyResult $res "Chaincode installation on peer${PEER}.org${ORG} has failed" echo "===================== Chaincode is installed on peer${PEER}.org${ORG} ===================== " echo } @@ -131,22 +135,23 @@ instantiateChaincode () { setGlobals $PEER $ORG VERSION=${3:-1.0} - # while 'peer chaincode' command can get the orderer endpoint from the peer (if join was successful), - # lets supply it directly as we know it using the "-o" option + # 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 if [ -z "$CORE_PEER_TLS_ENABLED" -o "$CORE_PEER_TLS_ENABLED" = "false" ]; then set -x - peer chaincode instantiate -o orderer.example.com:7050 -C $CHANNEL_NAME -n mycc -l ${LANGUAGE} -v ${VERSION} -c '{"Args":["init","a","100","b","200"]}' -P "OR ('Org1MSP.peer','Org2MSP.peer')" >&log.txt + peer chaincode instantiate -o orderer.example.com:7050 -C $CHANNEL_NAME -n mycc -l ${LANGUAGE} -v ${VERSION} -c '{"Args":["init","a","100","b","200"]}' -P "AND ('Org1MSP.peer','Org2MSP.peer')" >&log.txt res=$? set +x else set -x - peer chaincode instantiate -o orderer.example.com:7050 --tls $CORE_PEER_TLS_ENABLED --cafile $ORDERER_CA -C $CHANNEL_NAME -n mycc -l ${LANGUAGE} -v 1.0 -c '{"Args":["init","a","100","b","200"]}' -P "OR ('Org1MSP.peer','Org2MSP.peer')" >&log.txt + peer chaincode instantiate -o orderer.example.com:7050 --tls $CORE_PEER_TLS_ENABLED --cafile $ORDERER_CA -C $CHANNEL_NAME -n mycc -l ${LANGUAGE} -v 1.0 -c '{"Args":["init","a","100","b","200"]}' -P "AND ('Org1MSP.peer','Org2MSP.peer')" >&log.txt res=$? set +x fi cat log.txt verifyResult $res "Chaincode instantiation on peer${PEER}.org${ORG} on channel '$CHANNEL_NAME' failed" - echo "===================== Chaincode Instantiation on peer${PEER}.org${ORG} on channel '$CHANNEL_NAME' is successful ===================== " + echo "===================== Chaincode is instantiated on peer${PEER}.org${ORG} on channel '$CHANNEL_NAME' ===================== " echo } @@ -156,12 +161,12 @@ upgradeChaincode () { setGlobals $PEER $ORG set -x - peer chaincode upgrade -o orderer.example.com:7050 --tls $CORE_PEER_TLS_ENABLED --cafile $ORDERER_CA -C $CHANNEL_NAME -n mycc -v 2.0 -c '{"Args":["init","a","90","b","210"]}' -P "OR ('Org1MSP.peer','Org2MSP.peer','Org3MSP.peer')" + peer chaincode upgrade -o orderer.example.com:7050 --tls $CORE_PEER_TLS_ENABLED --cafile $ORDERER_CA -C $CHANNEL_NAME -n mycc -v 2.0 -c '{"Args":["init","a","90","b","210"]}' -P "AND ('Org1MSP.peer','Org2MSP.peer','Org3MSP.peer')" res=$? set +x cat log.txt - verifyResult $res "Chaincode upgrade on org${ORG} peer${PEER} has Failed" - echo "===================== Chaincode is upgraded on org${ORG} peer${PEER} ===================== " + verifyResult $res "Chaincode upgrade on peer${PEER}.org${ORG} has failed" + echo "===================== Chaincode is upgraded on peer${PEER}.org${ORG} on channel '$CHANNEL_NAME' ===================== " echo } @@ -186,14 +191,16 @@ chaincodeQuery () { set +x test $res -eq 0 && VALUE=$(cat log.txt | awk '/Query Result/ {print $NF}') test "$VALUE" = "$EXPECTED_RESULT" && let rc=0 - # removed the string "Query Result" from peer chaincode query command result, as a result, have to support both options until the change is merged. + # removed the string "Query Result" from peer chaincode query command + # result. as a result, have to support both options until the change + # is merged. test $rc -ne 0 && VALUE=$(cat log.txt | egrep '^[0-9]+$') test "$VALUE" = "$EXPECTED_RESULT" && let rc=0 done echo cat log.txt if test $rc -eq 0 ; then - echo "===================== Query on peer${PEER}.org${ORG} on channel '$CHANNEL_NAME' is successful ===================== " + echo "===================== Query successful on peer${PEER}.org${ORG} on channel '$CHANNEL_NAME' ===================== " else echo "!!!!!!!!!!!!!!! Query result on peer${PEER}.org${ORG} is INVALID !!!!!!!!!!!!!!!!" echo "================== ERROR !!! FAILED to execute End-2-End Scenario ==================" @@ -239,7 +246,8 @@ signConfigtxAsPeerOrg() { } # createConfigUpdate -# Takes an original and modified config, and produces the config update tx which transitions between the two +# Takes an original and modified config, and produces the config update tx +# which transitions between the two createConfigUpdate() { CHANNEL=$1 ORIGINAL=$2 @@ -256,25 +264,56 @@ createConfigUpdate() { set +x } +# parsePeerConnectionParameters $@ +# Helper function that takes the parameters from a chaincode operation +# (e.g. invoke, query, instantiate) and checks for an even number of +# peers and associated org, then sets $PEER_CONN_PARMS and $PEERS +parsePeerConnectionParameters() { + # check for uneven number of peer and org parameters + if [ $(( $# % 2 )) -ne 0 ]; then + exit 1 + fi + + PEER_CONN_PARMS="" + PEERS="" + while [ "$#" -gt 0 ]; do + PEER="peer$1.org$2" + PEERS="$PEERS $PEER" + PEER_CONN_PARMS="$PEER_CONN_PARMS --peerAddresses $PEER.example.com:7051" + if [ -z "$CORE_PEER_TLS_ENABLED" -o "$CORE_PEER_TLS_ENABLED" = "true" ]; then + TLSINFO=$(eval echo "--tlsRootCertFiles \$PEER$1_ORG$2_CA") + PEER_CONN_PARMS="$PEER_CONN_PARMS $TLSINFO" + fi + # shift by two to get the next pair of peer/org parameters + shift; shift + done + # remove leading space for output + PEERS="$(echo -e "$PEERS" | sed -e 's/^[[:space:]]*//')" +} + +# chaincodeInvoke ... +# Accepts as many peer/org pairs as desired and requests endorsement from each chaincodeInvoke () { - PEER=$1 - ORG=$2 - setGlobals $PEER $ORG - # while 'peer chaincode' command can get the orderer endpoint from the peer (if join was successful), - # lets supply it directly as we know it using the "-o" option + 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 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 -c '{"Args":["invoke","a","b","10"]}' >&log.txt + peer chaincode invoke -o orderer.example.com:7050 -C $CHANNEL_NAME -n mycc $PEER_CONN_PARMS -c '{"Args":["invoke","a","b","10"]}' >&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 -c '{"Args":["invoke","a","b","10"]}' >&log.txt + peer chaincode invoke -o orderer.example.com:7050 --tls $CORE_PEER_TLS_ENABLED --cafile $ORDERER_CA -C $CHANNEL_NAME -n mycc $PEER_CONN_PARMS -c '{"Args":["invoke","a","b","10"]}' >&log.txt res=$? set +x fi cat log.txt - verifyResult $res "Invoke execution on peer${PEER}.org${ORG} failed " - echo "===================== Invoke transaction on peer${PEER}.org${ORG} on channel '$CHANNEL_NAME' is successful ===================== " + verifyResult $res "Invoke execution on $PEERS failed " + echo "===================== Invoke transaction successful on $PEERS on channel '$CHANNEL_NAME' ===================== " echo }