The purpose of the project to install and run the Hyperledger fabric v1.4 on Native OS ( Ubuntu 16.04). The Smart contracts written in GO lang and used as GO Plugins. Docker and docker-compose are not used in this project either for fabric peers or chaincode.
First you need to prepare your Native OS – Ubuntu 16.04 Setting up the environment:
Installing the Go language, Hyperledger Fabric depends upon the Go language.
- Go - version 1.11.9
- Change into your home directory with the command cd ~/
- Download the tar file with the command wget gotarfile
- Unpack the file with the command tar xvzf go1*.tar.gz
######## Now we need to set GOPATH and GOROOT with the following commands:
- $ mkdir $HOME/gopath
- $ export GOPATH=$HOME/gopath
- $ export GOROOT=$HOME/go
- $ export PATH=$PATH:$GOROOT/bin
- $ export PATH=${PWD}/bin:${PWD}:$PATH
Next, few dependencies to install.
- $sudo apt install libltdl-dev python build-essential checkinstall libssl-dev
- $ mkdir -p $GOPATH/src/github.com/hyperledger/
- $ cd $GOPATH/src/github.com/hyperledger/
Now Download the source code from GitHub
- wget sourcecodefile
- tar zxf hyperledger-fabric-linux-amd64-1.4.0.tar.gz
- mv $DIR fabric
- cd $GOPATH/src/github.com/hyperledger/fabric
- make native
It will time to build the binaries and config files and back to prompt.
At this point your fabric components are compiled and binaries are ready to run on Native OS (Ubuntu 16)
- Im creating one more path to cutdown the length of the directories and files.
- export FAB_BIN=$HOME/gopath/src/github.com/hyperledger/fabric/.build/bin
- export FAB_CONF=$HOME/gopath/src/github.com/hyperledger/fabric/sampleconfig
Since I'm going to use the sample system chaincode for the smart contract from examples and little modification for native os. If you try with default chaincode (example02) you end with this errors as given here
Hence i recommend and used the this chaincode.go file for learning purpose.
Download the chaincode.go file to the below location and build
$ cd ~/gopath/src/github.com/hyperledger/fabric/examples/chaincode/go/example02
$ go build -buildmode=plugin -o example02.so chaincode.go
That will produce example02.so file and will use this to our smart contract plugin binaries.
1, edit the $FAB_CONF\core.yaml and find this line "chaincode:" and then "system:" , now add “example02: enable” under the system.chaincode
chaincode:
system:
...
example02: enable
Finally it should be like this :
2, Now Add the plugins configuration for the same to "systemPlugins:"
chaincode:
systemPlugins:
- enabled: true
name: example02
path: $FAB-CONF/src/github.com/hyperledger/fabric/examples/chaincode/go/example02/example02.so
invokableExternal: true
invokableCC2CC: true
Finally it should be like this :
Our fabric consists for 1 orderer and 1 peer using profile sampleconfig given in the configtx.yaml. Lets open two additional terminals and export your paths given above.
$ sudo mkdir -p /var/hyperledger && sudo chown $(whoami):$(whoami) /var/hyperledger
$ FABRIC_CFG_PATH=$FAB_CONF ORDERER_GENERAL_GENESISPROFILE=SampleSingleMSPSolo $FAB_BIN/orderer
$ FABRIC_CFG_PATH=$FAB_CONF FABRIC_LOGGING_SPEC=gossip=warn:msp=warn:debug $FAB_BIN/peer node start
Let the orderer and peer run on the two terminals, now you back to old terminal and ensure, don’t have any errors and running.
Now lets create the channel for our smart contract communication. We use configtxgen tool to generate a channel based on $FAB_CONF\configtx.yaml, Open a new terminal,
$ FABRIC_CFG_PATH=$FAB_CONF $FAB_BIN/configtxgen -profile SampleSingleMSPChannel -outputCreateChannelTx mychannel.tx -channelID mychannel
A file will be created as mychannel.tx and we will use this file to create channel in the network with orderer.
$ FABRIC_CFG_PATH=$FAB_CONF $FAB_BIN/peer channel create -f ./mychannel.tx -c mychannel -o 127.0.0.1:7050
mychannel.block containing the artifacts about the channel and we ask peers to join the channel.
$ FABRIC_CFG_PATH=$FAB_CONF $FAB_BIN/peer channel join -b mychannel.block
If everything perfect, then did a wonderfull job. Kudos !!!
we have to explicitly initialize our smart contract assets first.
$ FABRIC_CFG_PATH=$FAB_CONF $FAB_BIN/peer chaincode invoke -C mychannel -n example02 -c '{"Args":["invoke", "a", "500", "b","200"]}'
After successfully initialized, we can send/query other transactions. For example:
$ FABRIC_CFG_PATH=$FAB_CONF $FAB_BIN/peer chaincode invoke -C mychannel -n example02 -c '{"Args":["transfer","a","b","100"]}'
$ FABRIC_CFG_PATH=$FAB_CONF $FAB_BIN/peer chaincode query -C mychannel -n example02 -c '{"Args":["query","a"]}'
Now you able to do chaincode transactions and query.
Kindly drop me msg for comments.