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 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_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::WebRtcPeerLinkFactory;
pub use signaling::MeshRouter;
pub use signaling::PeerEntry;
pub use store::MeshStore;
pub use store::MeshStoreError;
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.