Migration step 3 (DESIGN-bns-indexer-service.md). Ariadne's Thread now owns BNS indexing on the machine, so Theseus no longer runs a second electrum indexer beside it. bns-indexer.js keeps its process and its messages to main.js, but inside it is now an index host on the shared source chain: - Ariadne's indexer over its pipe, trusted only after ariadne-helper.exe has checked the server process on that connection (found through Ariadne's uninstall key), then pushes; - the local copies: Ariadne's files for both scopes, Theseus's own raw copy, the bundled one. The richest wins. - Theseus's own index copy, written from the pipe data. The shared core runs as Theseus's own indexer only while Ariadne is unhealthy. That means: no pipe 4 s after launch, a pipe that fails the check, a pipe that went silent, or an index not confirmed for 10 min while Ariadne is not paused. The own indexer warm-starts from Ariadne's snapshot, so there is no download and no cold sync. It hands back after 90 s of health, so a flapping service does not start and stop it. Economy is not a failure and never triggers a takeover. With no checkable Ariadne (portable, not installed, older than the pipe) the own indexer starts at once, as in 0.3.70. The one thing Theseus does on Ariadne's side is run the indexer's task at launch when "Launch at start" is off. main.js passes the shared module paths (packaged as .mjs, which is why the shared modules no longer import each other) and keeps the host's status. The Ariadne panel takes its state from the indexer task when one exists, and the sub-page says where Theseus's names come from. |
||
|---|---|---|
| contracts | ||
| setup | ||
| src | ||
| test | ||
| .gitignore | ||
| ariadne.config.json | ||
| BROWSER-PROMPT.md | ||
| build-web.mjs | ||
| DESIGN-collision-modes.md | ||
| DESIGN-hosting-pact.md | ||
| DESIGN-root-tld-cert.md | ||
| ENGINE.md | ||
| LICENSE | ||
| namespaces.pdf | ||
| OPERATIONS-electrum.md | ||
| package-lock.json | ||
| package.json | ||
| PROTOCOL.md | ||
| README.md | ||
| ROADMAP.md | ||
| sia-test.html | ||
BNS — Namecoin-style decentralized names on Bitcoin Cash (chipnet)
A working prototype of "Option 3": names are CashTokens name certificates on the BCH chain (no fork, no sidechain), records ride in OP_RETURN, discovery via a beacon address, and the resolver is embedded in a wallet app with a built-in browser pane — the Brave/MetaMask-browser architecture in miniature.
See PROTOCOL.md for the on-chain design and its honest limitations.
Layout
src/lib/bns.js— protocol core: payload codec, chain indexer/resolver, tx builderssrc/wallet-app.js— wallet + embedded resolver + browser UI (npm run wallet→ http://localhost:4626)src/register.js/src/update.js/src/resolve.js— CLI equivalentswallets.json— chipnet seed phrases (TESTNET ONLY — never reuse for real funds)src/lib/gen-wallets.js— one-time wallet generation (already run)
Setup
npm install- Fund the wallet with free chipnet tBCH: go to https://tbch.googol.cash/,
paste the wallet address (shown in the app sidebar or by
node src/lib/gen-wallets.js), pick chipnet, solve the captcha. ~0.001 tBCH funds hundreds of registrations. npm run walletand open http://localhost:4626
Standalone resolver daemon (make EVERY browser resolve .bch)
src/daemon/bnsd.js— DNS server (answers*.bchfrom the chain, forwards everything else upstream) + HTTP gateway that serves on-chain sites by Host header. Test unprivileged:node src/daemon/bnsd.js --dns-port 5354 --http-port 8081, thennode src/daemon/dig.js hello.bch.setup/install.ps1— run from an elevated PowerShell. Installs the daemon as a boot-time scheduled task (SYSTEM, auto-restart) and wires the OS to it:- default (
-Mode nrpt): adds an NRPT rule so only.bchqueries reach the daemon; all other DNS is untouched. -Mode full: points every adapter's DNS at 127.0.0.1 (daemon forwards non-.bch upstream, ncdns-style); original servers are saved and restored on uninstall.
- default (
setup/uninstall.ps1— reverses everything (rule/adapters/task).
HTTPS for .bch: the "BNS Local Root CA" (created on demand in ca/, keep
root-ca.key private) signs per-name certs. The daemon's :443 gateway mints
them on the fly for locally-served names; node src/lib/issue-cert.js <name>
issues one for a real server (see the coinspectrum.bch nginx vhost). The
installer trusts the root machine-wide and enables Firefox's
enterprise-roots policy; cert fingerprints are published in "tls" chain
records for pinning.
Caveats: browsers with "secure DNS" (DoH) enabled bypass the OS resolver — disable it or add an exception; ports 53/80/443 must be free.
Try it
- Register
hellowith inline HTML (a website stored entirely on-chain), then typehello.bchin the address bar — the app resolves it from the blockchain (not DNS) and renders it. - Or CLI:
node src/register.js hello '{"h":"<h1>Served from the BCH chain</h1>"}'thennode src/resolve.js hello