Using dev mode¶
Normally chaincodes are started and maintained by peer. However in “dev” mode, chaincode is built and started by the user. This mode is useful during chaincode development phase for rapid code/build/run/debug cycle turnaround.
To keep this a realistic “dev” environment, we are going to keep it “out of the box” - with one exception: we create two channels to show how the single running instance can be accessed from multiple channels.
- Note: Make sure peer is not using TLS when running in dev mode.
All commands are executed from the fabric
folder.
Start the orderer¶
ORDERER_GENERAL_GENESISPROFILE=SampleDevModeSolo orderer
The above starts the orderer with the SampleDevModeSolo profile.
Start the peer in dev mode¶
CORE_PEER_CHAINCODELISTENADDRESS=0.0.0.0:7052 peer node start --peer-chaincodedev=true
The above command starts the peer using the default MSP.
The --peer-chaincodedev=true
puts it in “dev” mode.
Create channels ch1 and ch2¶
Generate the transactions for creating the channels using the configtxgen
tool with the SampleSingleMSPChannel profile.
configtxgen -channelID ch1 -outputCreateChannelTx ch1.tx -profile SampleSingleMSPChannel
configtxgen -channelID ch2 -outputCreateChannelTx ch2.tx -profile SampleSingleMSPChannel
peer channel create -o 127.0.0.1:7050 -c ch1 -f ch1.tx
peer channel create -o 127.0.0.1:7050 -c ch2 -f ch2.tx
Above assumes orderer is reachable on 127.0.0.1:7050
. The orderer
now is tracking channels ch1 and ch2 for the default configuration.
peer channel join -b ch1.block
peer channel join -b ch2.block
The peer has now joined channels ch1 and ch2.
Start the chaincode¶
cd examples/chaincode/go/example02/cmd
go build -o example02
CORE_CHAINCODE_LOGLEVEL=debug CORE_PEER_ADDRESS=127.0.0.1:7052 CORE_PEER_TLS_ENABLED=false CORE_CHAINCODE_ID_NAME=mycc:0 ./example02
The chaincode is started with peer and chaincode logs indicating successful registration with the peer.
Note that at this stage the chaincode is not associated with any channel. This is done in subsequent steps
using the instantiate
command.
Use the chaincode¶
Even though you are in --peer-chaincodedev
mode, you still have to install the chaincode so the life-cycle system
chaincode can go through its checks normally. This requirement may be removed in future when in --peer-chaincodedev
mode.
peer chaincode install -n mycc -v 0 -p github.com/hyperledger/fabric/examples/chaincode/go/example02/cmd
Once installed, the chaincode is ready to be instantiated.
peer chaincode instantiate -n mycc -v 0 -c '{"Args":["init","a","100","b","200"]}' -o 127.0.0.1:7050 -C ch1
peer chaincode instantiate -n mycc -v 0 -c '{"Args":["init","a","100","b","200"]}' -o 127.0.0.1:7050 -C ch2
The above instantiates the chaincode with the two channels. With default settings it might take a few seconds for the transactions to be committed.
peer chaincode invoke -n mycc -c '{"Args":["invoke","a","b","10"]}' -o 127.0.0.1:7050 -C ch1
peer chaincode invoke -n mycc -c '{"Args":["invoke","a","b","10"]}' -o 127.0.0.1:7050 -C ch2
The above invoke the chaincode over the two channels.
Finally, query the chaincode on the two channels.
peer chaincode query -n mycc -c '{"Args":["query","a"]}' -o 127.0.0.1:7050 -C ch1
peer chaincode query -n mycc -c '{"Args":["query","a"]}' -o 127.0.0.1:7050 -C ch2