2026-08-29 22:00:37 +02:00
<!doctype html>
< html lang = "en" >
< head >
< meta charset = "utf-8" >
< meta name = "viewport" content = "width=device-width, initial-scale=1" >
< title > Docs — sirius.x< / title >
< meta name = "description" content = "How BCNR works: the TLD registry, name registration, records, resolver, and how to verify anything against the Bitcoin Cash chain." >
2026-08-31 05:40:47 +02:00
< link rel = "icon" href = "../assets/favicon.svg" type = "image/svg+xml" >
< link rel = "mask-icon" href = "../assets/favicon.svg" color = "#d6ff3d" >
2026-08-31 04:30:53 +02:00
< meta property = "og:type" content = "website" >
< meta property = "og:site_name" content = "sirius.x" >
< meta property = "og:title" content = "sirius.x docs — how BCNR works" >
< meta property = "og:description" content = "The TLD registry, name registration, records, resolver, mainnet pricing, and how to verify anything against the chain." >
< meta property = "og:url" content = "https://silentmode.st/sirius-x/docs/" >
sirius.x: /brand/ kit — logo, mono, avatar, banner, favicon, palette
brand/ ships every reusable mark plus a browseable kit page:
* logo.svg — full colour wordmark (star + sirius.x, .x in acid green)
* logo-mono.svg — currentColor version for print / one-colour merch
* favicon.svg — 64×64 rounded square, scales cleanly to 16×16
* avatar.svg — 512×512 square, hard corners (platforms round-mask)
* banner.svg — 1200×630 OG / Twitter Card canvas, crop-tolerant layout
* index.html — brand-kit page: asset previews + download links, full
colour palette with names/hex, typography sample, do/don't guidance,
MIT-attribution notice.
Nav: added 🎨 Brand link to every sirius.x page (landing, portal, docs,
theseus). og:image on every page updated to point at /brand/banner.svg
instead of the wordmark logo — social crawlers get a proper 1200×630
banner with title, tagline, and mark instead of a thin logo strip.
Kept /assets/favicon.svg and /assets/logo.svg in place so existing
external references (Nostr metadata, third-party embeds) don't break.
2026-08-31 05:44:25 +02:00
< meta property = "og:image" content = "https://silentmode.st/sirius-x/brand/banner.svg" >
2026-08-31 04:30:53 +02:00
< meta name = "twitter:card" content = "summary" >
2026-08-29 22:00:37 +02:00
< style >
:root{
--bg:#0b0e14; --panel:#141a24; --panel2:#18202c; --line:rgba(255,255,255,.09);
--ink:#e7eaf1; --mut:#8b98a9; --dim:#5e6678; --acid:#d6ff3d;
--ok:#4fd1a5; --warn:#ffc75f;
}
*{box-sizing:border-box}
html{scroll-behavior:smooth}
body{margin:0;background:radial-gradient(1100px 560px at 50% -12%,#16202e,var(--bg));
color:var(--ink);font:16px/1.65 system-ui,-apple-system,Segoe UI,Roboto,sans-serif;min-height:100vh}
a{color:var(--acid)}
.wrap{max-width:900px;margin:0 auto;padding:0 1.2rem}
.topnav{position:sticky;top:0;z-index:20;display:flex;gap:2px;align-items:center;flex-wrap:wrap;
padding:10px 1.2rem;background:rgba(11,14,20,.82);backdrop-filter:blur(10px);border-bottom:1px solid var(--line)}
.topnav .brand{font-weight:600;color:var(--ink);text-decoration:none;margin-right:14px;font-size:15px;letter-spacing:.2px}
.topnav .brand .g{color:var(--acid)}
.topnav a{color:var(--mut);text-decoration:none;padding:6px 12px;border-radius:8px;font-size:14px}
.topnav a:hover{color:var(--ink);background:var(--panel)}
.topnav a.here{color:var(--acid);background:rgba(214,255,61,.08)}
2026-08-29 22:22:37 +02:00
.topnav a.portal{margin-left:auto;background:rgba(214,255,61,.10);color:var(--acid);font-weight:500}
.topnav a.portal:hover{background:rgba(214,255,61,.18)}
2026-08-29 22:00:37 +02:00
header.hero{text-align:center;padding:4rem 1.2rem 1rem}
.mark{font-size:52px;line-height:1}
h1{font-size:clamp(1.8rem,4.8vw,2.5rem);margin:.4rem 0 .3rem}
h1 .g{color:var(--acid)}
.tag{color:var(--mut);font-size:1.05rem;max-width:660px;margin:0 auto}
/* Layout: TOC on the left on wide screens, content on the right. */
.doc-grid{display:grid;grid-template-columns:220px 1fr;gap:32px;margin-top:1.5rem}
@media (max-width:820px){ .doc-grid{grid-template-columns:1fr} }
.toc{position:sticky;top:60px;align-self:start;background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:14px 16px;font-size:14px}
.toc h4{margin:0 0 8px;color:var(--mut);font-size:12px;text-transform:uppercase;letter-spacing:.6px;font-weight:600}
.toc a{display:block;padding:5px 8px;border-radius:6px;color:var(--mut);text-decoration:none;font-size:13.5px}
.toc a:hover{background:var(--panel2);color:var(--ink)}
section{padding:1.6rem 0 2.4rem;border-top:1px solid var(--line);margin-top:1rem}
section:first-of-type{border-top:none;margin-top:0}
h2{font-size:1.35rem;margin:0 0 .5rem}
h3{font-size:1.05rem;margin:1.4rem 0 .35rem}
.lede{color:var(--mut);margin:0 0 1rem;max-width:720px}
ol.steps{counter-reset:s;list-style:none;padding:0;margin:1.2rem 0 0;display:grid;gap:10px}
ol.steps li{counter-increment:s;display:grid;grid-template-columns:30px 1fr;gap:14px;align-items:start;
background:var(--panel2);border:1px solid var(--line);border-radius:12px;padding:13px 16px}
ol.steps li::before{content:counter(s);grid-column:1;grid-row:1;
display:grid;place-items:center;width:24px;height:24px;border-radius:50%;
background:rgba(214,255,61,.14);color:var(--acid);font-size:12.5px;font-weight:700}
ol.steps li > *{grid-column:2;min-width:0}
ol.steps b{color:var(--ink)} ol.steps span{color:var(--mut);font-size:14px}
.note{background:var(--panel);border:1px solid var(--line);border-left:3px solid var(--acid);
border-radius:10px;padding:14px 18px;color:var(--mut);font-size:14px;margin-top:1.2rem}
.note.warn{border-left-color:var(--warn)}
.note b{color:var(--ink)}
code,.mono{background:#0e131b;border:1px solid var(--line);border-radius:6px;padding:1px 6px;font-family:ui-monospace,monospace;font-size:13px;word-break:break-all}
pre{background:#0e131b;border:1px solid var(--line);border-radius:10px;padding:12px 14px;overflow-x:auto;
font-family:ui-monospace,monospace;font-size:13px;color:var(--ink);margin:1rem 0}
table.pricing{width:100%;border-collapse:collapse;margin-top:1rem;font-size:14px}
table.pricing th,table.pricing td{padding:8px 12px;text-align:left;border-bottom:1px solid var(--line)}
table.pricing th{color:var(--mut);font-weight:500;font-size:12.5px;text-transform:uppercase;letter-spacing:.4px}
table.pricing td.price{font-family:ui-monospace,monospace;color:var(--acid);font-weight:600}
.verify dt{color:var(--mut);font-size:12.5px;text-transform:uppercase;letter-spacing:.3px;margin-top:10px}
.verify dt:first-of-type{margin-top:0}
.verify dd{margin:2px 0 0;font-family:ui-monospace,monospace;font-size:12.5px;word-break:break-all;color:var(--ink)}
footer{border-top:1px solid var(--line);padding:2rem 0 3rem;color:var(--dim);font-size:13px;text-align:center;margin-top:2.5rem}
< / style >
< / head >
< body >
< nav class = "topnav" >
< a class = "brand" href = "../" > ⭐ < span class = "g" > sirius.x< / span > < / a >
< a href = "../#try" > Try it< / a >
< a href = "./" class = "here" > 📚 Docs< / a >
< a href = "../theseus/" > 🧭 Theseus< / a >
2026-08-31 05:40:47 +02:00
< a href = "../#roadmap" > Roadmap< / a >
sirius.x: /brand/ kit — logo, mono, avatar, banner, favicon, palette
brand/ ships every reusable mark plus a browseable kit page:
* logo.svg — full colour wordmark (star + sirius.x, .x in acid green)
* logo-mono.svg — currentColor version for print / one-colour merch
* favicon.svg — 64×64 rounded square, scales cleanly to 16×16
* avatar.svg — 512×512 square, hard corners (platforms round-mask)
* banner.svg — 1200×630 OG / Twitter Card canvas, crop-tolerant layout
* index.html — brand-kit page: asset previews + download links, full
colour palette with names/hex, typography sample, do/don't guidance,
MIT-attribution notice.
Nav: added 🎨 Brand link to every sirius.x page (landing, portal, docs,
theseus). og:image on every page updated to point at /brand/banner.svg
instead of the wordmark logo — social crawlers get a proper 1200×630
banner with title, tagline, and mark instead of a thin logo strip.
Kept /assets/favicon.svg and /assets/logo.svg in place so existing
external references (Nostr metadata, third-party embeds) don't break.
2026-08-31 05:44:25 +02:00
< a href = "../brand/" > 🎨 Brand< / a >
2026-08-29 22:00:37 +02:00
< a href = "https://silentmode.st/" rel = "noopener" > Silent Mode ↗< / a >
2026-08-29 22:22:37 +02:00
< a href = "../portal.html" class = "portal" > 🔑 Sign in< / a >
2026-08-29 22:00:37 +02:00
< / nav >
< header class = "hero" >
< div class = "mark" > 📚< / div >
< h1 > sirius.x < span class = "g" > docs< / span > < / h1 >
< p class = "tag" > 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.< / p >
< / header >
< div class = "wrap" >
< div class = "doc-grid" >
< aside class = "toc" >
< h4 > Contents< / h4 >
< a href = "#tld-registry" > TLD registry< / a >
< a href = "#register-name" > Register a name< / a >
< a href = "#records" > Records & hosting< / a >
2026-08-31 14:56:27 +02:00
< a href = "#host" > Host your name< / a >
2026-08-29 22:00:37 +02:00
< a href = "#resolver" > Resolver / gateway< / a >
< a href = "#pricing" > Pricing (mainnet)< / a >
< a href = "#tracker" > Tracker & mirrors< / a >
< a href = "#verify" > Verify anything< / a >
< a href = "#runbook" > Operator runbook< / a >
< / aside >
< div >
< section id = "tld-registry" >
< h2 > The TLD registry< / h2 >
< p class = "lede" > Every BCNR name lives under a < b > top-level domain< / b > 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.< / p >
< p class = "lede" > Fourteen public TLDs on chipnet today (2026-08-29):
< code > bch p2p bit nav test x asm neo gt sc sia dex cex nt< / code > . The current list and
per-TLD categories are at
< a href = "https://silentmode.st/tlds/" > silentmode.st/tlds/< / a > .< / p >
< div class = "note" > < b > Why per-TLD certs, not a single list.< / b > Without a registry, anyone
could quietly declare a TLD against the same beacon by minting a name under it. That
leaves resolvers in silent disagreement. Per-TLD certificates make the TLD set itself
something the chain records, so every resolver sees the same list — and TLDs become
ownable assets that can carry policy, fees, and governance of their own.< / div >
< / section >
< section id = "register-name" >
< h2 > Register a name — end to end< / h2 >
< p class = "lede" > 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.< / p >
< ol class = "steps" >
< li > < b > Search a label across every TLD.< / b >
< span > The registrar fans out to every TLD in the registry in parallel and shows
available / taken per row. Available names appear first.< / span > < / li >
< li > < b > Create or connect a wallet.< / b >
< span > Built-in browser wallet (PBKDF2 → AES-GCM in localStorage) or WizardConnect to
Cashonize / Paytaca — both mint to the buyer's own key.< / span > < / li >
< li > < b > Confirm the price.< / b >
< span > Miner fee + beacon dust + certificate dust + service fee. Chipnet placeholder
is 10,000 sat; real pricing is a mainnet decision.< / span > < / li >
< li > < b > The certificate lands in your wallet.< / b >
< span > The name resolves the moment the transaction confirms. Records can be set or
changed later — only your key can sign a UPD.< / span > < / li >
< / ol >
< / section >
< section id = "records" >
< h2 > Records & hosting< / h2 >
< p class = "lede" > A registered name carries a small JSON records object. Every record is
optional and multiple can coexist. Priority order the gateway uses:
< code > h< / code > (inline HTML) → < code > s3< / code > (Sia bucket key) → < code > ip< / code >
(host header served by an IP) → < code > u< / code > (redirect).< / p >
< table class = "pricing" >
< thead > < tr > < th > Record< / th > < th > Meaning< / th > < th > Typical use< / th > < / tr > < / thead >
< tbody >
< tr > < td > < code > h< / code > < / td > < td > Inline HTML in the OP_RETURN payload itself< / td > < td > Tiny sites, a profile, a link hub< / td > < / tr >
< tr > < td > < code > s3< / code > < / td > < td > A Sia bucket key (with auto-index for directory-style)< / td > < td > Multi-file sites, permanent hosting< / td > < / tr >
< tr > < td > < code > ip< / code > < / td > < td > An IPv4 address + optional < code > tls< / code > fingerprint< / td > < td > Your own server, apps behind an IP< / td > < / tr >
< tr > < td > < code > u< / code > < / td > < td > Redirect URL< / td > < td > Short-form redirects to any web host< / td > < / tr >
< tr > < td > < code > tls< / code > < / td > < td > SHA-256 fingerprint of the leaf cert served at < code > ip< / code > < / td > < td > Chain-pinned TLS trust, no OS root store needed< / td > < / tr >
< tr > < td > < code > np< / code > , < code > nr< / code > < / td > < td > Nostr pubkey + relay list< / td > < td > Hermes / NIP-17 messaging bound to the name< / td > < / tr >
< tr > < td > < code > el< / code > < / td > < td > Space-separated electrum server list< / td > < td > On-chain-updatable resolver bootstrap< / td > < / tr >
< / tbody >
< / table >
< p class = "lede" style = "margin-top:1rem" > Subdomains inherit from their parent with a slight
priority tweak: for a subdomain query, < code > ip< / code > beats < code > s3< / code >
(Host-header semantics). Full rule is in < code > Argus/src/lib/record-picker.js< / code > .< / p >
< / section >
2026-08-31 14:56:27 +02:00
< section id = "host" >
< h2 > Host your name< / h2 >
< p class = "lede" > The end-to-end recipe for putting a static site under a BCNR name. Chipnet
today, mainnet later — the shape is the same. Three ways to host, most people combine
two of them (Sia + VPS mirror) so the site keeps serving if either mirror goes down.< / p >
< h3 > Pattern A — Sia only< / h3 >
< p class = "lede" > Simplest. Site lives on the Sia storage network, name's < code > s3< / code > record
points at the bucket key, gateways (navigate.st, silentmode.st, any BCNR-aware browser)
fetch it on demand. Same pattern < code > silentmode.bch< / code > uses.< / p >
< pre > # From a checkout with sia-s3.json credentials:
node Argus/src/lib/sia-upload.js ./my-site bns/myname/
# Set the chain record (once). Note the trailing slash — enables auto-index
# so /myname/ serves myname/index.html and /myname/about/ serves .../about/index.html.
node Argus/src/update.js myname.x '{"s3":"bns/myname/"}'< / pre >
< p class = "lede" > Bucket-path convention: < code > bns/< label> /< / code > (no TLD; the label is
unique enough within our Sia namespace and keeps game.x + game.bch from colliding). Files
update by re-running sia-upload; the chain record only changes when the bucket path does.< / p >
< h3 > Pattern B — Your own server (VPS + < code > ip< / code > )< / h3 >
< p class = "lede" > Point the name at an IP; every request goes directly to your box. Add a
< code > tls< / code > record with the SHA-256 of the leaf certificate so browsers verify the
connection against the chain instead of the OS trust store.< / p >
< pre > # On your VPS: nginx serves your site over TLS. Then, on chain:
node Argus/src/update.js myname.x '{"ip":"1.2.3.4","tls":"< sha256-of-leaf-cert> "}'< / pre >
< h3 > Pattern C — Dual host (Sia primary, VPS mirror)< / h3 >
< p class = "lede" > What sirius.x itself uses. Sia is the chain-authoritative source (survives
if the VPS is down); the VPS serves the same content on < code > silentmode.st/< path> < / code >
for users without a BCNR resolver installed. On the VPS side, extend the nginx vhost
serving < code > silentmode.st< / code > with a new < code > location< / code > block that aliases
straight from disk:< / p >
< pre > location /myname-x/ {
alias /opt/silent-mode/site-myname-x/;
index index.html;
try_files $uri $uri/ =404;
}< / pre >
< p class = "lede" > Then rsync / scp your site tree to < code > silentmode:/opt/silent-mode/site-myname-x/< / code >
and reload nginx. This gives you two URLs for the same content:
< code > https://silentmode.st/myname-x/< / code > (VPS-direct) and the chain-authoritative
< code > https://myname.x/< / code > via any BCNR resolver.< / p >
2026-09-04 23:44:10 +02:00
< h3 > The dual-host recipe, end to end< / h3 >
< p class = "lede" > This is the exact sequence sirius.x itself uses on every publish. The
chain record stays constant; only file contents change, so no per-publish UPD is
needed.< / p >
< ol class = "steps" >
< li > < b > Edit locally.< / b >
< span > Site source lives at < code > site-myname-x/< / code > in your working repo. Any
static generator works (or plain HTML) — the deploy is content-agnostic.< / span > < / li >
< li > < b > Push VPS mirror (fast path).< / b >
< span > Serves at < code > silentmode.st/myname-x/< / code > within seconds. Users without a
BCNR resolver hit this route.
< pre > scp -r site-myname-x/* silentmode:/opt/silent-mode/site-myname-x/< / pre > < / span > < / li >
< li > < b > Push Sia mirror (durable copy).< / b >
< span > Serves at < code > sirius.x/< / code > via any BCNR gateway. Survives VPS outage.
< pre > node Argus/src/lib/sia-upload.js site-myname-x/ bns/myname/< / pre > < / span > < / li >
< li > < b > Verify both.< / b >
< span > < code > curl -so /dev/null -w "%{http_code}\n" https://silentmode.st/myname-x/< / code >
and < code > curl -so /dev/null -w "%{http_code}\n" https://silentmode.st/bns/myname.x/< / code >
— both should return 200.< / span > < / li >
< / ol >
< h3 > Auto-backup: one command, both mirrors< / h3 >
< p class = "lede" > Wrap the two commands into a script so every publish reaches both mirrors
without extra thought. This is exactly what a two-liner deploy hook looks like:< / p >
< pre > # scripts/deploy-myname-x.sh
#!/usr/bin/env bash
set -eu
SRC="$(dirname "$0")/../site-myname-x"
VPS_DEST="silentmode:/opt/silent-mode/site-myname-x/"
SIA_BUCKET="bns/myname/"
echo "→ VPS mirror"
scp -qr "$SRC"/. "$VPS_DEST"
echo "→ Sia mirror"
node "$(dirname "$0")/../Argus/src/lib/sia-upload.js" "$SRC" "$SIA_BUCKET"
echo "✓ deployed; verifying"
for url in "https://silentmode.st/myname-x/" "https://silentmode.st/bns/myname.x/"; do
code=$(curl -so /dev/null -w '%{http_code}' "$url")
printf ' %s → %s\n' "$url" "$code"
done< / pre >
< p class = "lede" > Wire it into git: < code > chmod +x scripts/deploy-myname-x.sh< / code > , add a
< code > .git/hooks/post-commit< / code > that runs it if the site subtree changed, or invoke
manually. Sia uploads that fail (network hiccup, quota) leave the VPS mirror ahead until
the next run — same failure mode as any staged deploy.< / p >
< h3 > Automate the reverse — VPS → Sia periodic backup< / h3 >
< p class = "lede" > If your primary publish path is straight-to-VPS (nginx-direct, no Sia
step per publish), a cron job can pull the VPS state and push to Sia on a schedule:< / p >
< pre > # /etc/cron.d/sirius-x-sia-backup (on the operator's VPS)
17 * * * * root cd /opt/silent-mode & & node Argus/src/lib/sia-upload.js \
/opt/silent-mode/site-myname-x/ bns/myname/ > /var/log/sia-backup.log 2> & 1< / pre >
< p class = "lede" > Runs hourly at :17 (offset from the top of the hour so it doesn't collide
with everyone else's cron traffic). The tradeoff: up to an hour of drift between VPS
and Sia after a publish — usually fine, since the chain record still resolves
correctly either way and BCNR gateways cache Sia content.< / p >
< div class = "note" > < b > Which mirror is authoritative?< / b > The one your chain record points
at. If < code > s3< / code > is set, gateways fetch from Sia; the VPS mirror is just a
convenience URL. If only < code > ip< / code > is set, gateways fetch from the VPS; Sia is
just backup. If BOTH are set, gateways pick per the priority in the "Records" section
(subdomain-aware; see < code > record-picker.js< / code > ). Set both for durability, but be
deliberate about which is primary.< / div >
2026-08-31 14:56:27 +02:00
< h3 > Verify records changed correctly< / h3 >
< pre > 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, 'myname.x'));
process.exit(0);"< / pre >
< div class = "note" > < b > Credentials.< / b > Sia upload needs < code > Argus/sia-s3.json< / code > . VPS
deploy needs SSH to the operator's box. Neither is in the repo — a session that isn't
run by the operator will need those handed over out-of-band. Full command reference is in
< a href = "INSTRUCTIONS.md" > INSTRUCTIONS.md< / a > , especially §5 (Sia storage) and §6
(deploy).< / div >
< / section >
2026-08-29 22:00:37 +02:00
< section id = "resolver" >
< h2 > Resolver / gateway< / h2 >
< p class = "lede" > Three paths, same chain data. Anyone can pick.< / p >
< ol class = "steps" >
< li > < b > Local — Ariadne Resolver.< / b >
< span > A system-wide resolver that intercepts BCNR TLDs and answers them from the
chain. Any browser you already use starts opening < code > .bch< / code > URLs directly.
Installs a local root CA for TLS.
< a href = "../theseus/" > Download →< / a > < / span > < / li >
< li > < b > In-browser — Theseus Navigator.< / b >
< span > A Chromium build with the resolver baked in, plus an on-chain TLS trust anchor.
No OS trust-store install; nothing modified globally.
< a href = "../theseus/" > Download →< / a > < / span > < / li >
< li > < b > Public gateway — navigate.st.< / b >
< span > For anyone without the resolver installed:
< code > https://navigate.st/bns/< name> /< / code > proxies through a hosted resolver.
Same content, fewer guarantees — trust the gateway to fetch honestly, or run one of
the first two.< / span > < / li >
< / ol >
< / section >
< section id = "pricing" >
< h2 > Pricing (mainnet)< / h2 >
< p class = "lede" > 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 < b > one-time< / b > — a TLD is closer to a domain purchase
than a lease.< / p >
< table class = "pricing" >
< thead > < tr > < th > Label length< / th > < th > Floor (USD)< / th > < th > Notes< / th > < / tr > < / thead >
< tbody >
< tr > < td > 1 char< / td > < td class = "price" > 100,000< / td > < td > Effectively unique; ENS-like scarcity< / td > < / tr >
< tr > < td > 2 char< / td > < td class = "price" > 50,000< / td > < td > The < code > .ai< / code > / < code > .io< / code > tier< / td > < / tr >
< tr > < td > 3 char< / td > < td class = "price" > 15,000< / td > < td > Order of magnitude below ICANN's $185k application floor< / td > < / tr >
< tr > < td > 4 char< / td > < td class = "price" > 5,000< / td > < td > Floor for short but reasonable TLDs< / td > < / tr >
< tr > < td > 5– 8 char< / td > < td class = "price" > 1,000< / td > < td > Bulk-registerable but not spam< / td > < / tr >
< tr > < td > 9+ char< / td > < td class = "price" > 250< / td > < td > Descriptive TLDs, low economic gravity< / td > < / tr >
< / tbody >
< / table >
< p class = "lede" style = "margin-top:1rem" > On < b > name registration under a TLD< / b > , the TLD's
owner collects a share (< code > fee_bps< / code > , default 5%, cap 50%). Chain-enforced when
the TLD's policy is < code > covenant< / code > ; honour-system otherwise. Name registration is
yearly and priced separately.< / p >
< / section >
< section id = "tracker" >
< h2 > Tracker & mirrors< / h2 >
< p class = "lede" > 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 < b > root< / b > hash anyone can recompute
locally — a lying mirror is caught by any recipient who bothers to check.< / p >
< p class = "lede" > A conforming client falls through: (1) fetch snapshot from a mirror,
(2) verify < code > root< / code > , (3) if suspicious, walk the beacon and rebuild. All three
yield the same list for any given block height.< / p >
< / section >
< section id = "verify" >
< h2 > Verify anything< / h2 >
< p class = "lede" > 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.< / p >
< h3 > Confirm a specific name on chain< / h3 >
< pre > 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);"< / pre >
< h3 > Fetch the operator-signed TLD snapshot from Nostr< / h3 >
< dl class = "verify" >
< dt > Kind / d-tag< / dt >
< dd > 30078 / bns-tld-list< / dd >
< dt > Pubkey (x-only, hex)< / dt >
< dd > f2c925194c531c7c398017e35b2396df64a61a613aa5fadebdf1f4990f2267f4< / dd >
< dt > Relays< / dt >
< dd > wss://nos.lol · wss://relay.damus.io< / dd >
< / dl >
< h3 > Reach any site via more than one route< / h3 >
< p class = "lede" > Same content should be served from at least two independent paths:< / p >
< ul style = "color:var(--mut);font-size:14px;margin:.6rem 0 0;padding-left:1.2rem" >
< li > Direct BCNR: < code > https://< name> /< / code > (requires local resolver + CA)< / li >
< li > Public gateway: < code > https://navigate.st/bns/< name> /< / code > < / li >
< li > silentmode.st mirror: < code > https://silentmode.st/bns/< name> /< / code > < / li >
< li > Direct from Sia (content-addressed) via the name's < code > s3< / code > record< / li >
< / ul >
< / section >
< section id = "runbook" >
< h2 > Operator runbook< / h2 >
< p class = "lede" > These docs describe < i > what< / i > . The < i > how< / i > — exact bash commands to
register TLDs, mint names, update records, and deploy — is
2026-08-31 14:56:27 +02:00
< code > INSTRUCTIONS.md< / code > . Three ways to read it, in order of "how much do I already
have installed":< / p >
< ol class = "steps" >
< li > < b > Just read it in the browser< / b >
< span > Served straight from the docs directory:
< a href = "INSTRUCTIONS.md" > /sirius-x/docs/INSTRUCTIONS.md< / a > . Plain text; every
browser renders it.< / span > < / li >
< li > < b > Clone the git remote< / b >
< span > < code > git clone https://silentmode.st/sirius-x/repo/silent-mode.git< / code > — dumb-HTTP,
no auth. Get the whole tree, browse offline, run the scripts.< / span > < / li >
< li > < b > Browse the Forgejo mirror< / b >
2026-08-31 15:22:45 +02:00
< span > Repo lives at
< a href = "https://code.silentmode.st/silentmode/sirius" > code.silentmode.st/silentmode/sirius< / a >
on the Silent Mode Hephaestus forge. Rendered runbook:
< a href = "https://code.silentmode.st/silentmode/sirius/src/branch/master/docs/INSTRUCTIONS.md" > docs/INSTRUCTIONS.md< / a > .
Clone: < code > git clone https://code.silentmode.st/silentmode/sirius.git< / code > — public,
no auth.< / span > < / li >
2026-08-31 14:56:27 +02:00
< / ol >
2026-08-29 22:00:37 +02:00
< p class = "lede" > The runbook covers CLI name registration, TLD-registry seeding, record
2026-08-31 14:56:27 +02:00
updates, Sia upload, VPS deploy, tests, and the historically-costly gotchas.< / p >
2026-08-29 22:00:37 +02:00
< / section >
< / div >
< / div >
< / div >
< footer >
Documentation for BCNR + the sirius.x stack ·
< a href = "../" > back to sirius.x< / a > ·
< a href = "https://silentmode.st/tlds/" > TLD registry snapshot< / a > ·
< a href = "https://silentmode.st/sirius/register.html" > register a name< / a >
< / footer >
< / body >
< / html >