saorsa_core/dht/
mod.rs

1//! Distributed Hash Table implementations
2//!
3//! This module provides various DHT implementations including:
4//! - Trust-weighted Kademlia DHT with EigenTrust integration
5//! - Core DHT engine with replication and fault tolerance
6//! - Geographic routing and content addressing
7//! - Capacity signaling and telemetry
8
9pub mod capacity_signaling;
10pub mod core_engine;
11pub mod telemetry;
12pub mod trust_weighted_dht;
13pub mod trust_weighted_kademlia;
14
15// Re-export the main DHT trait and types
16pub use trust_weighted_dht::{
17    Contact, Dht, Key, Outcome, PutPolicy, PutReceipt, eigen_trust_epoch, record_interaction,
18};
19
20// Re-export PeerId from trust_weighted_dht
21pub use trust_weighted_dht::PeerId;
22
23// Re-export the trust-weighted implementation
24pub use trust_weighted_kademlia::TrustWeightedKademlia;
25
26// Re-export capacity signaling
27pub use capacity_signaling::{CapacityGossip, CapacityHistogram, CapacityManager, CapacityStats};
28
29// Re-export telemetry
30pub use telemetry::{DhtTelemetry, OperationStats, OperationType, TelemetryStats};
31
32// Re-export replication grace period types
33pub use replication_grace_period::{
34    EndpointRegistration, FailedNodeInfo, NodeFailureReason, ReplicationError,
35    ReplicationGracePeriodConfig,
36};
37
38// Re-export node failure tracker
39pub use node_failure_tracker::{DefaultNodeFailureTracker, DhtClient, NodeFailureTracker};
40
41// Re-export existing DHT components
42pub use core_engine::{DhtCoreEngine, DhtKey, NodeCapacity, NodeId as DhtNodeId, NodeInfo};
43
44// Legacy type aliases for backward compatibility
45pub type DHT = DhtCoreEngine;
46pub type DHTNode = NodeInfo;
47pub type SerializableDHTNode = NodeInfo;
48
49// Re-export types from trust_weighted_dht
50pub use trust_weighted_dht::Key as DHT_Key;
51
52// Import additional types for compatibility
53use serde::{Deserialize, Serialize};
54use std::time::Duration;
55
56/// DHT configuration parameters
57#[derive(Debug, Clone, Serialize, Deserialize)]
58pub struct DHTConfig {
59    /// Replication parameter (k) - number of nodes to store each record
60    pub replication_factor: usize,
61    /// Maximum nodes per k-bucket
62    pub bucket_size: usize,
63    /// Concurrency parameter for parallel lookups
64    pub alpha: usize,
65    /// Record expiration time
66    pub record_ttl: Duration,
67    /// Refresh interval for buckets
68    pub bucket_refresh_interval: Duration,
69    /// Republish interval for stored records
70    pub republish_interval: Duration,
71    /// Maximum distance for considering nodes "close"
72    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/// DHT record containing key-value data with metadata
90#[derive(Debug, Clone, Serialize, Deserialize)]
91pub struct Record {
92    /// Record key
93    pub key: Key,
94    /// Record value
95    pub value: Vec<u8>,
96    /// Publisher peer ID
97    pub publisher: PeerId,
98    /// Record creation time
99    pub created_at: std::time::SystemTime,
100    /// Record expiration time
101    pub expires_at: std::time::SystemTime,
102    /// Signature for verification (optional)
103    pub signature: Option<Vec<u8>>,
104}
105
106impl Record {
107    /// Create a new record
108    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), // 1 hour default TTL
116            signature: None,
117        }
118    }
119
120    /// Check if the record has expired
121    pub fn is_expired(&self) -> bool {
122        std::time::SystemTime::now() > self.expires_at
123    }
124}
125
126// Re-export other DHT modules
127pub 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
146/// IPv6-based DHT identity for security parity
147pub mod ipv6_identity;
148
149/// IPv4-based DHT identity for security parity
150pub mod ipv4_identity;
151
152/// Cross-network replication for IPv4/IPv6 dual-stack redundancy
153pub mod cross_network_replication;
154
155/// Node age verification for anti-Sybil protection
156pub mod node_age_verifier;
157
158/// Witness collusion detection for Byzantine-robust consensus
159pub mod collusion_detector;
160
161/// Sybil attack detection for DHT protection
162pub mod sybil_detector;
163
164/// Authenticated sibling broadcast for eclipse attack prevention
165pub mod authenticated_sibling_broadcast;
166
167/// Routing table maintenance and node validation
168pub mod routing_maintenance;
169
170/// Comprehensive metrics for security, DHT health, trust, and placement
171pub mod metrics;
172
173// Re-export routing maintenance types for convenience
174pub use routing_maintenance::{
175    BucketRefreshManager, DataChallenge, EvictionManager, EvictionReason, MaintenanceConfig,
176    MaintenanceScheduler, MaintenanceTask, NodeLivenessState, NodeValidationResult, RefreshTier,
177    ValidationFailure, WitnessSelectionCriteria, compute_attested_hash,
178};
179
180// Re-export security coordinator types
181pub use routing_maintenance::{
182    CloseGroupEviction, CloseGroupEvictionTracker, EvictionRecord, SecurityCoordinator,
183    SecurityCoordinatorConfig,
184};
185
186// Re-export close group validator types
187pub use routing_maintenance::close_group_validator::{
188    AttackIndicators, CloseGroupFailure, CloseGroupHistory, CloseGroupResponse,
189    CloseGroupValidationResult, CloseGroupValidator, CloseGroupValidatorConfig,
190};
191
192// Re-export collusion detector types for witness validation
193pub use collusion_detector::{
194    CollusionDetector, CollusionDetectorConfig, CollusionEvidence, CollusionGroup, VotingPattern,
195    VotingRecord,
196};
197
198// Re-export sybil detector types for DHT protection
199pub use sybil_detector::{
200    BehaviorProfile, JoinRecord, SybilDetector, SybilDetectorConfig, SybilEvidence, SybilGroup,
201};
202
203// Re-export authenticated sibling broadcast types
204pub use authenticated_sibling_broadcast::{
205    AuthenticatedSiblingBroadcast, BroadcastValidationFailure, BroadcastValidationResult,
206    MembershipProof, MembershipProofType, SiblingBroadcastBuilder, SiblingBroadcastConfig,
207    SiblingBroadcastValidator, SignedSiblingEntry,
208};
209
210// Re-export comprehensive metrics types for security, DHT health, trust, and placement
211pub use metrics::{
212    DhtHealthMetrics, DhtMetricsAggregator, DhtMetricsCollector, MetricsSummary, PlacementMetrics,
213    PlacementMetricsCollector, SecurityMetrics, SecurityMetricsCollector, TrustMetrics,
214    TrustMetricsCollector,
215};
216
217#[cfg(test)]
218mod security_tests;