Crate iroh_sync

source ·
Expand description

Multi-dimensional key-value documents with an efficient synchronization protocol

The crate operates on Replicas. A replica contains an unlimited number of Entries. Each entry is identified by a key, its author, and the replica’s namespace. Its value is the 32-byte BLAKE3 hash of the entry’s content data, the size of this content data, and a timestamp. The content data itself is not stored or transferred through a replica.

All entries in a replica are signed with two keypairs:

  • The NamespaceSecret key, as a token of write capability. The public key is the NamespaceId, which also serves as the unique identifier for a replica.
  • The Author key, as a proof of authorship. Any number of authors may be created, and their semantic meaning is application-specific. The public key of an author is the AuthorId.

Replicas can be synchronized between peers by exchanging messages. The synchronization algorithm is based on a technique called range-based set reconciliation, based on this paper by Aljoscha Meyer:

Range-based set reconciliation is a simple approach to efficiently compute the union of two sets over a network, based on recursively partitioning the sets and comparing fingerprints of the partitions to probabilistically detect whether a partition requires further work.

The crate exposes a generic storage interface. There is an implementation of this interface, store::fs::Store, that can be used either in-memory or in persistent, file-based mode.

Both modes make use of redb, an embedded key-value store. When used in-memory, the store is backed by a Vec<u8>. When used in persistent mode, the store is backed by a single file on disk.

Re-exports§

  • pub use self::sync::*;

Modules§

  • This contains an actor spawned on a separate thread to process replica and store operations.
  • Metrics for iroh-sync
  • Network implementation of the iroh-sync protocol
  • Storage trait and implementation for iroh-sync documents
  • API for iroh-sync replicas

Structs§