Tushar Goswami
Tushar Goswami

Reputation: 783

Unlimited organizations on Hyperledger Fabric

Overview

My blockchain architecture requires each individual user to keep their data private. There can be unlimited number of users (say in millions). As per Hyperledger Fabric's documentation

An organization can be as large as a multi-national corporation or as small as an individual

Here is an architecture that comes to my mind:

  1. My company will have Organization A on business network
  2. Everytime a user signs up I will create a new Organization N, and new Channel C on business network.
  3. Each new channel will have two members: Organization A and user's newly added organization N

I purposely did not choose Private Data because Add an Org to Channel tutorial suggests that if N organizations exist in a particular channel then N-1 organizations must sign the transaction to allow new organization to come in. Because there is zero sharing of data between each user organization so I am creating unlimited channels (one channel for each user org).

Questions :

  1. I am trying to dodge the linear complexity that will kick in when I try to add new Org to existing channel. Is my architecture solving the linear increase of complexity effectively?
  2. Am I running into some other problem with this design?
  3. Something counterintuitive about my design?

Upvotes: 3

Views: 1026

Answers (2)

Andrei Dragotoniu
Andrei Dragotoniu

Reputation: 6335

I would think it's pretty obvious that creating one org per user, when you have millions of users is not a good idea. In Hyperledger, an organisation would have its own peers and that's not something that makes sense at user level. In addition to this, managing a virtually unlimited network with an unlimited number of orgs and channels is simply not practical even from a maintenance point of view, let alone a build point of view.

I suggest you explore other ways of keeping users data secure. One way would be to encrypt it, hash it, whatever makes sense for your own scenario and only then store it on the ledger. But then, the users would still be part of one or more orgs, where the total number of orgs is something manageable.

From what you said so far, I am not convinced that Hyperledger is the way to go for you. Maybe your own Ethereum network would work better for this, as there you have user level accounts. If you don't need a blockchain solution, you might to want stick to a standard way of building something like this.

Upvotes: 3

Gari Singh
Gari Singh

Reputation: 12033

There's no real issue from a technical perspective with having a huge number of bi-lateral channels. The process for adding a new org would mean you need to create the new channel, join the user peer to the channel, join Org A to the channel and then instantiate any chaincode on that channel. Pretty easy to automate. At some point, you may need to create multiple peers for Org A and distribute the channels across those peers.

On the other hand, you could take a look at using private data combined with state-based endorsement. Rather than create a channel between Org A and each user, you could create a collection Org A / Org N instead and then use state-based endorsement to only require endorsement from Org A and Org N. The disadvantage here is that Org N+1 ... Org N + X would end up with hashes of all the keys/values for all users ... which you might not want (especially since it requires users to store data which is not relevant to them).

Upvotes: 3

Related Questions