In this recipe, we will explore how to start up a network using CouchDB and then look at transactions applied into CouchDB from a web UI. To successfully execute this recipe, you need install the Hyperledger Fabric with samples and binaries on the AWS EC2 instance.
Using CouchDB
How to do it...
To use CouchDB, follow these steps:
- Make sure network is not up. If it is up, shut down the network, as shown here:
$ cd fabric-samples/first-network
$ sudo ./byfn.sh down
- Start up the BYFN network using CouchDB:
Here we will start up the network by using the CouchDB database.
$ cd fabric-samples/first-network
$ sudo ./byfn.sh up -c mychannel -s couchdb
Following screenshot shows our network starting up:
- Install chaincode by navigating into the CLI container using the command-line interface:
$ sudo docker exec -it cli bash
$ peer chaincode install -n marbles -v 1.0
-p github.com/chaincode/marbles02/go
- Instantiate the chaincode:
$ export CHANNEL_NAME=mychannel
$ peer chaincode instantiate -o orderer.example.com:7050
--tls --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/
crypto/ordererOrganizations/example.com/orderers/
orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem
-C $CHANNEL_NAME -n marbles -v 1.0 -c '{"Args":["init"]}' -P "OR
('Org0MSP.peer','Org1MSP.peer')"
- Invoke the chaincode. The following commands invoke chaincode to create marble.
$ peer chaincode invoke -o orderer.example.com:7050 --tls
--cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/
crypto/ordererOrganizations/example.com/orderers/
orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem
-C $CHANNEL_NAME -n marbles -c
'{"Args":["initMarble","marble5","blue","35","tom"]}'
Following screenshot shows successful creation of chanincode:
- Open the CouchDB UI by navigating to http://host-ip:5984/_utils/#/_all_dbs (in my case, my AWS public IP address is 3.91.245.92, so the URL is http://3.91.245.92:5984/_utils/#/_all_dbs):
In order to allow public access to CouchDB, we need open port 5984. Navigate to the AWS security group under the instance, launch the wizard, and choose Action | Edit Inbound Rules | Add Inbound Rule. This is shown as follows. After this, click Save. You can follow the below example to allow all IP address to access CouchDB:
- From mychannel_marbles, we can query and see the transaction ID with marble5:
- Click marble5, and you will see the default marble5 files:
Here, we saw how to use CouchDB to view how transactions get created, and updated them on the Fabric network. We will write a smart contract and deploy it as an application in the next recipe.
How it works...
In this recipe, we learned how to use CouchDB as the state database with Hyperledger Fabric. We also looked at how to use CouchDB to deploy Marbles to the network.
Hyperledger Fabric supports two types of peer databases: LevelDB is the default state database embedded in the peer node and stores chaincode data as simple key-value pairs; and CouchDB is an optional alternate state database that supports rich queries when chaincode data values are modeled as JSON. This recipe describes the steps required to use CouchDB as the state database with Fabric. CouchDB is a JSON document datastore rather than a pure key-value store, therefore enabling indexing of the contents of the documents in the database.
In the last recipe, we will show you how to write your first smart contract application and deploy it into the blockchain.