#!/bin/bash CHANNEL_NAME="$1" : ${CHANNEL_NAME:="mychannel"} : ${TIMEOUT:="60"} COUNTER=0 MAX_RETRY=5 ORDERER_CA=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto-config/ordererOrganizations/ordererOrg1/orderers/orderer.ordererOrg1/cacerts/ordererOrg1-cert.pem echo "Channel name : "$CHANNEL_NAME verifyResult () { if [ $1 -ne 0 ] ; then echo "!!!!!!!!!!!!!!! "$2" !!!!!!!!!!!!!!!!" echo "================== ERROR !!! FAILED to execute End-2-End Scenario ==================" echo exit 1 fi } setGlobals () { CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto-config/peerOrganizations/peerOrg1/peers/peer"$1".peerOrg1 #CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peer/peer$1/localMspConfig CORE_PEER_ADDRESS=peer$1:7051 CORE_PEER_LOCALMSPID="Org1MSP" CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto-config/peerOrganizations/peerOrg1/peers/peer"$1".peerOrg1/cacerts/peerOrg1-cert.pem env |grep CORE } createChannel() { CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto-config/ordererOrganizations/ordererOrg1/orderers/orderer.ordererOrg1 #CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/orderer/localMspConfig CORE_PEER_LOCALMSPID="OrdererMSP" peer channel create -o orderer0:7050 -c $CHANNEL_NAME -f crypto-config/ordererOrganizations/ordererOrg1/orderers/channel.tx --tls $CORE_PEER_TLS_ENABLED --cafile $ORDERER_CA >&log.txt res=$? cat log.txt verifyResult $res "Channel creation failed" echo "===================== Channel \"$CHANNEL_NAME\" is created successfully ===================== " echo } ## Sometimes Join takes time hence RETRY atleast for 5 times joinWithRetry () { peer channel join -b $CHANNEL_NAME.block >&log.txt res=$? cat log.txt if [ $res -ne 0 -a $COUNTER -lt $MAX_RETRY ]; then COUNTER=` expr $COUNTER + 1` echo "PEER$1 failed to join the channel, Retry after 2 seconds" sleep 2 joinWithRetry $1 else COUNTER=0 fi verifyResult $res "After $MAX_RETRY attempts, PEER$ch has failed to Join the Channel" } joinChannel () { for ch in 0 1 2 3; do setGlobals $ch joinWithRetry $ch echo "===================== PEER$ch joined on the channel \"$CHANNEL_NAME\" ===================== " sleep 2 echo done } installChaincode () { PEER=$1 setGlobals $PEER peer chaincode install -n mycc -v 1.0 -p github.com/hyperledger/fabric/examples/chaincode/go/chaincode_example02 >&log.txt res=$? cat log.txt verifyResult $res "Chaincode installation on remote peer PEER$PEER has Failed" echo "===================== Chaincode is installed on remote peer PEER$PEER ===================== " echo } instantiateChaincode () { PEER=$1 setGlobals $PEER peer chaincode instantiate -o orderer0:7050 --tls $CORE_PEER_TLS_ENABLED --cafile $ORDERER_CA -C $CHANNEL_NAME -n mycc -v 1.0 -c '{"Args":["init","a","100","b","200"]}' -P "OR ('Org1MSP.member')" >&log.txt res=$? cat log.txt verifyResult $res "Chaincode instantiation on PEER$PEER on channel '$CHANNEL_NAME' failed" echo "===================== Chaincode Instantiation on PEER$PEER on channel '$CHANNEL_NAME' is successful ===================== " echo } chaincodeQuery () { PEER=$1 echo "===================== Querying on PEER$PEER on channel '$CHANNEL_NAME'... ===================== " setGlobals $PEER local rc=1 local starttime=$(date +%s) # continue to poll # we either get a successful response, or reach TIMEOUT while test "$(($(date +%s)-starttime))" -lt "$TIMEOUT" -a $rc -ne 0 do sleep 3 echo "Attempting to Query PEER$PEER ...$(($(date +%s)-starttime)) secs" peer chaincode query -C $CHANNEL_NAME -n mycc -c '{"Args":["query","a"]}' >&log.txt test $? -eq 0 && VALUE=$(cat log.txt | awk '/Query Result/ {print $NF}') test "$VALUE" = "$2" && let rc=0 done echo cat log.txt if test $rc -eq 0 ; then echo "===================== Query on PEER$PEER on channel '$CHANNEL_NAME' is successful ===================== " else echo "!!!!!!!!!!!!!!! Query result on PEER$PEER is INVALID !!!!!!!!!!!!!!!!" echo "================== ERROR !!! FAILED to execute End-2-End Scenario ==================" echo fi } chaincodeInvoke () { PEER=$1 peer chaincode invoke -o orderer0:7050 --tls $CORE_PEER_TLS_ENABLED --cafile $ORDERER_CA -C $CHANNEL_NAME -n mycc -c '{"Args":["invoke","a","b","10"]}' >&log.txt res=$? cat log.txt verifyResult $res "Invoke execution on PEER$PEER failed " echo "===================== Invoke transaction on PEER$PEER on channel '$CHANNEL_NAME' is successful ===================== " echo } ## Create channel createChannel ## Join all the peers to the channel joinChannel ## Install chaincode on Peer0/Org0 and Peer2/Org1 installChaincode 0 installChaincode 2 #Instantiate chaincode on Peer2/Org1 echo "Instantiating chaincode on Peer2/Org1 ..." instantiateChaincode 2 #Query on chaincode on Peer0/Org0 chaincodeQuery 0 100 #Invoke on chaincode on Peer0/Org0 echo "send Invoke transaction on Peer0/Org0 ..." chaincodeInvoke 0 ## Install chaincode on Peer3/Org1 installChaincode 3 #Query on chaincode on Peer3/Org1, check if the result is 90 chaincodeQuery 3 90 installChaincode 1 chaincodeQuery 1 90 echo echo "===================== All GOOD, End-2-End execution completed ===================== " echo exit 0