https://github.com/deeptiman/offchaindata
Hyperledger Fabric OffChain Storage
https://github.com/deeptiman/offchaindata
blockchain-technology couchdb docker golang grpc-client grpc-go grpc-service hyperledger-fabric mapreduce mapreduce-demo offchain-storage
Last synced: about 2 months ago
JSON representation
Hyperledger Fabric OffChain Storage
- Host: GitHub
- URL: https://github.com/deeptiman/offchaindata
- Owner: Deeptiman
- Created: 2020-02-26T01:13:48.000Z (over 5 years ago)
- Default Branch: master
- Last Pushed: 2021-06-14T20:56:50.000Z (almost 4 years ago)
- Last Synced: 2025-04-23T00:43:25.754Z (about 2 months ago)
- Topics: blockchain-technology, couchdb, docker, golang, grpc-client, grpc-go, grpc-service, hyperledger-fabric, mapreduce, mapreduce-demo, offchain-storage
- Language: Go
- Homepage:
- Size: 28.3 KB
- Stars: 22
- Watchers: 3
- Forks: 15
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
OffChain Data
![]()
![]()
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
Configuration requirements
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"
}
`````````````````````````````````````````````````````````````````````````````````````````````````````````````````Create CouchDB local instance
The CouchDB local instance can be created using Docker.
```````````````````````````````````````````````````````````````````````````````````````````````````````````````
docker run --publish 5990:5984 --detach --name offchaindb hyperledger/fabric-couchdb
docker start offchaindb
`````````````````````````````````````````````````````````````````````````````````````````````````````````````````Mock Chaincode Model
I have followed a sample user model to create the offchaindb. You can also create your own chaincode model and the offchaindata
will listen the `KVWriteSet` to store in the couchdb.Sample Model
``````````````````````````````````````````````````````````````````````````````````````````````````````````````````
type SampleUser struct {
Email string `json:"email"`
Name string `json:"name"`
Age string `json:"age"`
Country string `json:"country"`
}
``````````````````````````````````````````````````````````````````````````````````````````````````````````````````Configure MapReduce
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.
License
This project is licensed under the MIT License