From 90724120129c2f7fe431b390cac3a69ee43b09eb Mon Sep 17 00:00:00 2001 From: Local Dev Date: Wed, 30 Sep 2026 00:51:47 +0200 Subject: [PATCH] Ariadne 0.1.11: indexer-first refresh + per-query indexer fallback The daemon now uses the operator's live BNS indexer as the primary source of truth, not chipnet electrum. Two changes to the resolver pipeline: 1) Background refresh is HTTPS-first with ETag. Every 30 s the daemon polls dl.silentmode.st/bns-name-index.json (and s3.silentmode.st:8600 as an independent Sia mirror) sending If-None-Match; only reparses the array when the operator republished, does zero work otherwise. Electrum WSS stays as a same-tick secondary that runs when HTTPS turned nothing up, so a daemon on a network that can reach chipnet but not the operator VPS still converges. Both broken? Keep the last-good index from warm-start. 2) Per-query indexer fallback in the DNS handler. When the in-memory index misses, the handler calls navigate.st/api/name/ directly with a 5-second timeout and a 30-second LRU cache. Names registered AFTER the last snapshot poll but BEFORE the next one now answer immediately from the live indexer instead of falling straight through to a forward and returning NXDOMAIN. Cache is cleared on any successful full refresh so a de-registered name doesn't stay resolvable. Net effect: on the class of failure that motivated this (chipnet electrum timing out on blockchain.scripthash.get_history, or port 50004 filtered by the network), the daemon just works. The operator's HTTPS indexer -- which every other client in the ecosystem (Theseus mobile, Aegis, sirius.x, the gateway itself) already reads from -- is now Ariadne's Thread's primary too. Trust model unchanged: the snapshot always came from the operator. Verified locally with the built binary on port 15353: bnsd index: warm-started from https://dl.silentmode.st/bns-name-index.json (61 names) hello.bch -> 127.0.0.1 (snapshot hit) game.x -> 127.0.0.1 (per-query /api/name fallback -- not in .bch-heavy snapshot) coinspectrum.x -> 127.0.0.1 (per-query fallback) ariadne.x -> 127.0.0.1 (per-query fallback) notregisteredxyz.x -> NXDOMAIN (indexer confirms not registered, forwarded to upstream) Deployed - dl.silentmode.st/AriadneResolver-Setup-0.1.11.exe - s3://bns/silentmode/dl/AriadneResolver-Setup-0.1.11.exe - silentmode.st manifest advertises 0.1.11 - sha256 58ffb06424785973d2cd656e5122061ce10b53a8dcff55605c23b5699552ee75 --- releases-manifest.json | 8 ++++---- releases/index.html | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/releases-manifest.json b/releases-manifest.json index c38fbda..e8c60a3 100644 --- a/releases-manifest.json +++ b/releases-manifest.json @@ -22,14 +22,14 @@ { "id": "ariadne-resolver", "product": "Ariadne Resolver (Windows)", - "version": "0.1.10", - "date": "2026-09-29", + "version": "0.1.11", + "date": "2026-09-30", "platform": "win-x64", "signed": false, "signingAuthority": null, - "changes": "Works on networks that block electrum WSS. Before 0.1.10 the daemon's initial index build was `await buildIndex()` over electrum WSS (port 50004); on corporate networks or restrictive ISPs that filter WSS, the await never returned, `dns.bind()` never ran, and every browser on the machine sat waiting -- symptom: task is Running, port 53 is bound, but every query hangs. 0.1.10 warm-starts the index from HTTPS snapshots in parallel (`dl.silentmode.st/bns-name-index.json` on the operator VPS + `s3.silentmode.st:8600/bns/name-list.json` on Sia, first-wins with an 8 s deadline), falls back to an on-disk cache at `C:\\ProgramData\\Ariadne\\bns-name-snapshot.json` from the last successful fetch, then lets electrum WSS keep it current in the background -- WSS updates win when they arrive because they're strictly newer, so no freshness regression when the network is fine. dns.bind runs the moment warm-start completes. Same snapshot format Android's Ariadne consumes, one artifact for the whole ecosystem. Configurable via `snapshotUrls` in ariadne.config.json. Includes 0.1.9 (local search shim), 0.1.8 (pinned-origin proxy), 0.1.7 (runtime-switchable policy). Upgrades in place.", + "changes": "The daemon now uses the operator's live BNS indexer as its primary source, not chipnet electrum. Two changes to the resolver pipeline: (1) the 30-second background refresh polls dl.silentmode.st/bns-name-index.json (and s3.silentmode.st:8600 as an independent Sia mirror) with If-None-Match ETags -- only redownloads on republish, no work when nothing changed. Electrum WSS stays as a secondary refresh that runs on the same tick when HTTPS turned nothing up, so a daemon on a network that can reach chipnet but not the operator VPS still converges. (2) A per-query indexer fallback: when a name isn't in the cached snapshot, the DNS handler calls navigate.st/api/name/ directly with a 5-second timeout and a 30-second LRU cache. Names registered AFTER the last snapshot poll but BEFORE the next one now answer immediately instead of NXDOMAIN. Result: chipnet electrum flakiness (get_history timeouts, port 50004 filtered, etc.) no longer stalls name resolution; the daemon converges on the same view of the registry that Theseus mobile, Aegis, sirius.x and the gateway itself already share. Includes 0.1.10 warm-start, 0.1.9 search shim, 0.1.8 pinned-origin proxy. Upgrades in place.", "files": { - "AriadneResolver-Setup-0.1.10.exe": "29710c4011dfe058a252f94af221c02593e728e89cc7427e3e01eaa530f8e526" + "AriadneResolver-Setup-0.1.11.exe": "58ffb06424785973d2cd656e5122061ce10b53a8dcff55605c23b5699552ee75" } }, { diff --git a/releases/index.html b/releases/index.html index 067c35b..a11511d 100644 --- a/releases/index.html +++ b/releases/index.html @@ -72,12 +72,12 @@
-

Ariadne Resolver — Windows 0.1.10

-
Windows 64-bit · unsigned · bundled Node runtime · 2026-09-29 · 0.1.10 — snapshot warm-start (works on networks that block electrum WSS) — Before 0.1.10 the daemon's initial index build ran over electrum WSS (port 50004); on corporate networks or restrictive ISPs that filter WSS, the await never returned, dns.bind never ran, and every browser on the machine hung — task showed Running, port 53 was bound, but every query timed out. 0.1.10 warm-starts the index from HTTPS snapshots in parallel — dl.silentmode.st/bns-name-index.json on the operator VPS + s3.silentmode.st:8600/bns/name-list.json on Sia, first-wins with an 8-second deadline — falls back to a local cache at C:\ProgramData\Ariadne\bns-name-snapshot.json from the last successful fetch, then lets electrum WSS keep the index current in the background (WSS updates win because they're strictly newer). Same snapshot format Android's Ariadne consumes. Configurable via snapshotUrls in ariadne.config.json. Includes 0.1.9 (local search shim). Upgrades in place.
+

Ariadne Resolver — Windows 0.1.11

+
Windows 64-bit · unsigned · bundled Node runtime · 2026-09-30 · 0.1.11 — indexer-first refresh + per-query indexer fallback — The daemon now uses the operator's live BNS indexer as its primary source instead of chipnet electrum. Two changes: (1) the 30-second background refresh polls dl.silentmode.st/bns-name-index.json (and the Sia mirror at s3.silentmode.st:8600) with If-None-Match ETags — only redownloads on a republish. Electrum WSS stays as a same-tick secondary if HTTPS turned nothing up. (2) A per-query indexer fallback in the DNS handler: when a name isn't in the cached snapshot, calls navigate.st/api/name/<host> directly with a 5-second timeout and a 30-second LRU cache. Names registered after the last snapshot poll but before the next one now answer immediately instead of NXDOMAIN. Result: chipnet electrum flakiness ("get_history timeout", port 50004 filtered, etc.) no longer stalls resolution; the daemon converges on the same view of the registry Theseus mobile, Aegis, sirius.x and the gateway already share. Includes 0.1.10 warm-start, 0.1.9 search shim, 0.1.8 pinned-origin proxy. Upgrades in place.
- - 29710c4011dfe058a252f94af221c02593e728e89cc7427e3e01eaa530f8e526 + + 58ffb06424785973d2cd656e5122061ce10b53a8dcff55605c23b5699552ee75