1pub mod behaviour;
66pub mod block_sync_proto;
67pub mod config;
68pub mod consensus_direct_proto;
69pub mod discovery;
70pub mod error;
71pub mod gossip;
72pub mod message;
73pub mod metrics;
74pub mod mpc_relay;
75pub mod peer_manager;
76pub mod peer_status;
77pub mod service;
78pub mod transport;
79
80pub use behaviour::{TenzroBehaviour, TenzroNetwork};
82pub use block_sync_proto::{
83 BlockSyncBehaviour, BlockSyncError, BlockSyncRequest, BlockSyncResponse,
84 BLOCK_SYNC_PROTOCOL, MAX_BLOCKS_PER_RANGE, MAX_BLOCK_HASHES_PER_REQUEST,
85 MAX_INBOUND_STREAMS_PER_PEER, MAX_INFLIGHT_REQUESTS_PER_PEER,
86};
87pub use consensus_direct_proto::{
88 ConsensusDirectBehaviour, ConsensusDirectError, ConsensusDirectRequest,
89 ConsensusDirectResponse, CONSENSUS_DIRECT_PROTOCOL,
90};
91pub use mpc_relay::{
92 session_topic as mpc_session_topic, MpcDidResolver, MpcRelayBehaviour, MpcRelayError,
93 MpcRelayRequest, MpcRelayResponse, MPC_RELAY_GOSSIP_TOPIC_PREFIX, MPC_RELAY_PROTOCOL,
94};
95pub use config::NetworkConfig;
96pub use discovery::{BootstrapConfig, DiscoveryConfig, ProviderType};
97pub use error::{NetworkError, Result};
98pub use gossip::{GossipTopics, MessageDeduplicator, MessageValidation, TopicSubscriptions};
99pub use metrics::NetworkMetrics;
100pub use message::{
101 AgentAnnouncementMessage, AttestationMessage, ConsensusMessage, InferenceRequestMessage,
102 InferenceResponseMessage, MessagePayload, ModelRegistrationMessage, ModelSchedule,
103 NetworkMessage, PaymentDetails, PricingInfo, ProviderAnnouncementMessage, StatusMessage,
104 VoteType,
105};
106pub use peer_manager::{ManagedPeer, PeerManager, PeerManagerStats, ValidatorRegistry, VALIDATOR_ONLY_TOPICS};
107pub use peer_status::{PeerStatus as PeerChainStatus, PeerStatusTracker, DEFAULT_FRESHNESS};
108pub use service::{
109 BlockSyncOutboundError, InboundBlockSync, NetworkService, OutboundBlockSyncResult,
110 PeerEvent, TenzroNetworkService,
111};
112
113pub use libp2p::request_response::{InboundRequestId, OutboundRequestId};
115pub use libp2p::{Multiaddr, PeerId};
116
117#[cfg(test)]
118mod tests {
119 use super::*;
120
121 #[test]
122 fn test_config_validation() {
123 let config = NetworkConfig::default();
124 assert!(config.validate().is_ok());
125
126 let invalid_config = NetworkConfig {
127 listen_addresses: vec![],
128 ..Default::default()
129 };
130 assert!(invalid_config.validate().is_err());
131 }
132
133 #[test]
134 fn test_message_serialization() {
135 let msg = NetworkMessage::new(MessagePayload::Ping);
136 let bytes = msg.to_bytes().unwrap();
137 let decoded = NetworkMessage::from_bytes(&bytes).unwrap();
138
139 assert_eq!(msg.message_id, decoded.message_id);
140 assert_eq!(msg.timestamp, decoded.timestamp);
141 }
142
143 #[tokio::test]
144 async fn test_network_service_creation() {
145 let config = NetworkConfig::local();
146 let result = TenzroNetworkService::new(config).await;
147 assert!(result.is_ok());
148 }
149}