docs(research): add iroh suite deep-dive references for iroh, irpc, iroh-blobs, iroh-gossip, iroh-live, and iroh-docs
This commit is contained in:
59
docs/research/references/iroh/iroh-docs/README.md
Normal file
59
docs/research/references/iroh/iroh-docs/README.md
Normal file
@@ -0,0 +1,59 @@
|
||||
# iroh-docs Reference Documentation
|
||||
|
||||
> Version: 0.98.0
|
||||
> Repository: https://github.com/n0-computer/iroh-docs
|
||||
> License: MIT/Apache-2.0
|
||||
> Based on: [Range-Based Set Reconciliation (Meyer, 2022)](https://arxiv.org/abs/2212.13567)
|
||||
|
||||
## Document Index
|
||||
|
||||
| # | File | Topic |
|
||||
|---|------|-------|
|
||||
| 01 | [Overview and Architecture](01-overview-and-architecture.md) | High-level architecture, module layout, dependencies, feature flags |
|
||||
| 02 | [Document Model](02-document-model.md) | CRDT data model: namespaces, authors, entries, signatures, prefix deletion, timestamps |
|
||||
| 03 | [Sync Protocol](03-sync-protocol.md) | Range-based set reconciliation algorithm, fingerprints, message format, Store trait |
|
||||
| 04 | [Store and Persistence](04-store-and-persistence.md) | redb table schema, transaction model, queries, download policies, PublicKeyStore |
|
||||
| 05 | [Engine and Live Sync](05-engine-and-live-sync.md) | Engine, LiveActor, GossipState, content download, event system, DefaultAuthor |
|
||||
| 06 | [Network Protocol](06-network-protocol.md) | ALPN, wire format, Alice/Bob protocol flow, error types, gossip integration |
|
||||
| 07 | [API and Data Flow](07-api-and-data-flow.md) | RPC API, DocsApi, protocol messages, data flow diagrams |
|
||||
| 08 | [Key Types Reference](08-key-types-reference.md) | All public types, constants, and their relationships |
|
||||
|
||||
## Quick Reference
|
||||
|
||||
### Core Concepts
|
||||
|
||||
- **Namespace**: A document identity. Identified by `NamespaceId` (32 bytes), backed by an Ed25519 keypair (`NamespaceSecret`).
|
||||
- **Author**: A writer identity. Identified by `AuthorId` (32 bytes), backed by an Ed25519 keypair (`Author`).
|
||||
- **Entry**: A record identified by (namespace, author, key) with a value of (hash, len, timestamp).
|
||||
- **SignedEntry**: An entry with dual Ed25519 signatures (namespace + author) proving authorization and authorship.
|
||||
- **Replica**: A local instance of a document, holding entries in a store.
|
||||
- **Capability**: Either `Write(NamespaceSecret)` or `Read(NamespaceId)` — controls whether entries can be inserted.
|
||||
- **Store**: A `redb`-backed persistent store managing authors, namespaces, entries, and peer caches.
|
||||
- **Engine**: Coordinates sync actors, gossip, and content downloads for live synchronization.
|
||||
|
||||
### Key Algorithms
|
||||
|
||||
1. **Range-based set reconciliation**: Efficiently compute the union of two entry sets over a network by comparing fingerprints of partitions, subdividing when fingerprints differ.
|
||||
2. **Prefix deletion**: An entry at key "foo" acts as a tombstone for all entries whose key starts with "foo/".
|
||||
3. **Last-writer-wins**: When entries conflict on the same (namespace, author, key), the one with the higher (timestamp, hash) wins.
|
||||
4. **XOR fingerprints**: Fingerprint of a set is the XOR of individual entry fingerprints (BLAKE3 hashes of key data).
|
||||
|
||||
### Data Flow
|
||||
|
||||
```
|
||||
Application → DocsApi → Engine → LiveActor → GossipState → iroh-gossip
|
||||
↓ ↓
|
||||
SyncHandle → Actor → Store (redb) ← QUIC streams (iroh)
|
||||
↓
|
||||
iroh-blobs (content transfer)
|
||||
```
|
||||
|
||||
### Dependencies
|
||||
|
||||
- `iroh` — QUIC networking
|
||||
- `iroh-blobs` — Content-addressed blob storage and transfer
|
||||
- `iroh-gossip` — Gossip protocol for live updates
|
||||
- `redb` — Embedded key-value store
|
||||
- `ed25519-dalek` — Ed25519 signatures
|
||||
- `blake3` — Hashing
|
||||
- `postcard` — Serialization
|
||||
Reference in New Issue
Block a user