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/<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 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
This commit is contained in:
Local Dev 2026-09-30 00:51:47 +02:00
parent 536b1fb41e
commit 9072412012
2 changed files with 8 additions and 8 deletions

View file

@ -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/<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 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"
}
},
{

View file

@ -72,12 +72,12 @@
</div>
<div class="rel">
<h2>Ariadne Resolver — Windows <span style="color:var(--acid)">0.1.10</span></h2>
<div class="meta">Windows 64-bit · unsigned · bundled Node runtime · 2026-09-29 · <b>0.1.10 — snapshot warm-start (works on networks that block electrum WSS)</b> — 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, <code style="display:inline">dns.bind</code> 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 — <code style="display:inline">dl.silentmode.st/bns-name-index.json</code> on the operator VPS + <code style="display:inline">s3.silentmode.st:8600/bns/name-list.json</code> on Sia, first-wins with an 8-second deadline — falls back to a local cache at <code style="display:inline">C:\ProgramData\Ariadne\bns-name-snapshot.json</code> 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 <code style="display:inline">snapshotUrls</code> in <code style="display:inline">ariadne.config.json</code>. Includes 0.1.9 (local search shim). Upgrades in place.</div>
<h2>Ariadne Resolver — Windows <span style="color:var(--acid)">0.1.11</span></h2>
<div class="meta">Windows 64-bit · unsigned · bundled Node runtime · 2026-09-30 · <b>0.1.11 — indexer-first refresh + per-query indexer fallback</b> — 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 <code style="display:inline">dl.silentmode.st/bns-name-index.json</code> (and the Sia mirror at <code style="display:inline">s3.silentmode.st:8600</code>) with <code style="display:inline">If-None-Match</code> 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 <code style="display:inline">navigate.st/api/name/&lt;host&gt;</code> directly with a 5-second timeout and a 30-second LRU cache. Names registered <b>after</b> the last snapshot poll but <b>before</b> the next one now answer immediately instead of NXDOMAIN. Result: chipnet electrum flakiness ("<code style="display:inline">get_history</code> 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.</div>
<div class="file">
<div class="n"><a href="https://dl.silentmode.st/AriadneResolver-Setup-0.1.10.exe">AriadneResolver-Setup-0.1.10.exe</a> — ~24 MB</div>
<code>29710c4011dfe058a252f94af221c02593e728e89cc7427e3e01eaa530f8e526</code>
<div class="n"><a href="https://dl.silentmode.st/AriadneResolver-Setup-0.1.11.exe">AriadneResolver-Setup-0.1.11.exe</a> — ~24 MB</div>
<code>58ffb06424785973d2cd656e5122061ce10b53a8dcff55605c23b5699552ee75</code>
</div>
</div>