1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
# dig-store-cache — the DIG Node's on-disk cache of already-verified `.dig` capsules.
#
# This is the "cache + reshare" leg of the content-replication flywheel (install -> connect ->
# discover -> read -> CACHE -> reshare). When the node fetches + verifies a capsule (dig-download does
# the NC-9 merkle/chain verify), it hands the finished bytes here; dig-store-cache admits them under a
# bounded, LRU-evicted (pluggable policy), pin-aware, crash-safe store and reports the resulting
# holdings so the node can announce itself as a provider (dig-dht `find_providers` / opcode-222
# HoldingsAnnounce). Every read therefore makes content MORE available.
#
# BOUNDARY (deliberately tiny): a pure filesystem primitive. It has NO chain, NO network, and NO key
# dependencies — the CALLER verifies content before `put` and chooses the cache location. It depends
# DOWN only on `dig-store` (20-domain) for the canonical capsule identity + retrieval-key derivation,
# so the ecosystem speaks ONE identity type (`dig_store::CapsuleIdentity`) end to end.
[]
= "dig-store-cache"
= "0.1.1"
= "2021"
= "1.75.0"
= "Apache-2.0 OR MIT"
= "On-disk LRU (pluggable-policy), pin-aware, crash-safe cache of already-verified DIG `.dig` capsules for the DIG Node — the cache + reshare leg of the content-replication flywheel."
= "https://github.com/DIG-Network/dig-store-cache"
= "README.md"
= ["cache", "content-addressed", "lru", "dig", "capsule"]
= ["caching", "filesystem"]
[]
# The canonical capsule identity (`CapsuleIdentity { store_id, root_hash }`), the `urn:dig:chia:…`
# scheme, and the one-way `retrieval_key` derivation the on-disk filename is built from — reused so a
# capsule is addressed byte-identically to the rest of the ecosystem (SYSTEM.md URN contract). Also
# supplies `get_capsule_identity` for the optional structural `check_identity` sanity check + orphan
# recovery. crates.io release (NC-7: prefer the release over bare-git).
= "0.5"
# Content-addressed hashing helper: hex-encode the 32-byte retrieval key into the capsule's filename.
= "0.4"
# Structured, catalogued errors (§6.2 stable error taxonomy).
= "2"
# The advisory manifest (`index.json`): recency + pinned overlay serialized as JSON. Disk stays
# authoritative; the manifest only accelerates rebuild + carries the non-derivable bits.
= { = "1", = ["derive"] }
= "1"
# Crash-safe atomic admission: a unique `tmp/<uuid>.part` staging name so two concurrent admissions of
# the same capsule never collide, then an atomic rename into `capsules/`.
= { = "1", = ["v4"] }
# Orphan recovery ONLY: when a capsule file exists with no manifest entry (a crash between rename and
# manifest write), the identity is recovered by MEMORY-MAPPING the file and reading its header via
# `dig_store::get_capsule_identity` — a zero-copy mapping, never a heap slurp, so recovery of a ~1 GiB
# capsule stays RAM-flat (the path-based byte-flow rule). Normal admission/get never map.
= "0.9"
[]
# Isolated temp cache roots per test.
= "3"
# Build synthetic CapsuleIdentity values + decode the golden fixture in tests.
= "0.5"
= "0.4"
# Deterministically set file mtimes to assert manifest-less recency comes from disk mtimes.
= "0.2"