Skip to content

Discovery options for phase 0 #7

@jannikluhn

Description

@jannikluhn

Nodes need a way to find peers. In phase 0, this task is less challenging than in later phases as there are no shards and nodes can choose peers randomly from the whole set of nodes in the network [1]. For this reason, we should be able to just pick an existing protocol and the main consideration is implementation overhead. Here are some options that we could consider:

Bootstrap list

  • implemented in libp2p, probably trivial to implement by ourselves
  • maybe fine for a testnet, but too centralized as the only mechanism for a real network.

libp2p MulticastDNS

  • not an option as it only works in a local network.

libp2p KadDHT

  • Implementation status:
    • Go
    • Rust
    • JavaScript
    • Python
    • Nim
    • Java
    • Daemon

devp2p discovery

  • Implementation status:
    • Go
    • Rust
    • JavaScript
    • Python
    • Nim
    • Java
  • Note that it's also possible to implement devp2p's discovery protocol on top of libp2p primitives.

Do you have other suggestions? What are your preferences?

[1] One caveat has been pointed out here: Signatures still need to be aggregated at the shard level. However, since the bandwidth required to transmit signatures is much less than to transmit shard blocks, I think we can just gossip signatures to everyone, even to nodes that don't participate in the aggregation. This is something we should discuss though.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions