bounties icon indicating copy to clipboard operation
bounties copied to clipboard

Research: nnet integration to support message broadcast to all nodes

Open LeoHChen opened this issue 3 years ago • 13 comments

Description

This is a research project. The goal is to explore the integration of nnet (https://github.com/nknorg/nnet) into harmony nodes to replace the global pubsub interface.

Context

Currently, Harmony node is using pubsub module of libp2p (https://github.com/libp2p/go-libp2p-pubsub) to send messages within shard and cross-shard. pubsub in libp2p is chosen to ensure the network resiliency and robustness against network partition. However, global pubsub may not be efficient to deliver messages across different shards, especially beacon chain block broadcasting (https://github.com/harmony-one/harmony/blob/1a8494c069dc3f708fdf690456713a2411465199/node/node_handler.go#L139)

This project is to explore to integrate nnet library as a way to broadcast the beacon chain block. nnet is being developed as the networking layer of NKN blockchain (https://nkn.org/).

The goal of this project is to support two ways of broadcast support using either pubsub of libp2p or nnet.

You will need to work with both Harmony and NKN engineers to enable the support.

Acceptance Criteria

  • [ ] integrate nnet library into harmony node
  • [ ] unit test to cover at least 85% of new code
  • [ ] design an interface to support both pubsub of libp2p and nnet
  • [ ] support nnet discovery and global broadcast support
  • [ ] enable an option to use nnet library to broadcast the beacon chain block
  • [ ] testing using testnet (please contact team for support)
  • [ ] end to end test report with comparison of the two libraries, in terms of latency, bandwidth, amount of traffic

Reward

USD $15,000 equivalent of Harmony ONE token.

LeoHChen avatar Apr 10 '21 05:04 LeoHChen

Let me provide some information on the nnet side.

The first thing I would recommend is to check nnet repo https://github.com/nknorg/nnet and get a feeling of what nnet does.

Then I would recommend taking a look at example directory, especially efficient-broadcast example showing how to use tree broadcasting to efficiently broadcast messages.

A few caveats I can think of:

  • nnet requires node to accepting incoming connections as it's using Chord DHT. This usually requires public IP address or port forwarding set up on node. If a node cannot accept incoming connections, he can still broadcast out messages, but won't be able to receive broadcasted messages sent by other nodes.
  • For reliability, it's recommended to have another mechanism to pull block from neighbors together with tree broadcasting. So basically tree broadcasting will deliver the block to like 99% nodes, and the rest 1% (e.g. the ones that cannot accept incoming connections) will pull it from its neighbors.

Feel free to let me know if you have any questions.

yilunzhang avatar Apr 11 '21 00:04 yilunzhang

Issue Status: 1. Open 2. Started 3. Submitted 4. Done


This issue now has a funding of 102974.1785 ONE (14976.98 USD @ $0.15/ONE) attached to it.

gitcoinbot avatar Apr 12 '21 20:04 gitcoinbot

Issue Status: 1. Open 2. Started 3. Submitted 4. Done


The funding of 102974.1785 ONE (10814.45 USD @ $0.11/ONE) attached to this issue has been cancelled by the bounty submitter

gitcoinbot avatar May 22 '21 04:05 gitcoinbot

Issue Status: 1. Open 2. Started 3. Submitted 4. Done


Work has been started.

These users each claimed they can complete the work by 1 month, 1 week from now. Please review their action plans below:

1) gabrielnicolasavellaneda has started work.

I will research on nnet integration to support message broadcast to all nodes 2) kevinkelley has started work.

Integrate nnet as optional alternative to libp2p, and compare the two

Learn more on the Gitcoin Issue Details page.

gitcoinbot avatar May 26 '21 17:05 gitcoinbot

Sorry to see this one de-funded; it actually looks pretty interesting to me.
...I've worked with libp2p before, and I'm pretty interested in nnet, so this would have been a good experience :)

KevinKelley avatar May 28 '21 02:05 KevinKelley

Hi, @KevinKelley , I don't think this bounty was canceled. It was just moved from round one to round two since it wasn't finished in round one.

LeoHChen avatar Jun 08 '21 20:06 LeoHChen

@LeoHChen Ahh. Good... I'll see what I can do with it :)

KevinKelley avatar Jun 08 '21 23:06 KevinKelley

Issue Status: 1. Open 2. Started 3. Submitted 4. Done

This issue now has a funding of 102974.1785 ONE (14976.98 USD @ $0.15/ONE) attached to it.

sdfsd

vhhsc5 avatar Jun 12 '21 14:06 vhhsc5

@KevinKelley are you still working on this? We are aiming to close out this bounty this week if not.

givp avatar Aug 17 '21 19:08 givp

@givp I'm still here, still interested, still wanting (and needing) to work.

This one... it seems like a good thing, I'd love to get it working. But I'm scared away by the scope. I haven't done much, in terms of actual time working. I've been thinking about it, reading, research, trying to get a plan going, but not a lot of productive work. So... If you cancel, no harm no foul, deadline is past, and nothing produced.

Maybe better to put the money into other challenges? I'll be watching, trying to get in, lol.

If this one is important? Then, for me... I need to ...I don't know. Maybe reduce the scope, have a couple phases, proof of concept and follow with actual integration...

This cuts across the whole system, far as I can tell... I'm not seeing much way for a single developer to manage that. Switching the comm... yeah, okay, but then there's gonna be a whole lot of issues with the whole network, testing across sharding, across all nodes, how am I gonna manage that?

Thoughts? I really do want to get involved, some way.

KevinKelley avatar Aug 21 '21 04:08 KevinKelley

@KevinKelley No worries. I'll have to let @LeoHChen decide on changing the scope of this bounty.

Either way, I'm sure we can get you involved in other projects. Are you participating in the current Hackathon?

Feel free to DM me on Discord so we can go deeper. [Giv | Harmony#5499]

givp avatar Aug 22 '21 00:08 givp

Issue Status: 1. Open 2. Started 3. Submitted 4. Done


The funding of 102974.1785 ONE (11923.9 USD @ $0.12/ONE) attached to this issue has been cancelled by the bounty submitter

gitcoinbot avatar Aug 24 '21 17:08 gitcoinbot

hi, @KevinKelley are you still interested in working on this project. We can discuss about the scope further, maybe split it into smaller bounties to start with. Please reach out to me on twitter @leo_hao or discord. #lc4331

LeoHChen avatar Nov 09 '21 22:11 LeoHChen