mdcs_merkle/
lib.rs

1//! # mdcs-merkle
2//!
3//! Merkle-Clock DAG implementation for the MDCS (Merkle-Delta CRDT Store).
4//!
5//! This crate provides:
6//! - Content-addressed storage for causal history
7//! - Merkle-DAG structure for verifiable, tamper-proof history
8//! - DAGSyncer for gap-repair and synchronization
9//! - Broadcaster for gossip-based head dissemination
10//!
11//! ## Architecture
12//!
13//! The Merkle-Clock serves as a logical clock that:
14//! 1. Provides verifiable causal ordering via hash-linked nodes
15//! 2. Enables gap-repair through content-addressed fetching
16//! 3. Supports open membership without metadata bloat
17//! 4. Handles concurrent updates via multi-root DAGs
18//!
19//! ## Example
20//!
21//! ```rust
22//! use mdcs_merkle::{MerkleNode, Payload, MemoryDAGStore, DAGStore, NodeBuilder};
23//!
24//! // Create a DAG store
25//! let mut store = MemoryDAGStore::new();
26//!
27//! // Create the genesis node
28//! let genesis = NodeBuilder::new()
29//!     .with_payload(Payload::genesis())
30//!     .build();
31//! let genesis_cid = store.put(genesis).unwrap();
32//!
33//! // Create a child node referencing the genesis
34//! let child = NodeBuilder::new()
35//!     .with_parents(vec![genesis_cid])
36//!     .with_payload(Payload::delta(vec![1, 2, 3]))
37//!     .build();
38//! let child_cid = store.put(child).unwrap();
39//!
40//! // The child is now a head
41//! assert_eq!(store.heads(), vec![child_cid]);
42//! ```
43
44mod broadcaster;
45mod hash;
46mod node;
47mod store;
48mod syncer;
49
50pub use broadcaster::{BroadcastConfig, BroadcastMessage, BroadcastNetwork, Broadcaster};
51pub use hash::{Hash, Hasher};
52pub use node::{MerkleNode, NodeBuilder, Payload};
53pub use store::{DAGError, DAGStore, MemoryDAGStore};
54pub use syncer::{DAGSyncer, SyncError, SyncRequest, SyncResponse, SyncSimulator};