elara-diffusion 0.1.0

ELARA Protocol - Swarm diffusion engine for state propagation, livestream distribution, and group communication
Documentation
  • Coverage
  • 94.86%
    203 out of 214 items documented0 out of 118 items with examples
  • Size
  • Source code size: 56.81 kB This is the summed size of all the files inside the crates.io package for this release.
  • Documentation size: 9.15 MB This is the summed size of all files generated by rustdoc for all configured targets
  • Ø build duration
  • this release: 20s Average build duration of successful builds.
  • all releases: 19s Average build duration of successful builds in releases after 2024-10-23.
  • Links
  • Homepage
  • rafaelsistems/ELARA-Protocol
    1 0 0
  • crates.io
  • Dependencies
  • Versions
  • Owners
  • Rafael2022-prog

elara-diffusion

Swarm diffusion engine for the ELARA Protocol - providing state propagation, livestream distribution, and group communication through epidemic-style information spreading.

Features

  • Epidemic Propagation: Gossip-based state distribution
  • Livestream Distribution: Real-time content spreading
  • Group Communication: Multi-party state synchronization
  • Adaptive Fanout: Dynamic neighbor selection
  • Resilience: Continues working under network partitions

Quick Start

use elara_diffusion::{DiffusionEngine, DiffusionConfig};
use elara_core::NodeId;

// Create diffusion engine
let mut engine = DiffusionEngine::new(node_id, config);

// Start diffusion process
engine.start()?;

// Propagate state
engine.propagate_state(state_id, state_data)?;

// Handle incoming diffusion
engine.handle_diffusion_message(message)?;

Swarm Diffusion Model

Epidemic Spreading

Node A → Node B → Node C → Node D
   ↓        ↓        ↓        ↓
Node E    Node F    Node G    Node H

Adaptive Fanout

pub struct DiffusionConfig {
    pub initial_fanout: usize,      // Initial neighbor count
    pub max_fanout: usize,          // Maximum neighbors
    pub adaptive_threshold: f64,    // Quality threshold
    pub redundancy_factor: f32,     // Message redundancy
}

State Propagation

Push-Based

// Active propagation
engine.push_state(state_id, state_data, target_nodes)?;

Pull-Based

// Request missing state
engine.pull_state(missing_state_ids, source_node)?;

Hybrid Mode

// Automatic push-pull based on network conditions
engine.set_mode(DiffusionMode::Hybrid);

Livestream Distribution

Stream Segments

pub struct StreamSegment {
    pub stream_id: StreamId,
    pub segment_id: SegmentId,
    pub data: Vec<u8>,
    pub timestamp: StateTime,
    pub priority: Priority,
}

Quality Adaptation

// Adapt quality based on network conditions
engine.adapt_stream_quality(network_quality);

// Manual quality setting
engine.set_stream_quality(stream_id, QualityLevel::Medium);

Group Communication

Group Formation

// Create diffusion group
let group = engine.create_group(group_config)?;

// Join existing group
engine.join_group(group_id, node_id)?;

// Leave group
engine.leave_group(group_id, node_id)?;

Message Routing

// Broadcast to group
engine.broadcast_to_group(group_id, message)?;

// Multicast to subset
engine.multicast_to_subset(nodes, message)?;

// Unicast with fallback
engine.unicast_with_fallback(target, message)?;

Resilience Features

Partition Tolerance

  • Continues operating during network splits
  • Automatic reconnection when partitions heal
  • State reconciliation after merge

Node Failures

// Detect node failure
engine.detect_node_failure(failed_node);

// Rebuild routing table
engine.rebuild_routing();

// Redistribute load
engine.redistribute_load();

Message Redundancy

// Configure redundancy
engine.set_redundancy_factor(2.0); // 200% redundancy

// Enable duplicate detection
engine.enable_duplicate_detection(true);

Performance Metrics

Propagation Speed

  • Initial Hop: < 50ms
  • Network-wide: O(log N) hops
  • Convergence Time: O(log N) seconds

Efficiency

  • Message Overhead: < 5% bandwidth increase
  • Memory Usage: O(√N) per node
  • CPU Usage: < 2% on modern hardware

License

Licensed under either of:

at your option.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.