1use anyhow::Result;
2use ed25519_dalek::SigningKey;
3use iroh::{Endpoint, SecretKey};
4use iroh_gossip::net::Gossip;
5
6use distributed_topic_tracker::{AutoDiscoveryGossip, RecordPublisher, TopicId};
8
9#[tokio::main]
10async fn main() -> Result<()> {
11 let secret_key = SecretKey::generate(&mut rand::rng());
13 let signing_key = SigningKey::from_bytes(&secret_key.to_bytes());
14
15 let endpoint = Endpoint::builder()
17 .secret_key(secret_key.clone())
18 .bind()
19 .await?;
20
21 let gossip = Gossip::builder().spawn(endpoint.clone());
23
24 let _router = iroh::protocol::Router::builder(endpoint.clone())
26 .accept(iroh_gossip::ALPN, gossip.clone())
27 .spawn();
28
29 let topic_id = TopicId::new("my-iroh-gossip-topic".to_string());
30 let initial_secret = b"my-initial-secret".to_vec();
31
32 let record_publisher = RecordPublisher::new(
35 topic_id.clone(),
36 signing_key.verifying_key(),
37 signing_key.clone(),
38 None,
39 initial_secret,
40 );
41
42 let topic = gossip
43 .subscribe_and_join_with_auto_discovery(record_publisher)
44 .await?;
45
46 println!("[joined topic]");
47
48 let (_gossip_sender, _gossip_receiver) = topic.split().await?;
51
52 Ok(())
53}