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 mesh_store_core::build_hedged_wave_plan;pub use mesh_store_core::normalize_dispatch_config;pub use mesh_store_core::run_hedged_waves;pub use mesh_store_core::sync_selector_peers;pub use mesh_store_core::DataPumpStats;pub use mesh_store_core::HedgedWaveAction;pub use mesh_store_core::MeshRoutingConfig;pub use mesh_store_core::MeshStoreCore;pub use mesh_store_core::ProductionMeshStore;pub use mesh_store_core::RequestDispatchConfig;pub use mesh_store_core::ResponseBehaviorConfig;pub use mesh_store_core::SimMeshStore;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 nostr::decode_signaling_event;pub use nostr::encode_signaling_event;pub use nostr::NostrRelayTransport;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::WebRtcPeerLinkFactory;pub use signaling::MeshRouter;pub use signaling::PeerEntry;pub use store::MeshStore;pub use store::MeshStoreError;pub use transport::PeerLink;pub use transport::PeerLinkFactory;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::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::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
- mesh_
store_ core - Shared routed mesh store core.
- mock
- Mock implementations for testing and simulation
- nostr
- Nostr websocket signaling transport implementation
- 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 production mesh store wrapper.
- transport
- Signaling and peer-link transport abstractions
- types
- Mesh transport types for peer-to-peer data exchange.