#!/bin/bash # # Copyright IBM Corp All Rights Reserved # # SPDX-License-Identifier: Apache-2.0 # # Exit on first error set -e pipefail # don't rewrite paths for Windows Git Bash users export MSYS_NO_PATHCONV=1 starttime=$(date +%s) CC_SRC_LANGUAGE=${1:-"golang"} CC_SRC_LANGUAGE=`echo "$CC_SRC_LANGUAGE" | tr [:upper:] [:lower:]` CC_RUNTIME_LANGUAGE=golang CC_SRC_PATH=github.com/hyperledger/fabric-samples/chaincode/marbles02/go # clean the keystore rm -rf ./hfc-key-store # launch network; create channel and join peer to channel pushd ../first-network echo y | ./byfn.sh down echo y | ./byfn.sh up -a -n -s couchdb popd 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 echo "Packaging the marbles smart contract" docker exec \ cli \ peer lifecycle chaincode package marbles.tar.gz \ --path $CC_SRC_PATH \ --lang $CC_RUNTIME_LANGUAGE \ --label marblesv1 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 lifecycle chaincode install marbles.tar.gz echo "Installing smart contract on peer1.org1.example.com" 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 lifecycle chaincode install marbles.tar.gz 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 lifecycle chaincode install marbles.tar.gz echo "Installing smart contract on peer1.org2.example.com" 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 lifecycle chaincode install marbles.tar.gz echo "Query the chaincode package id" 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 \ /bin/bash -c "peer lifecycle chaincode queryinstalled > log" PACKAGE_ID=`docker exec cli sed -nr '/Label: marblesv1/s/Package ID: (.*), Label: marblesv1/\1/p;' log` echo "Approving the chaincode definition for 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 lifecycle chaincode approveformyorg \ -o orderer.example.com:7050 \ --channelID mychannel \ --name marbles \ --version 1.0 \ --init-required \ --signature-policy AND"('Org1MSP.member','Org2MSP.member')" \ --sequence 1 \ --package-id $PACKAGE_ID \ --tls \ --cafile ${ORDERER_TLS_ROOTCERT_FILE} echo "Approving the chaincode definition for 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 lifecycle chaincode approveformyorg \ -o orderer.example.com:7050 \ --channelID mychannel \ --name marbles \ --version 1.0 \ --init-required \ --signature-policy AND"('Org1MSP.member','Org2MSP.member')" \ --sequence 1 \ --package-id $PACKAGE_ID \ --tls \ --cafile ${ORDERER_TLS_ROOTCERT_FILE} echo "Waiting for the approvals to be committed ..." sleep 10 echo "Commit the chaincode definition to the channel" docker exec \ -e CORE_PEER_LOCALMSPID=Org1MSP \ -e CORE_PEER_MSPCONFIGPATH=${ORG1_MSPCONFIGPATH} \ cli \ peer lifecycle chaincode commit \ -o orderer.example.com:7050 \ --channelID mychannel \ --name marbles \ --version 1.0 \ --init-required \ --signature-policy AND"('Org1MSP.member','Org2MSP.member')" \ --sequence 1 \ --tls \ --cafile ${ORDERER_TLS_ROOTCERT_FILE} \ --peerAddresses peer0.org1.example.com:7051 \ --tlsRootCertFiles ${ORG1_TLS_ROOTCERT_FILE} \ --peerAddresses peer0.org2.example.com:9051 \ --tlsRootCertFiles ${ORG2_TLS_ROOTCERT_FILE} echo "Waiting for the chaincode to be committed ..." sleep 10 echo "invoke the marbles chaincode init function ... " docker exec \ -e CORE_PEER_LOCALMSPID=Org1MSP \ -e CORE_PEER_ADDRESS=peer0.org1.example.com:7051 \ cli \ peer chaincode invoke \ -o orderer.example.com:7050 \ -C mychannel \ -n marbles \ --isInit \ -c '{"Args":["Init"]}' \ --tls \ --cafile ${ORDERER_TLS_ROOTCERT_FILE} \ --peerAddresses peer0.org1.example.com:7051 \ --tlsRootCertFiles ${ORG1_TLS_ROOTCERT_FILE} \ --peerAddresses peer0.org2.example.com:9051 \ --tlsRootCertFiles ${ORG2_TLS_ROOTCERT_FILE} sleep 10 cat <