How the pieces fit together: the TLD registry, name registration, records that tell the resolver where a site lives, the resolver itself, and how anyone can verify anything against the chain.
Every BCNR name lives under a top-level domain whose certificate is itself a first-class token on the Bitcoin Cash chain โ an NFT with the TLD label as its commitment, paying dust to a dedicated TLD-registry beacon. That certificate is the on-chain proof the TLD exists, and once enforcement ships, it is what makes any second-level name under it valid to conforming resolvers.
Fourteen public TLDs on chipnet today (2026-08-29):
bch p2p bit nav test x asm neo gt sc sia dex cex nt. The current list and
per-TLD categories are at
silentmode.st/tlds/.
The buyer's certificate mints straight to a wallet they control, in one transaction that also publishes the initial records and pays the beacon. Nobody including the operator can take the name back โ the covenant work in progress adds an expiry / reclaim clock but does not change who controls the key.
A registered name carries a small JSON records object. Every record is
optional and multiple can coexist. Priority order the gateway uses:
h (inline HTML) โ s3 (Sia bucket key) โ ip
(host header served by an IP) โ u (redirect).
| Record | Meaning | Typical use |
|---|---|---|
h | Inline HTML in the OP_RETURN payload itself | Tiny sites, a profile, a link hub |
s3 | A Sia bucket key (with auto-index for directory-style) | Multi-file sites, permanent hosting |
ip | An IPv4 address + optional tls fingerprint | Your own server, apps behind an IP |
u | Redirect URL | Short-form redirects to any web host |
tls | SHA-256 fingerprint of the leaf cert served at ip | Chain-pinned TLS trust, no OS root store needed |
np, nr | Nostr pubkey + relay list | Hermes / NIP-17 messaging bound to the name |
el | Space-separated electrum server list | On-chain-updatable resolver bootstrap |
Subdomains inherit from their parent with a slight
priority tweak: for a subdomain query, ip beats s3
(Host-header semantics). Full rule is in Argus/src/lib/record-picker.js.
Three paths, same chain data. Anyone can pick.
.bch URLs directly.
Installs a local root CA for TLS.
Download โhttps://navigate.st/bns/<name>/ proxies through a hosted resolver.
Same content, fewer guarantees โ trust the gateway to fetch honestly, or run one of
the first two.On mainnet the covenant enforces USD-denominated floors, tiered by TLD label length. This is what keeps someone from land-grabbing every ICANN TLD in one afternoon. TLD registration is one-time โ a TLD is closer to a domain purchase than a lease.
| Label length | Floor (USD) | Notes |
|---|---|---|
| 1 char | 100,000 | Effectively unique; ENS-like scarcity |
| 2 char | 50,000 | The .ai / .io tier |
| 3 char | 15,000 | Order of magnitude below ICANN's $185k application floor |
| 4 char | 5,000 | Floor for short but reasonable TLDs |
| 5โ8 char | 1,000 | Bulk-registerable but not spam |
| 9+ char | 250 | Descriptive TLDs, low economic gravity |
On name registration under a TLD, the TLD's
owner collects a share (fee_bps, default 5%, cap 50%). Chain-enforced when
the TLD's policy is covenant; honour-system otherwise. Name registration is
yearly and priced separately.
A tracker publishes signed snapshots of the TLD registry to Sia and Nostr so downstream clients don't have to walk the chain themselves. The chain is authoritative; the tracker is speed. Every snapshot carries a root hash anyone can recompute locally โ a lying mirror is caught by any recipient who bothers to check.
A conforming client falls through: (1) fetch snapshot from a mirror,
(2) verify root, (3) if suspicious, walk the beacon and rebuild. All three
yield the same list for any given block height.
You do not have to trust that sirius.x, silentmode.st, or navigate.st are serving honest content. Every name's certificate is on chain; every record is a signed on-chain payload; every host is checkable independently.
node --input-type=module -e "
import { loadWallet } from './Argus/src/lib/wallet.js';
import { resolveName } from './Argus/src/lib/bns.js';
const w = await loadWallet('main');
console.log(await resolveName(w.provider, 'sirius.x'));
process.exit(0);"
Same content should be served from at least two independent paths:
https://<name>/ (requires local resolver + CA)https://navigate.st/bns/<name>/https://silentmode.st/bns/<name>/s3 recordThese docs describe what. The how โ exact bash commands to
register TLDs, mint names, update records, and deploy โ is
INSTRUCTIONS.md in the project repo. Clone the repo to read it:
git clone https://silentmode.st/sirius-x/repo/silent-mode.git cat silent-mode/INSTRUCTIONS.md
The runbook covers CLI name registration, TLD-registry seeding, record updates, Sia upload, tests, and the historically-costly gotchas.