Send message between two blockchain nodes - hyperledger-fabric

I am confused about this issue.
How can I send message from user A to user B on blockchain network?
I have an illustration like this:
Assume, I have blockchain network with 5 nodes. Each node represents one "Organization".
How can User A in Organization 1 send message to exact User B in organization B?
I guess, we can send message between two blockchain nodes, for example node 1 and node 3 or other node in blockchain network. But, at User A, how he can determine "where is User B"?
Thanks

In essence, the answer itself is Blockchain. At the end, a Blockchain network what provides you is the following one: the validated and verified information that is registered in the network is sent to all the participants of the network.
In the case of Hyperledger-Fabric, you would have to generate a channel for organizations 1 and 3 of your ilustration. In this way, only those two organizations will see the data registered by User A.

Related

Hyperledger Fabric - Identities for Organisations that don't Running Nodes

We have a use case where only a subset of consortium participants willing to run nodes. Other participants still want to submit transactions through a party that runs a node. How can we give identities for those parties and ensure their transactions will be included in the ledger through the existing nodes?
For example, say we have 4 parties a.org, b.org, c.org, and d.org. Parties a.org and b.org run nodes. Whereas party c.org plans to use party a.org's nodes (similarly, d.org plans to use b.org's nodes) to submit transactions with its own user identity, e.g., user1.c.org. Is this possible?
It's ok to run a CA for c.org and d.org. However, I'm looking for a better solution without wrapping c.org transactions within a.org transactions where it's signed by someone (or a node) in a.org. This is needed as someday c.org may decide to run a node and claim all their previous transactions.
You can certainly create the organization C MSP on the channel (using an organization C CA) and have organization C client users connect to organization A peers. Later, organization C can run their own peer if they like.

Hyperledger fabric Network setup for different region

I am using the hyper-ledger fabric project, It works well, if i have all the keys and certificate of peers and orderer. I can create the channel and install chain-code.
I came across the scenario.
Let Assume, that we have 4 organisation A,B,C,D. Each one is in different region with different CA (Total 4 CA).
Each organisation consist of 2 peers, 3 orderer and have there own channel, Let's assume ChannelA, ChannelB, ChannelC, ChannelD. This structure work well because everything is internal setup.
Now,Assuming that If organisation A and B become partner wanna do business. They have to communicate the each other. How the work flow go.Because the A and B already have there own channel and organisation setup. Now how A and B can bring their business on the existing one. Later stage if c and d wanna join A and B. How flow works because they have all different key-pair, certificates.
#fama
Let me tell you a bit concepts here
In hyperledger fabric consortium is the top level and channels, organisations are comes under consortium
So in your question each organisation has their own CA and some peers, Orderers
So when org A creates channel and org B, C, D joins same channel it will be as your case
At any point of time any organisation can create channel and others can join only if participating orgs should be in the same consortium

Hyperledger fabric - Single Org vs Multi Org and When to setup Multi Org environment?

I have a web-based application for HR Employee management.
This application has many clients that login into the web app and uses the features.
I want to integrate this app into the blockchain. I want some of the data (compliance related, sensitive) to be recorded in the blockchain.
Data will be written to blockchain by my application only. My clients will only view the data.
What approach should I use?
a) Single Org (my app) with multiple peers (1 peer per client).
b) Multi-Org: Org1 = My app, Org 2 = Client 1, Org 3 = Client 2 .... n.
If any other approach please suggest.
Note: Individual Clients won't be sharing any data among themselves.
I want to use the hyper ledger fabric blockchain for only storing the information because it is immutable and tamper proof.
Even If I go with multi-org scenario, Both orgs will be added by me on servers managed by us. Will this cause trust issues in courts legally? Can I prove that data has not been tampered although all servers hosting blockchain are mine?
Based on your statement "Individual Clients won't be sharing any data among themselves", I would suggest 2 options based on the native capabilities of HLF, depending on whether all data in the transaction is private, or only a subset of the data.
No data is shared - one channel per peer, one peer/org per client OR one peer with multiple channels. In the multi-peer case, transaction data is only stored on the one peer which is a member of the channel. No other peers receive the data.
Some data is shared - one channel for all peers, one peer/org per client. In this case, a private data collection can be used to store private data. Transactions are stored on the ledgers of all peers, containing all the data in the case of the initiating peer, and only the public data plus the hash of the private data on all other peers.
Neither of these options provides data redundancy across peers, but since you didnĀ“t state this as a requirement, I'm assuming this isn't a problem.
Since you state that you will be in control of all peers, the immutability guarantee doesn't count for much, as there is nothing to prevent you from rewriting the entire blockchain at any time. Despite this, such a solution would still be superior to a traditional database, since it would be immune to changes at an individual transaction level.

How should I setup Channels and Orgs in Hyperledger Fabric?

I have a web app with multiple clients.
I want to record some data of client (employee education record) on blockchain.
Clients do not wish to share this data with any other entity or organisation. No data will be shared between clients themselves. The sole purpose to use blockchain is: to have a immutable copy of records.
I have two options:
Multiple Orgs Single Channel:
1 Org per client and 1 Org for my application.
All Orgs on single channel.
I write my business network in composer in such a way that 1 client cannot READ, WRITE, DELETE the data of other client. (via ACL definition).
So, although the ledger is same for all clients, there are rules defined to prevent invalid access.
Multiple Orgs Multiple Channel:
1 Org per client and 1 Org for my application.
Different channels for each client. (Client + My App Org join the channel).
This way ledger will be different for each client.
Con: I need to instantiate the same composer network(bna) on all channels (management task increases).
Which approach is good for my scenario?
If there is no common data between different clients/orgs, there is no point of having a shared channel between them. Taking care of permissions overs data will complicate your network setup. It would be better to abstract out that detail from network design.
You should have one org corresponding to each client. In each org there will be a single channel which all the peers in that org will use to communicate.
I think you could encrypt every client's data by passing the transient key to chaincode,and just manage the keys, this may be light weight and fesible for your scenery.

Multi channel mulriorganisation hyperledger fabric

I am doing an electronic health record Hyperledger fabric network. Suppose my network has two hospitals and these hospitals need to share information like patient info etc with each other and register on the ledger. I have created three channel channel1 having peers of hospital1 and channel2 having peers of hospital2 and another channel that having peers of both organization. So that information like employees details etc won't be save on another organisations peers. Is my setup correct or do I need to make changes? and how can I share patient records to hospital2.
Under the technical aspect, you are right. Only the channel 3 will provide a common "data sharing".
Under the architecture aspect, what would be the purpose of the channels 1 and 2? The data will be written and read by only 1 organisation (1 hospital). So a more "classical" database would do the job.
If you want to share patient data between both hospitals, you will need to install a chaincode on all the peers of channel 3, then instantiate it. In this chaincode, you should have an invoke function, which put new patient key/value in the ledger.

Resources