Skip to main content

Crate hashtree_network

Crate hashtree_network 

Source
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

§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_quote_response_unavailable;
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::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.