feat(dht): Phase 2 — swarm-assist fetch seam, origin always wins
Lands the transport/swarm orchestration layer (the iroh engine attaches later, behind a flag). The seam is fully exercised today with the origin HTTP path; with no swarm providers registered the behaviour is byte-for-byte identical to before. - swarm/mod.rs: BlobProvider trait + fetch_content_addressed() — tries each provider in order, VERIFIES peer-sourced bytes against the content digest before accepting (untrusted seeds can't inject tampered bytes), falls back to the origin closure if none serve. Returns Swarm|Origin. - Cargo: iroh-swarm feature (off by default; heavy QUIC dep tree attaches here). providers() is empty until enabled → every fetch hits origin. - update.rs: components with a BLAKE3 digest route through the seam, using the existing resumable HTTP downloader as the origin fallback; a swarm hit is re-checked against the mandatory SHA-256 manifest gate (re-fetch from origin on any disagreement). Components without blake3 take the original path untouched. 44/44 swarm/update/content_hash/blobs tests pass (incl. swarm hit/miss, tampered-bytes-rejected→origin, fall-through ordering). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
f0cb91ed76
commit
2523c9e3dd
@@ -9,6 +9,16 @@ authors = ["Archipelago Team"]
|
||||
name = "archipelago"
|
||||
path = "src/main.rs"
|
||||
|
||||
[features]
|
||||
default = []
|
||||
# DHT Phase 2: iroh-blobs peer swarm engine. OFF by default — it pulls a heavy
|
||||
# QUIC dependency tree, so it ships behind a flag for PoC/measurement on a
|
||||
# scratch node before any fleet rollout. With the flag off, swarm::providers()
|
||||
# is empty and every fetch goes straight to the origin HTTP path (today's
|
||||
# behaviour). Attach the optional iroh / iroh-blobs deps to this feature when
|
||||
# wiring the IrohProvider.
|
||||
iroh-swarm = []
|
||||
|
||||
[dependencies]
|
||||
# Core dependencies
|
||||
tokio = { version = "1", features = ["full"] }
|
||||
|
||||
Reference in New Issue
Block a user