1pub mod capacity_signaling;
10pub mod core_engine;
11pub mod telemetry;
12pub mod trust_weighted_dht;
13pub mod trust_weighted_kademlia;
14
15pub use trust_weighted_dht::{
17 Contact, Dht, Key, Outcome, PutPolicy, PutReceipt, eigen_trust_epoch, record_interaction,
18};
19
20pub use trust_weighted_dht::PeerId;
22
23pub use trust_weighted_kademlia::TrustWeightedKademlia;
25
26pub use capacity_signaling::{CapacityGossip, CapacityHistogram, CapacityManager, CapacityStats};
28
29pub use telemetry::{DhtTelemetry, OperationStats, OperationType, TelemetryStats};
31
32pub use replication_grace_period::{
34 EndpointRegistration, FailedNodeInfo, NodeFailureReason, ReplicationError,
35 ReplicationGracePeriodConfig,
36};
37
38pub use node_failure_tracker::{DefaultNodeFailureTracker, DhtClient, NodeFailureTracker};
40
41pub use core_engine::{DhtCoreEngine, DhtKey, NodeCapacity, NodeId as DhtNodeId, NodeInfo};
43
44pub type DHT = DhtCoreEngine;
46pub type DHTNode = NodeInfo;
47pub type SerializableDHTNode = NodeInfo;
48
49pub use trust_weighted_dht::Key as DHT_Key;
51
52use serde::{Deserialize, Serialize};
54use std::time::Duration;
55
56#[derive(Debug, Clone, Serialize, Deserialize)]
58pub struct DHTConfig {
59 pub replication_factor: usize,
61 pub bucket_size: usize,
63 pub alpha: usize,
65 pub record_ttl: Duration,
67 pub bucket_refresh_interval: Duration,
69 pub republish_interval: Duration,
71 pub max_distance: u8,
73}
74
75impl Default for DHTConfig {
76 fn default() -> Self {
77 Self {
78 replication_factor: 8,
79 bucket_size: 20,
80 alpha: 3,
81 record_ttl: Duration::from_secs(3600),
82 bucket_refresh_interval: Duration::from_secs(3600),
83 republish_interval: Duration::from_secs(3600),
84 max_distance: 160,
85 }
86 }
87}
88
89#[derive(Debug, Clone, Serialize, Deserialize)]
91pub struct Record {
92 pub key: Key,
94 pub value: Vec<u8>,
96 pub publisher: PeerId,
98 pub created_at: std::time::SystemTime,
100 pub expires_at: std::time::SystemTime,
102 pub signature: Option<Vec<u8>>,
104}
105
106impl Record {
107 pub fn new(key: Key, value: Vec<u8>, publisher: PeerId) -> Self {
109 let now = std::time::SystemTime::now();
110 Self {
111 key,
112 value,
113 publisher,
114 created_at: now,
115 expires_at: now + std::time::Duration::from_secs(3600), signature: None,
117 }
118 }
119
120 pub fn is_expired(&self) -> bool {
122 std::time::SystemTime::now() > self.expires_at
123 }
124}
125
126pub mod client;
128pub mod content_addressing;
129pub mod enhanced_storage;
130pub mod geographic_network_integration;
131pub mod geographic_routing;
132pub mod geographic_routing_table;
133pub mod latency_aware_selection;
134pub mod network_integration;
135pub mod node_failure_tracker;
136pub mod optimized_storage;
137pub mod replication_grace_period;
138pub mod rsps_integration;
139pub mod skademlia;
140pub mod witness;
141pub mod witness_client;
142pub mod witness_protocol;
143pub mod witness_selection;
144pub mod witness_signer;
145
146pub mod ipv6_identity;
148
149pub mod ipv4_identity;
151
152pub mod cross_network_replication;
154
155pub mod node_age_verifier;
157
158pub mod collusion_detector;
160
161pub mod sybil_detector;
163
164pub mod authenticated_sibling_broadcast;
166
167pub mod routing_maintenance;
169
170pub mod metrics;
172
173pub use routing_maintenance::{
175 BucketRefreshManager, DataChallenge, EvictionManager, EvictionReason, MaintenanceConfig,
176 MaintenanceScheduler, MaintenanceTask, NodeLivenessState, NodeValidationResult, RefreshTier,
177 ValidationFailure, WitnessSelectionCriteria, compute_attested_hash,
178};
179
180pub use routing_maintenance::{
182 CloseGroupEviction, CloseGroupEvictionTracker, EvictionRecord, SecurityCoordinator,
183 SecurityCoordinatorConfig,
184};
185
186pub use routing_maintenance::close_group_validator::{
188 AttackIndicators, CloseGroupFailure, CloseGroupHistory, CloseGroupResponse,
189 CloseGroupValidationResult, CloseGroupValidator, CloseGroupValidatorConfig,
190};
191
192pub use collusion_detector::{
194 CollusionDetector, CollusionDetectorConfig, CollusionEvidence, CollusionGroup, VotingPattern,
195 VotingRecord,
196};
197
198pub use sybil_detector::{
200 BehaviorProfile, JoinRecord, SybilDetector, SybilDetectorConfig, SybilEvidence, SybilGroup,
201};
202
203pub use authenticated_sibling_broadcast::{
205 AuthenticatedSiblingBroadcast, BroadcastValidationFailure, BroadcastValidationResult,
206 MembershipProof, MembershipProofType, SiblingBroadcastBuilder, SiblingBroadcastConfig,
207 SiblingBroadcastValidator, SignedSiblingEntry,
208};
209
210pub use metrics::{
212 DhtHealthMetrics, DhtMetricsAggregator, DhtMetricsCollector, MetricsSummary, PlacementMetrics,
213 PlacementMetricsCollector, SecurityMetrics, SecurityMetricsCollector, TrustMetrics,
214 TrustMetricsCollector,
215};
216
217#[cfg(test)]
218mod security_tests;