Lifecycle of Hyperledger Fabric Chaincode Development and Deployment

Varun Raj
Varun Raj, Co-founder and CTO
Lifecycle of Hyperledger Fabric Chaincode Development and Deployment

In this example, we’ll be using the Fabcar Chaincode example provided by Fabric sample. [ https://github.com/hyperledger/fabric-samples/tree/master/chaincode/fabcar/go ] which uses the basic network [ https://github.com/hyperledger/fabric-samples/tree/master/basic-network ] as the Hyperledger Fabric network.

Here I assume that you’ve a good understanding about how Fabric works and how the docker instances for the Fabric network is managed.

Clone the Fabric sample

As the first step, clone the Fabric to your local machine by cloneing it.

git clone https://github.com/hyperledger/fabric-samples cd fabric-samples

Starting the fabric network

In order to start the fabcar chaincode, go into the fabcar folder and run the startFabric.sh script.

cd fabcard ./startFabric.sh

After this if you want to modify the chaincode and re-deploy you can use the cli container that is running along with the other services.

set -e
# don't rewrite paths for Windows Git Bash users
export MSYS_NO_PATHCONV=1
starttime=$(date +%s)
LANGUAGE=${1:-"golang"}
CC_SRC_PATH=github.com/fabcar/go
if [ "$LANGUAGE": "node" -o "$LANGUAGE": "NODE" ]; then
CC_SRC_PATH=/opt/gopath/src/github.com/fabcar/node
fi
CC_VERSION=1.1
docker exec -e "CORE_PEER_LOCALMSPID=Org1MSP" -e "CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/[email protected]/msp" cli peer chaincode install -n fabcar -v $CC_VERSION -p "$CC_SRC_PATH" -l "$LANGUAGE"
docker exec -e "CORE_PEER_LOCALMSPID=Org1MSP" -e "CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/[email protected]/msp" cli peer chaincode upgrade -o orderer.example.com:7050 -C mychannel -n fabcar -l "$LANGUAGE" -v $CC_VERSION -c '{"Args":[""]}' -P "OR ('Org1MSP.member','Org2MSP.member')"

The above commands installs a new version of chaincode and upgrades the chaincode by calling the init function. Make sure you change the CC_VERSION everytime you call the script to update chaincode.

Also this will create a new image for each version, so make sure you delete the old images to avoid running out of storage.