tycho_core/node/
config.rs

1use std::net::{IpAddr, Ipv4Addr};
2use std::path::Path;
3
4use serde::{Deserialize, Serialize};
5use tycho_network::{DhtConfig, NetworkConfig, OverlayConfig, PeerResolverConfig};
6use tycho_storage::StorageConfig;
7use tycho_util::config::PartialConfig;
8
9use crate::block_strider::{
10    ArchiveBlockProviderConfig, BlockchainBlockProviderConfig, StarterConfig,
11};
12use crate::blockchain_rpc::{BlockchainRpcClientConfig, BlockchainRpcServiceConfig};
13use crate::overlay_client::PublicOverlayClientConfig;
14use crate::storage::CoreStorageConfig;
15
16#[derive(Debug, Clone, Serialize, Deserialize, PartialConfig)]
17#[serde(default)]
18pub struct NodeBaseConfig {
19    /// Public IP address of the node.
20    ///
21    /// Default: resolved automatically.
22    #[important]
23    pub public_ip: Option<IpAddr>,
24
25    /// Ip address to listen on.
26    ///
27    /// Default: 0.0.0.0
28    #[important]
29    pub local_ip: IpAddr,
30
31    /// Default: 30000.
32    #[important]
33    pub port: u16,
34
35    pub network: NetworkConfig,
36
37    pub dht: DhtConfig,
38
39    pub peer_resolver: PeerResolverConfig,
40
41    pub overlay: OverlayConfig,
42
43    pub public_overlay_client: PublicOverlayClientConfig,
44
45    #[partial]
46    pub storage: StorageConfig,
47
48    #[partial]
49    pub core_storage: CoreStorageConfig,
50
51    pub starter: StarterConfig,
52
53    pub blockchain_rpc_client: BlockchainRpcClientConfig,
54
55    pub blockchain_rpc_service: BlockchainRpcServiceConfig,
56
57    pub archive_block_provider: ArchiveBlockProviderConfig,
58
59    pub blockchain_block_provider: BlockchainBlockProviderConfig,
60}
61
62impl Default for NodeBaseConfig {
63    fn default() -> Self {
64        Self {
65            public_ip: None,
66            local_ip: IpAddr::V4(Ipv4Addr::UNSPECIFIED),
67            port: 30000,
68            network: NetworkConfig::default(),
69            dht: DhtConfig::default(),
70            peer_resolver: PeerResolverConfig::default(),
71            overlay: OverlayConfig::default(),
72            public_overlay_client: PublicOverlayClientConfig::default(),
73            storage: StorageConfig::default(),
74            core_storage: CoreStorageConfig::default(),
75            starter: StarterConfig::default(),
76            blockchain_rpc_client: BlockchainRpcClientConfig::default(),
77            blockchain_rpc_service: BlockchainRpcServiceConfig::default(),
78            blockchain_block_provider: BlockchainBlockProviderConfig::default(),
79            archive_block_provider: ArchiveBlockProviderConfig::default(),
80        }
81    }
82}
83
84impl NodeBaseConfig {
85    pub fn with_relative_paths<P: AsRef<Path>>(mut self, base_dir: P) -> Self {
86        let base_dir = base_dir.as_ref();
87        self.storage.root_dir = base_dir.join(self.storage.root_dir);
88        self
89    }
90}