tycho_core/node/
config.rs1use 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;
14#[cfg(feature = "s3")]
15use crate::s3::S3ClientConfig;
16use crate::storage::CoreStorageConfig;
17
18#[derive(Debug, Clone, Serialize, Deserialize, PartialConfig)]
19#[serde(default)]
20pub struct NodeBaseConfig {
21 #[important]
25 pub public_ip: Option<IpAddr>,
26
27 #[important]
31 pub local_ip: IpAddr,
32
33 #[important]
35 pub port: u16,
36
37 pub network: NetworkConfig,
38
39 pub dht: DhtConfig,
40
41 pub peer_resolver: PeerResolverConfig,
42
43 pub overlay: OverlayConfig,
44
45 pub public_overlay_client: PublicOverlayClientConfig,
46
47 #[partial]
48 pub storage: StorageConfig,
49
50 #[partial]
51 pub core_storage: CoreStorageConfig,
52
53 pub starter: StarterConfig,
54
55 pub blockchain_rpc_client: BlockchainRpcClientConfig,
56
57 pub blockchain_rpc_service: BlockchainRpcServiceConfig,
58
59 pub archive_block_provider: ArchiveBlockProviderConfig,
60
61 pub blockchain_block_provider: BlockchainBlockProviderConfig,
62
63 #[cfg(feature = "s3")]
64 pub s3_client: Option<S3ClientConfig>,
65}
66
67impl Default for NodeBaseConfig {
68 fn default() -> Self {
69 Self {
70 public_ip: None,
71 local_ip: IpAddr::V4(Ipv4Addr::UNSPECIFIED),
72 port: 30000,
73 network: NetworkConfig::default(),
74 dht: DhtConfig::default(),
75 peer_resolver: PeerResolverConfig::default(),
76 overlay: OverlayConfig::default(),
77 public_overlay_client: PublicOverlayClientConfig::default(),
78 storage: StorageConfig::default(),
79 core_storage: CoreStorageConfig::default(),
80 starter: StarterConfig::default(),
81 blockchain_rpc_client: BlockchainRpcClientConfig::default(),
82 blockchain_rpc_service: BlockchainRpcServiceConfig::default(),
83 blockchain_block_provider: BlockchainBlockProviderConfig::default(),
84 archive_block_provider: ArchiveBlockProviderConfig::default(),
85
86 #[cfg(feature = "s3")]
87 s3_client: None,
88 }
89 }
90}
91
92impl NodeBaseConfig {
93 pub fn with_relative_paths<P: AsRef<Path>>(mut self, base_dir: P) -> Self {
94 let base_dir = base_dir.as_ref();
95 self.storage.root_dir = base_dir.join(self.storage.root_dir);
96 self
97 }
98}