#!/bin/bash # # Copyright IBM Corp All Rights Reserved # # SPDX-License-Identifier: Apache-2.0 # # Exit on first error set -ex # don't rewrite paths for Windows Git Bash users 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" -o "$CC_SRC_LANGUAGE" = "golang" ]; then CC_RUNTIME_LANGUAGE=golang <<<<<<< HEAD CC_SRC_PATH=github.com/chaincode/fabcar/go elif [ "$CC_SRC_LANGUAGE" = "java" ]; then CC_RUNTIME_LANGUAGE=java CC_SRC_PATH=/opt/gopath/src/github.com/chaincode/fabcar/java elif [ "$CC_SRC_LANGUAGE" = "javascript" ]; then CC_RUNTIME_LANGUAGE=node # chaincode runtime language is node.js CC_SRC_PATH=/opt/gopath/src/github.com/chaincode/fabcar/javascript elif [ "$CC_SRC_LANGUAGE" = "typescript" ]; then CC_RUNTIME_LANGUAGE=node # chaincode runtime language is node.js CC_SRC_PATH=/opt/gopath/src/github.com/chaincode/fabcar/typescript ======= CC_SRC_PATH=github.com/hyperledger/fabric-samples/chaincode/fabcar/go echo Vendoring Go dependencies ... pushd ../chaincode/fabcar/go GO111MODULE=on go mod vendor popd echo Finished vendoring Go dependencies elif [ "$CC_SRC_LANGUAGE" = "java" ]; then CC_RUNTIME_LANGUAGE=java CC_SRC_PATH=/opt/gopath/src/github.com/hyperledger/fabric-samples/chaincode/fabcar/java/build/install/fabcar echo Compiling Java code ... pushd ../chaincode/fabcar/java ./gradlew installDist popd echo Finished compiling Java code 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/fabcar/javascript elif [ "$CC_SRC_LANGUAGE" = "typescript" ]; then CC_RUNTIME_LANGUAGE=node # chaincode runtime language is node.js CC_SRC_PATH=/opt/gopath/src/github.com/hyperledger/fabric-samples/chaincode/fabcar/typescript >>>>>>> 3dbe116a30d517e1e828afb61b2198763141f2e6 echo Compiling TypeScript code into JavaScript ... pushd ../chaincode/fabcar/typescript npm install npm run build popd echo Finished compiling TypeScript code into JavaScript 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 fi # clean the keystore rm -rf ./hfc-key-store # launch network; create channel and join peer to channel <<<<<<< HEAD cd ../first-network echo y | ./byfn.sh down echo y | ./byfn.sh up -a -n -s couchdb ======= pushd ../first-network echo y | ./byfn.sh down echo y | ./byfn.sh up -a -n -s couchdb popd >>>>>>> 3dbe116a30d517e1e828afb61b2198763141f2e6 CONFIG_ROOT=/opt/gopath/src/github.com/hyperledger/fabric/peer ORG1_MSPCONFIGPATH=${CONFIG_ROOT}/crypto/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp ORG1_TLS_ROOTCERT_FILE=${CONFIG_ROOT}/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt ORG2_MSPCONFIGPATH=${CONFIG_ROOT}/crypto/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp ORG2_TLS_ROOTCERT_FILE=${CONFIG_ROOT}/crypto/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt ORDERER_TLS_ROOTCERT_FILE=${CONFIG_ROOT}/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem <<<<<<< HEAD set -x echo "Installing smart contract on peer0.org1.example.com" docker exec \ -e CORE_PEER_LOCALMSPID=Org1MSP \ -e CORE_PEER_ADDRESS=peer0.org1.example.com:7051 \ -e CORE_PEER_MSPCONFIGPATH=${ORG1_MSPCONFIGPATH} \ -e CORE_PEER_TLS_ROOTCERT_FILE=${ORG1_TLS_ROOTCERT_FILE} \ cli \ peer chaincode install \ -n fabcar \ -v 1.0 \ -p "$CC_SRC_PATH" \ -l "$CC_RUNTIME_LANGUAGE" echo "Installing smart contract on peer0.org2.example.com" docker exec \ -e CORE_PEER_LOCALMSPID=Org2MSP \ -e CORE_PEER_ADDRESS=peer0.org2.example.com:9051 \ -e CORE_PEER_MSPCONFIGPATH=${ORG2_MSPCONFIGPATH} \ -e CORE_PEER_TLS_ROOTCERT_FILE=${ORG2_TLS_ROOTCERT_FILE} \ cli \ peer chaincode install \ -n fabcar \ -v 1.0 \ -p "$CC_SRC_PATH" \ -l "$CC_RUNTIME_LANGUAGE" echo "Instantiating smart contract on mychannel" docker exec \ -e CORE_PEER_LOCALMSPID=Org1MSP \ -e CORE_PEER_MSPCONFIGPATH=${ORG1_MSPCONFIGPATH} \ cli \ peer chaincode instantiate \ -o orderer.example.com:7050 \ -C mychannel \ -n fabcar \ -l "$CC_RUNTIME_LANGUAGE" \ -v 1.0 \ -c '{"Args":[]}' \ -P "AND('Org1MSP.member','Org2MSP.member')" \ --tls \ --cafile ${ORDERER_TLS_ROOTCERT_FILE} \ --peerAddresses peer0.org1.example.com:7051 \ --tlsRootCertFiles ${ORG1_TLS_ROOTCERT_FILE} echo "Waiting for instantiation request to be committed ..." sleep 10 echo "Submitting initLedger transaction to smart contract on mychannel" echo "The transaction is sent to the two peers with the chaincode installed (peer0.org1.example.com and peer0.org2.example.com) so that chaincode is built before receiving the following requests" docker exec \ -e CORE_PEER_LOCALMSPID=Org1MSP \ -e CORE_PEER_MSPCONFIGPATH=${ORG1_MSPCONFIGPATH} \ cli \ peer chaincode invoke \ -o orderer.example.com:7050 \ -C mychannel \ -n fabcar \ -c '{"function":"initLedger","Args":[]}' \ --waitForEvent \ --tls \ --cafile ${ORDERER_TLS_ROOTCERT_FILE} \ --peerAddresses peer0.org1.example.com:7051 \ --peerAddresses peer0.org2.example.com:9051 \ --tlsRootCertFiles ${ORG1_TLS_ROOTCERT_FILE} \ --tlsRootCertFiles ${ORG2_TLS_ROOTCERT_FILE} set +x ======= PEER0_ORG1="docker exec -e CORE_PEER_LOCALMSPID=Org1MSP -e CORE_PEER_ADDRESS=peer0.org1.example.com:7051 -e CORE_PEER_MSPCONFIGPATH=${ORG1_MSPCONFIGPATH} -e CORE_PEER_TLS_ROOTCERT_FILE=${ORG1_TLS_ROOTCERT_FILE} cli peer --tls=true --cafile=${ORDERER_TLS_ROOTCERT_FILE} --orderer=orderer.example.com:7050" PEER1_ORG1="docker exec -e CORE_PEER_LOCALMSPID=Org1MSP -e CORE_PEER_ADDRESS=peer1.org1.example.com:8051 -e CORE_PEER_MSPCONFIGPATH=${ORG1_MSPCONFIGPATH} -e CORE_PEER_TLS_ROOTCERT_FILE=${ORG1_TLS_ROOTCERT_FILE} cli peer --tls=true --cafile=${ORDERER_TLS_ROOTCERT_FILE} --orderer=orderer.example.com:7050" PEER0_ORG2="docker exec -e CORE_PEER_LOCALMSPID=Org2MSP -e CORE_PEER_ADDRESS=peer0.org2.example.com:9051 -e CORE_PEER_MSPCONFIGPATH=${ORG2_MSPCONFIGPATH} -e CORE_PEER_TLS_ROOTCERT_FILE=${ORG2_TLS_ROOTCERT_FILE} cli peer --tls=true --cafile=${ORDERER_TLS_ROOTCERT_FILE} --orderer=orderer.example.com:7050" PEER1_ORG2="docker exec -e CORE_PEER_LOCALMSPID=Org2MSP -e CORE_PEER_ADDRESS=peer1.org2.example.com:10051 -e CORE_PEER_MSPCONFIGPATH=${ORG2_MSPCONFIGPATH} -e CORE_PEER_TLS_ROOTCERT_FILE=${ORG2_TLS_ROOTCERT_FILE} cli peer --tls=true --cafile=${ORDERER_TLS_ROOTCERT_FILE} --orderer=orderer.example.com:7050" echo "Packaging smart contract on peer0.org1.example.com" ${PEER0_ORG1} lifecycle chaincode package \ fabcar.tar.gz \ --path "$CC_SRC_PATH" \ --lang "$CC_RUNTIME_LANGUAGE" \ --label fabcarv1 echo "Installing smart contract on peer0.org1.example.com" ${PEER0_ORG1} lifecycle chaincode install \ fabcar.tar.gz echo "Installing smart contract on peer1.org1.example.com" ${PEER1_ORG1} lifecycle chaincode install \ fabcar.tar.gz echo "Determining package ID for smart contract on peer0.org1.example.com" REGEX='Package ID: (.*), Label: fabcarv1' if [[ `${PEER0_ORG1} lifecycle chaincode queryinstalled` =~ $REGEX ]]; then PACKAGE_ID_ORG1=${BASH_REMATCH[1]} else echo Could not find package ID for fabcarv1 chaincode on peer0.org1.example.com exit 1 fi echo "Approving smart contract for org1" ${PEER0_ORG1} lifecycle chaincode approveformyorg \ --package-id ${PACKAGE_ID_ORG1} \ --channelID mychannel \ --name fabcar \ --version 1.0 \ --signature-policy "AND('Org1MSP.member','Org2MSP.member')" \ --sequence 1 \ --waitForEvent echo "Packaging smart contract on peer0.org2.example.com" ${PEER0_ORG2} lifecycle chaincode package \ fabcar.tar.gz \ --path "$CC_SRC_PATH" \ --lang "$CC_RUNTIME_LANGUAGE" \ --label fabcarv1 echo "Installing smart contract on peer0.org2.example.com" ${PEER0_ORG2} lifecycle chaincode install fabcar.tar.gz echo "Installing smart contract on peer1.org2.example.com" ${PEER1_ORG2} lifecycle chaincode install fabcar.tar.gz echo "Determining package ID for smart contract on peer0.org2.example.com" REGEX='Package ID: (.*), Label: fabcarv1' if [[ `${PEER0_ORG2} lifecycle chaincode queryinstalled` =~ $REGEX ]]; then PACKAGE_ID_ORG2=${BASH_REMATCH[1]} else echo Could not find package ID for fabcarv1 chaincode on peer0.org2.example.com exit 1 fi echo "Approving smart contract for org2" ${PEER0_ORG2} lifecycle chaincode approveformyorg \ --package-id ${PACKAGE_ID_ORG2} \ --channelID mychannel \ --name fabcar \ --version 1.0 \ --signature-policy "AND('Org1MSP.member','Org2MSP.member')" \ --sequence 1 \ --waitForEvent echo "Committing smart contract" ${PEER0_ORG1} lifecycle chaincode commit \ --channelID mychannel \ --name fabcar \ --version 1.0 \ --signature-policy "AND('Org1MSP.member','Org2MSP.member')" \ --sequence 1 \ --waitForEvent \ --peerAddresses peer0.org1.example.com:7051 \ --peerAddresses peer0.org2.example.com:9051 \ --tlsRootCertFiles ${ORG1_TLS_ROOTCERT_FILE} \ --tlsRootCertFiles ${ORG2_TLS_ROOTCERT_FILE} echo "Submitting initLedger transaction to smart contract on mychannel" # echo "The transaction is sent to all of the peers so that chaincode is built before receiving the following requests" ${PEER0_ORG1} chaincode invoke \ -C mychannel \ -n fabcar \ -c '{"function":"initLedger","Args":[]}' \ --waitForEvent \ --waitForEventTimeout 300s \ --peerAddresses peer0.org1.example.com:7051 \ --peerAddresses peer0.org2.example.com:9051 \ --tlsRootCertFiles ${ORG1_TLS_ROOTCERT_FILE} \ --tlsRootCertFiles ${ORG2_TLS_ROOTCERT_FILE} # Temporary workaround (see FAB-15897) - cannot invoke across all four peers at the same time, so use a query to build # the chaincode across the remaining peers. ${PEER1_ORG1} chaincode query \ -C mychannel \ -n fabcar \ -c '{"function":"queryAllCars","Args":[]}' \ --peerAddresses peer1.org1.example.com:8051 \ --tlsRootCertFiles ${ORG1_TLS_ROOTCERT_FILE} ${PEER1_ORG2} chaincode query \ -C mychannel \ -n fabcar \ -c '{"function":"queryAllCars","Args":[]}' \ --peerAddresses peer1.org2.example.com:10051 \ --tlsRootCertFiles ${ORG2_TLS_ROOTCERT_FILE} >>>>>>> 3dbe116a30d517e1e828afb61b2198763141f2e6 cat <