OffChain Data is a sample demonstration to understand the concept of implementing offchain storage and it's capability in Hyperledger fabric Blockchain network. So, this project will work as a peer block event listener and will store the block details in the CouchDB that can be query through MapReduce.
Medium writeup : https://medium.com/@deeptiman/offchain-storage-in-hyperledger-fabric-77e28bd99e0c
You need to add the certain project details in `config.json`, so that it will be used to create an event listener and the Blocks will be received through GRPC delivery client.
export FABRIC_CFG_PATH= /home/user/go/src/github.com/exampleledger/fixtures
{
"peer_config_path": "exampleledger/fixtures/crypto-config/peerOrganizations/",
"msp_id": "Org1MSP",
"msp_type": "bccsp",
"msp_config_dir": "org1.example.ledger.com/users/[email protected]/msp",
"client_key": "org1.example.ledger.com/peers/peer0.org1.example.ledger.com/tls/server.key",
"client_cert": "org1.example.ledger.com/peers/peer0.org1.example.ledger.com/tls/server.crt",
"root_cert": "org1.example.ledger.com/peers/peer0.org1.example.ledger.com/tls/ca.crt",
"server": "peer0.org1.example.ledger.com:7051",
"channel_id": "exampleledger",
"config_file": "configtx"
}
The CouchDB local instance can be created using Docker.
docker run --publish 5990:5984 --detach --name offchaindb hyperledger/fabric-couchdb
docker start offchaindb
Sample Model
type SampleUser struct {
Email string `json:"email"`
Name string `json:"name"`
Age string `json:"age"`
Country string `json:"country"`
}
MapReduce will query the offchain data from CouchDB. So, you need to configure MapReduce for certain design element from CouchDB collection.
Configure MapReduce for Email
curl -X PUT http://127.0.0.1:5990/offchaindb/_design/emailviewdesign/ -d '{"views":{"emailview":{"map":"function(doc) { emit(doc.email,1);}", "reduce":"function (keys, values, combine) {return sum(values)}"}}}' -H 'Content-Type:application/json'
Output
{"ok": true, "id":"_design/emailviewdesign", "rev": "1-f34147f686003ff5c7da5a5e7e2759b8"}
Query Reduce
function to count total email
curl -X GET http://127.0.0.1:5990/offchaindb/_design/emailviewdesign/_view/emailview?reduce=true
Output
{"rows":[
{"key":null,"value":7}
]}
Query Map
function to list all emails
curl -X GET http://127.0.0.1:5990/offchaindb/_design/emailviewdesign/_view/emailview?group=true
Output
{"rows":[
{"key":"[email protected]","value":1},
{"key":"[email protected]","value":1},
{"key":"[email protected]","value":1},
{"key":"[email protected]","value":1},
{"key":"[email protected]","value":1},
{"key":"[email protected]","value":1},
{"key":"[email protected]","value":1}
]}
So, all the query peformed in offchain without querying from blockchain ledger.
This project is licensed under the MIT License