simperby_network/
lib.rs

1pub mod dms;
2pub mod nat_traversal;
3pub mod peers;
4
5#[cfg(never)]
6mod peer_discovery;
7pub mod storage;
8
9use serde::{Deserialize, Serialize};
10use simperby_core::{crypto::*, MemberName, Timestamp};
11use std::collections::BTreeMap;
12use std::net::SocketAddrV4;
13
14pub type Error = eyre::Error;
15pub type Dms<T> = dms::DistributedMessageSet<storage::StorageImpl, T>;
16
17pub use dms::{Config, DmsKey, DmsMessage, MessageCommitmentProof};
18pub use storage::{Storage, StorageError, StorageImpl};
19
20/// The information of a network peer that is discovered by the discovery protocol.
21#[derive(Debug, PartialEq, Eq, Clone, Serialize, Deserialize)]
22pub struct Peer {
23    pub public_key: PublicKey,
24    pub name: MemberName,
25    /// The address used for the discovery protocol
26    pub address: SocketAddrV4,
27    /// For the other network services like gossip or RPC,
28    /// it provides a map of `identifier->port`.
29    pub ports: BTreeMap<String, u16>,
30    pub message: String,
31    pub recently_seen_timestamp: Timestamp,
32}
33
34#[derive(Debug, Clone, Serialize, Deserialize)]
35pub struct ClientNetworkConfig {
36    /// The peer nodes to broadcast the message.
37    pub peers: Vec<Peer>,
38}
39
40#[derive(Debug, Clone, Serialize, Deserialize)]
41pub struct ServerNetworkConfig {
42    pub port: u16, // TODO: add various configurations for NAT traversal
43}
44
45pub mod keys {
46    use simperby_core::*;
47
48    use crate::DmsMessage;
49
50    pub fn dms_key<D: DmsMessage>(lfh: &BlockHeader) -> String {
51        format!("{}-{}", D::DMS_TAG, lfh.to_hash256())
52    }
53
54    pub fn port_key_dms<D: DmsMessage>() -> String {
55        format!("dms-{}", D::DMS_TAG)
56    }
57}