Reputation: 783
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:
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).
Upvotes: 3
Views: 1026
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
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