Skip to main content

hoike_gossip/
config.rs

1use serde::Deserialize;
2use std::path::PathBuf;
3
4#[derive(Debug, Deserialize, Clone)]
5pub struct GossipConfig {
6    #[serde(default)]
7    pub enabled: bool,
8    #[serde(default = "default_bind")]
9    pub bind: String,
10    #[serde(default)]
11    pub seeds: Vec<String>,
12    #[serde(default = "default_node_name")]
13    pub node_name: String,
14    /// Ed25519 PKCS#8 private key for signing outbound broadcasts (FPT_ITT.1).
15    /// When set, every custom broadcast this node emits is signed.
16    #[serde(default)]
17    pub identity_key: Option<PathBuf>,
18    /// Deprecated unbound key list. Nonempty values fail startup with migration
19    /// instructions; use peer_identities to authorize each key's node identity.
20    #[serde(default)]
21    pub peer_keys: Vec<PathBuf>,
22    /// Authorized node name to Ed25519 SPKI public key.
23    #[serde(default)]
24    pub peer_identities: std::collections::BTreeMap<String, PathBuf>,
25}
26
27impl Default for GossipConfig {
28    fn default() -> Self {
29        Self {
30            enabled: false,
31            bind: default_bind(),
32            seeds: Vec::new(),
33            node_name: default_node_name(),
34            identity_key: None,
35            peer_keys: Vec::new(),
36            peer_identities: Default::default(),
37        }
38    }
39}
40
41fn default_bind() -> String {
42    "0.0.0.0:7946".into()
43}
44
45fn default_node_name() -> String {
46    std::env::var("HOSTNAME").unwrap_or_else(|_| "hoike-node".into())
47}