Argus � the BNS public gateway (navigate.st) and its library layer. Serves BCNR names over HTTPS, verifies signed records, mints TLDs.
Find a file
Local Dev 3c04f971a9 Theseus: warn before opening a name a blocklist flags
The blocklist consumer existed in the resolver library and the gateway, but
the browser opened a flagged name without comment. Now the indexer process
reads the subscribed lists from the chain every ten minutes and hands the
flags to main. A flagged name loads a warning page naming the reason, the
list and the report; the user may continue, and that is remembered per name.

Two gates, because content is reached two ways. loadBns shows the real
interstitial. serveBns refuses with an inline page on every path that skips
it: reload, back and forward, bns:// links, web app windows. The inline page
has no button, since a page at the site's own origin must not be able to
approve itself; only blocked.html may ask to continue, checked by file URL.

Settings › Naming has the policy: warn (default), never open, or ignore the
lists. The csam reason is never offered a way through. A list that cannot be
read keeps the last known flags and never stops a name from resolving.

The gateway put its own warning in front of flagged sites, which this
browser could not get past: it fetches files itself, with no cookie jar. It
now sends x-bns-policy: client and the gateway stays out of the way for a
client that says it decides for itself.

dev/blocklist-selftest.js runs the real protocol handler and decision
functions against a scratch profile.
2026-10-04 15:50:35 +02:00
contracts registry covenant v1: the contract that holds a name and enforces its lifecycle (draft) 2026-10-04 15:42:36 +02:00
setup Ariadne: keep the resolver running on battery 2026-10-03 13:08:13 +02:00
src Theseus: warn before opening a name a blocklist flags 2026-10-04 15:50:35 +02:00
test registry covenant v1: the contract that holds a name and enforces its lifecycle (draft) 2026-10-04 15:42:36 +02:00
.gitignore Initial commit — Silent Mode baseline (2026-07-29) 2026-07-29 13:54:34 +02:00
ariadne.config.json BNS: per-TLD on-chain registry, multi-beacon indexer, enforcement gate 2026-08-29 17:11:02 +02:00
BROWSER-PROMPT.md Initial commit — Silent Mode baseline (2026-07-29) 2026-07-29 13:54:34 +02:00
build-web.mjs Initial commit — Silent Mode baseline (2026-07-29) 2026-07-29 13:54:34 +02:00
DESIGN-collision-modes.md Resolver 3438d558: ASCII-clean install.ps1 + multi-TLD NRPT + VPS-first electrum 2026-07-31 23:09:23 +02:00
DESIGN-hosting-pact.md Initial commit — Silent Mode baseline (2026-07-29) 2026-07-29 13:54:34 +02:00
DESIGN-root-tld-cert.md Collision modes (BCNR/ICANN) + root TLD cert + VPS electrum-source indexer 2026-08-02 11:39:00 +02:00
ENGINE.md Initial commit — Silent Mode baseline (2026-07-29) 2026-07-29 13:54:34 +02:00
LICENSE Licenses: MPL-2.0 for Theseus, Ariadne and Hephaestus; Apache-2.0 for Argus; CC BY 4.0 for the documents 2026-09-29 00:18:00 +02:00
namespaces.pdf Initial commit — Silent Mode baseline (2026-07-29) 2026-07-29 13:54:34 +02:00
OPERATIONS-electrum.md Initial commit — Silent Mode baseline (2026-07-29) 2026-07-29 13:54:34 +02:00
package-lock.json BNS: per-TLD on-chain registry, multi-beacon indexer, enforcement gate 2026-08-29 17:11:02 +02:00
package.json Licenses: MPL-2.0 for Theseus, Ariadne and Hephaestus; Apache-2.0 for Argus; CC BY 4.0 for the documents 2026-09-29 00:18:00 +02:00
PROTOCOL.md bns: the blocklist consumer, shipped with an empty list 2026-10-04 02:32:58 +02:00
README.md Initial commit — Silent Mode baseline (2026-07-29) 2026-07-29 13:54:34 +02:00
ROADMAP.md Initial commit — Silent Mode baseline (2026-07-29) 2026-07-29 13:54:34 +02:00
sia-test.html Initial commit — Silent Mode baseline (2026-07-29) 2026-07-29 13:54:34 +02:00

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 builders
  • src/wallet-app.js — wallet + embedded resolver + browser UI (npm run wallet → http://localhost:4626)
  • src/register.js / src/update.js / src/resolve.js — CLI equivalents
  • wallets.json — chipnet seed phrases (TESTNET ONLY — never reuse for real funds)
  • src/lib/gen-wallets.js — one-time wallet generation (already run)

Setup

  1. npm install
  2. 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.
  3. npm run wallet and open http://localhost:4626

Standalone resolver daemon (make EVERY browser resolve .bch)

  • src/daemon/bnsd.js — DNS server (answers *.bch from 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, then node 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 .bch queries 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.
  • 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 hello with inline HTML (a website stored entirely on-chain), then type hello.bch in 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>"}' then node src/resolve.js hello