60 lines
3 KiB
Markdown
60 lines
3 KiB
Markdown
|
|
# 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](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`
|