Expand description
Mesh transport primitives for HashTree.
This crate provides the reusable router, signaling, peer-link, and store layers for hashtree mesh networking. The default production composition uses Nostr websockets for signaling and WebRTC for direct links, but the same abstractions support LAN buses, Bluetooth transports, and simulation.
§Overview
- Storage Backend: Any
hashtree_core::Storeimplementation - Peer Discovery: Any
SignalingTransportimplementation - Data Exchange: Any
PeerLink/PeerLinkFactoryimplementation - Protocol: Request/response with hash-based addressing
- Adaptive Selection: Intelligent peer selection based on performance
§Example
use hashtree_core::MemoryStore;
use hashtree_network::{MeshStore, MeshStoreConfig};
use nostr_sdk::prelude::*;
use std::sync::Arc;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let local_store = Arc::new(MemoryStore::new());
let config = MeshStoreConfig::default();
let mut store = MeshStore::new(local_store, config);
// Generate or load Nostr keys
let keys = Keys::generate();
// Start P2P network
store.start(keys).await?;
// Now store.get() will try local first, then fetch from peers
Ok(())
}Re-exports§
pub use channel::ChannelError;pub use channel::LatencyChannel;pub use channel::MockChannel;pub use channel::PeerChannel;pub use generic_store::build_hedged_wave_plan;pub use generic_store::normalize_dispatch_config;pub use generic_store::run_hedged_waves;pub use generic_store::sync_selector_peers;pub use generic_store::GenericStore;pub use generic_store::GenericStoreRoutingConfig;pub use generic_store::HedgedWaveAction;pub use generic_store::ProductionStore;pub use generic_store::RequestDispatchConfig;pub use generic_store::ResponseBehaviorConfig;pub use generic_store::SimStore;pub use mock::clear_channel_registry;pub use mock::MockConnectionFactory;pub use mock::MockDataChannel;pub use mock::MockLatencyMode;pub use mock::MockRelay;pub use mock::MockRelayTransport;pub use mock::MockSignalingTransport;pub use nostr::decode_signaling_event;pub use nostr::encode_signaling_event;pub use nostr::NostrRelayTransport;pub use nostr::NostrSignalingTransport;pub use peer::ForwardRequestCallback;pub use peer::Peer;pub use peer::PeerError;pub use peer_selector::peer_principal;pub use peer_selector::PeerMetadataSnapshot;pub use peer_selector::PeerSelector;pub use peer_selector::PeerStats;pub use peer_selector::PersistedPeerMetadata;pub use peer_selector::SelectionStrategy;pub use peer_selector::SelectorSummary;pub use peer_selector::PEER_METADATA_SNAPSHOT_VERSION;pub use protocol::bytes_to_hash;pub use protocol::create_fragment_response;pub use protocol::create_quote_request;pub use protocol::create_quote_response_available;pub use protocol::create_request;pub use protocol::create_request_with_quote;pub use protocol::create_response;pub use protocol::encode_quote_request;pub use protocol::encode_quote_response;pub use protocol::encode_request;pub use protocol::encode_response;pub use protocol::hash_to_bytes;pub use protocol::hash_to_key;pub use protocol::is_fragmented;pub use protocol::parse_message;pub use protocol::DataMessage;pub use protocol::DataQuoteRequest;pub use protocol::DataQuoteResponse;pub use protocol::DataRequest;pub use protocol::DataResponse;pub use protocol::FRAGMENT_SIZE;pub use protocol::MSG_TYPE_QUOTE_REQUEST;pub use protocol::MSG_TYPE_QUOTE_RESPONSE;pub use protocol::MSG_TYPE_REQUEST;pub use protocol::MSG_TYPE_RESPONSE;pub use real_factory::RealPeerConnectionFactory;pub use real_factory::WebRtcPeerLinkFactory;pub use signaling::MeshRouter;pub use signaling::PeerEntry;pub use signaling::PeerRouter;pub use signaling::SignalingManager;pub use store::MeshStore;pub use store::MeshStoreError;pub use store::WebRTCStore;pub use store::WebRTCStoreError;pub use transport::DataChannel;pub use transport::MeshRouterConfig;pub use transport::PeerConnectionFactory;pub use transport::PeerLink;pub use transport::PeerLinkFactory;pub use transport::RelayTransport;pub use transport::SignalingConfig;pub use transport::SignalingTransport;pub use transport::TransportError;pub use types::classifier_channel;pub use types::decrement_htl_with_policy;pub use types::is_polite_peer;pub use types::should_forward;pub use types::should_forward_htl;pub use types::validate_mesh_frame;pub use types::ClassifierRx;pub use types::ClassifierTx;pub use types::ClassifyRequest;pub use types::ForwardRequest;pub use types::ForwardRx;pub use types::ForwardTx;pub use types::HtlMode;pub use types::HtlPolicy;pub use types::IceCandidate;pub use types::MeshNostrFrame;pub use types::MeshNostrPayload;pub use types::MeshStats;pub use types::MeshStoreConfig;pub use types::PeerHTLConfig;pub use types::PeerId;pub use types::PeerPool;pub use types::PeerState;pub use types::PoolConfig;pub use types::PoolSettings;pub use types::SignalingMessage;pub use types::TimedSeenSet;pub use types::WebRTCStats;pub use types::WebRTCStoreConfig;pub use types::BLOB_REQUEST_POLICY;pub use types::DATA_CHANNEL_LABEL;pub use types::DECREMENT_AT_MAX_PROB;pub use types::DECREMENT_AT_MIN_PROB;pub use types::MAX_HTL;pub use types::MESH_DEFAULT_HTL;pub use types::MESH_EVENT_POLICY;pub use types::MESH_MAX_HTL;pub use types::MESH_PROTOCOL;pub use types::MESH_PROTOCOL_VERSION;pub use types::MESH_SIGNALING_EVENT_KIND;pub use types::NOSTR_KIND_HASHTREE;
Modules§
- channel
- Peer communication channel abstraction
- generic_
store - Generic P2P store using abstract transports.
- mock
- Mock implementations for testing and simulation
- nostr
- Nostr websocket signaling transport implementation
- peer
- WebRTC peer connection management
- peer_
selector - Adaptive peer selection based on Freenet patterns
- protocol
- Wire protocol for hashtree WebRTC data exchange
- real_
factory - Real WebRTC peer-link factory
- signaling
- Shared signaling logic for peer discovery and connection management
- store
- Default mesh-backed store implementation.
- transport
- Signaling and peer-link transport abstractions
- types
- Mesh transport types for peer-to-peer data exchange.