ForkNous ResearchNous Researchpublished Mar 28, 2025seen 5d

NousResearch/iroh-gossip

forked from n0-computer/iroh-gossip

Open original ↗

Captured source

source ↗
published Mar 28, 2025seen 5dcaptured 11hhttp 200method plain

NousResearch/iroh-gossip

License: Apache-2.0

Stars: 5

Forks: 1

Open issues: 0

Created: 2025-03-28T20:51:49Z

Pushed: 2025-03-28T20:21:13Z

Default branch: main

Fork: yes

Parent repository: n0-computer/iroh-gossip

Archived: no

README:

iroh-gossip

This crate implements the iroh-gossip protocol. It is based on *epidemic broadcast trees* to disseminate messages among a swarm of peers interested in a *topic*. The implementation is based on the papers HyParView and PlumTree.

The crate is made up from two modules: The proto module is the protocol implementation, as a state machine without any IO. The net module connects the protocol to the networking stack from iroh-net.

The net module is optional behind the net feature flag (enabled by default).

Getting Started

The iroh-gossip protocol was designed to be used in conjunction with iroh. Iroh is a networking library for making direct connections, these connections are how gossip messages are sent.

Iroh provides a `Router` that takes an `Endpoint` and any protocols needed for the application. Similar to a router in webserver library, it runs a loop accepting incoming connections and routes them to the specific protocol handler, based on ALPN.

Here is a basic example of how to set up iroh-gossip with iroh:

use iroh::{protocol::Router, Endpoint};
use iroh_gossip::{net::Gossip, ALPN};

#[tokio::main]
async fn main() -> anyhow::Result {
// create an iroh endpoint that includes the standard discovery mechanisms
// we've built at number0
let endpoint = Endpoint::builder().discovery_n0().bind().await?;

// build gossip protocol
let gossip = Gossip::builder().spawn(endpoint.clone()).await?;

// setup router
let router = Router::builder(endpoint.clone())
.accept(ALPN, gossip.clone())
.spawn()
.await?;
// do fun stuff with the gossip protocol
router.shutdown().await?;
Ok(())
}

License

This project is licensed under either of

  • Apache License, Version 2.0, ([LICENSE-APACHE](LICENSE-APACHE) or

)

  • MIT license ([LICENSE-MIT](LICENSE-MIT) or

)

at your option.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in this project by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

Notability

notability 2.0/10

Routine fork with low traction