Register the name (chipnet), upload the page to Sia, mirror on VPS. Content
consolidates existing docs (silentmode.st/tlds/, INSTRUCTIONS.md) into one
canonical entry point and names the deferred pieces — wallet portal, Sirius
Studio site editor, decentralized git remote — as roadmap items.
* name: sirius.x, REG txid 15bec52981fa82f9fa1c966600204112b7478a821f8384e0c8fecaea375215e9
* records set via UPD: {"s3":"bns/sirius.x/"}
* mirrors live: https://silentmode.st/sirius-x/ (VPS, immediate) and Sia
bucket bns/sirius.x/ (BCNR route via navigate.st/bns/sirius.x/ pending
Sia propagation to the gateway's s3d)
261 lines
15 KiB
HTML
261 lines
15 KiB
HTML
<!doctype html>
|
||
<html lang="en">
|
||
<head>
|
||
<meta charset="utf-8">
|
||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||
<title>sirius.x — the home for names on Bitcoin Cash</title>
|
||
<meta name="description" content="sirius.x is the operator-run entry point for BCNR: register a top-level domain, register a name under one, look up records, verify anything against the chain. Backed by Sia storage, mirrored on the operator's VPS, name published on the chain.">
|
||
<style>
|
||
:root{
|
||
--bg:#0b0e14; --panel:#141a24; --panel2:#18202c; --line:rgba(255,255,255,.09);
|
||
--ink:#e7eaf1; --mut:#8b98a9; --dim:#5e6678; --acid:#d6ff3d;
|
||
--chain:#d6ff3d; --sia:#b39ddb; --srv:#4fd1a5; --ok:#4fd1a5; --taken:#f6768a;
|
||
--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:980px;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)}
|
||
header.hero{text-align:center;padding:5rem 1.2rem 1rem}
|
||
.mark{font-size:56px;line-height:1}
|
||
h1{font-size:clamp(2rem,5.5vw,2.9rem);margin:.4rem 0 .3rem}
|
||
h1 .g{color:var(--acid)}
|
||
.tag{color:var(--mut);font-size:1.05rem;max-width:660px;margin:0 auto}
|
||
.cta{margin-top:1.8rem;display:flex;gap:10px;justify-content:center;flex-wrap:wrap}
|
||
.btn{display:inline-block;text-decoration:none;padding:11px 20px;border-radius:10px;background:#4b7bec;color:#fff;font-size:14px;border:none;cursor:pointer;font-family:inherit;transition:filter .1s}
|
||
.btn.ghost{background:transparent;border:1px solid var(--line);color:var(--ink)}
|
||
.btn.acid{background:var(--acid);color:#0b0e14;font-weight:600}
|
||
.btn:hover{filter:brightness(1.12)}
|
||
section{padding:2.6rem 0;border-top:1px solid var(--line);margin-top:2.5rem}
|
||
section:first-of-type{border-top:none;margin-top:1.5rem}
|
||
h2{font-size:1.5rem;margin:0 0 .4rem}
|
||
h3{font-size:1.1rem;margin:0 0 .35rem}
|
||
.lede{color:var(--mut);margin:0 0 1.6rem;max-width:720px}
|
||
.grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:14px}
|
||
.card{background:var(--panel);border:1px solid var(--line);border-radius:14px;padding:18px 20px}
|
||
.card h3{margin:0 0 .5rem;display:flex;align-items:center;gap:8px}
|
||
.card p{margin:0;color:var(--mut);font-size:14px}
|
||
.card .cta{margin-top:14px;justify-content:flex-start}
|
||
.dot{width:9px;height:9px;border-radius:50%;display:inline-block}
|
||
.d-chain{background:var(--chain)} .d-sia{background:var(--sia)} .d-srv{background:var(--srv)}
|
||
.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.4rem}
|
||
.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}
|
||
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}
|
||
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}
|
||
.pill{display:inline-block;font-size:11px;padding:2px 8px;border-radius:999px;background:rgba(255,255,255,.07);color:var(--dim);margin-left:8px;vertical-align:middle;font-weight:500}
|
||
.pill.soon{background:rgba(214,255,61,.13);color:var(--acid)}
|
||
.verify dt{color:var(--mut);font-size:12.5px;text-transform:uppercase;letter-spacing:.3px;margin-top:12px}
|
||
.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:2.4rem 0 3.5rem;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="#docs">Docs</a>
|
||
<a href="#roadmap">Roadmap</a>
|
||
<a href="#verify">Verify</a>
|
||
<a href="https://silentmode.st/" rel="noopener">Silent Mode ↗</a>
|
||
</nav>
|
||
|
||
<header class="hero">
|
||
<div class="mark">⭐</div>
|
||
<h1>Names on the <span class="g">chain</span>.</h1>
|
||
<p class="tag">sirius.x is the entry point for BCNR — Bitcoin Cash Name Registry.
|
||
Register a top-level domain, register a name under one, look up records,
|
||
verify anything against the chain. Backed by Sia storage, mirrored on the
|
||
operator's VPS, name published on chain — this page survives if any single
|
||
mirror goes down.</p>
|
||
<div class="cta">
|
||
<a class="btn acid" href="#try">Get started</a>
|
||
<a class="btn ghost" href="#docs">Read the docs</a>
|
||
</div>
|
||
</header>
|
||
|
||
<div class="wrap">
|
||
|
||
<section id="try">
|
||
<h2>Try it</h2>
|
||
<p class="lede">Three things you can do right now. The registrar and TLD-registry UIs live at
|
||
silentmode.st today; sirius.x is the canonical home and will consolidate them here.</p>
|
||
<div class="grid">
|
||
<div class="card">
|
||
<h3><span class="dot d-chain"></span> Register a name</h3>
|
||
<p>Pick a label, search across every TLD in the registry at once, mint the name
|
||
certificate straight into your own wallet. A few cents in chain fees, no yearly renewal.</p>
|
||
<div class="cta"><a class="btn acid" href="https://silentmode.st/sirius/register.html">Search a name →</a></div>
|
||
</div>
|
||
<div class="card">
|
||
<h3><span class="dot d-chain"></span> Register a TLD</h3>
|
||
<p>Under the per-TLD registry, a TLD is itself a certificate on the chain. Public mints
|
||
are operator-gated today; propose one below.</p>
|
||
<div class="cta"><a class="btn ghost" href="#request-tld">Propose a TLD →</a></div>
|
||
</div>
|
||
<div class="card">
|
||
<h3><span class="dot d-sia"></span> Look up & verify</h3>
|
||
<p>Resolve any BCNR name, compare records across mirrors, and check the TLD registry snapshot
|
||
against the chain. Everything is publicly verifiable.</p>
|
||
<div class="cta"><a class="btn ghost" href="#verify">How to verify →</a></div>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
|
||
<section id="docs">
|
||
<h2>Documentation</h2>
|
||
<p class="lede">The BCNR protocol, the TLD registry, and the wallet/registrar layer — in that order.
|
||
Everything is user-runnable; nothing here requires trusting a server.</p>
|
||
|
||
<h3 style="margin-top:1.4rem">The TLD registry</h3>
|
||
<p class="lede">Under the current design, every second-level name lives beneath a TLD whose
|
||
certificate exists on chain. No TLD cert → no valid name. The full model, current TLD list, and
|
||
verification paths are documented at
|
||
<a href="https://silentmode.st/tlds/" rel="noopener">silentmode.st/tlds/</a>. Fifteen TLDs
|
||
currently minted on chipnet: <code>bch p2p bit nav test x asm neo gt sc sia com dex cex nt</code>
|
||
(<code>.com</code> is held by the operator, not offered for public registration).</p>
|
||
|
||
<h3 style="margin-top:1.4rem">Register a name — end to end</h3>
|
||
<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 all TLDs in the
|
||
registry in parallel and shows available / taken / held per row.</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>
|
||
|
||
<h3 style="margin-top:1.4rem">Records — where a name points</h3>
|
||
<p class="lede">A registered name carries a small JSON records object. Every record is optional;
|
||
multiple can coexist. The gateway picks in order: <code>h</code> (on-chain inline HTML) →
|
||
<code>s3</code> (Sia bucket key) → <code>ip</code> (host header served by an IP) →
|
||
<code>u</code> (redirect). Subdomains inherit from their parent with a slight priority tweak
|
||
(see <code>record-picker.js</code>).</p>
|
||
|
||
<h3 style="margin-top:1.4rem">Where the chain is authoritative and where the tracker is a cache</h3>
|
||
<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. The chain is the authority; the tracker is
|
||
speed. Every signed snapshot carries a cryptographic <code>root</code> anyone can recompute
|
||
locally from the chain — a lying mirror is caught by any recipient that bothers to check.</p>
|
||
|
||
<div class="note"><b>Runbook — for operators / new sessions:</b> the exact commands to register
|
||
TLDs, mint names, update records, and deploy are in <code>INSTRUCTIONS.md</code> at the repo
|
||
root. The public docs above explain <i>what</i>; the runbook is <i>how</i>.</div>
|
||
</section>
|
||
|
||
<section id="request-tld">
|
||
<h2>Propose a new TLD</h2>
|
||
<p class="lede">The per-TLD registry means minting a TLD is a real, paid action — not a namespace
|
||
land-grab. During the alpha, all TLD mints are operator-signed. To propose a TLD, get in touch
|
||
via the channels below. The design (mainnet) adds an on-chain covenant with countersignature +
|
||
tiered USD price floors: 1-char $100k, 2-char $50k, 3-char $15k, 4-char $5k, 5–8-char $1k,
|
||
9+-char $250; one-time payment (not annual). See the design doc for the full model.</p>
|
||
<div class="note warn"><b>ICANN-adjacent TLDs (<code>.com</code>, <code>.io</code>, …) are
|
||
specifically not open for public mint.</b> They are reserved by the operator to prevent
|
||
squatting, and — under the covenant — even a fully-priced request will not be countersigned.
|
||
A TLD registry is only useful if it does not immediately collapse into an ICANN-shadow.</div>
|
||
</section>
|
||
|
||
<section id="roadmap">
|
||
<h2>What's coming</h2>
|
||
<p class="lede">sirius.x consolidates docs and registration today; three larger pieces are on the roadmap.</p>
|
||
<div class="grid">
|
||
<div class="card">
|
||
<h3>Wallet & name portal <span class="pill soon">next</span></h3>
|
||
<p>Sign in with your BCNR wallet, see every name you own, edit records inline, mint or renew
|
||
from one place. Same self-custody as today — the portal never handles your keys.</p>
|
||
</div>
|
||
<div class="card">
|
||
<h3>Sirius Studio <span class="pill soon">planned</span></h3>
|
||
<p>An in-browser site editor for names you already own — the WordPress / Tilda / Wix pattern,
|
||
but the whole site persists to Sia and the name's <code>s3</code> record updates on save.
|
||
Sites live where the name says they live.</p>
|
||
</div>
|
||
<div class="card">
|
||
<h3>Decentralized git remote <span class="pill soon">separate track</span></h3>
|
||
<p>Forgejo on the VPS with automated Sia backups, so the git remote for BCNR-related repos
|
||
survives a VPS outage. sirius.x is the canonical URL; the underlying stack is a
|
||
concurrent-session build.</p>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
|
||
<section id="verify">
|
||
<h2>Verify this page against the chain</h2>
|
||
<p class="lede">You do not have to trust that <code>sirius.x</code> is served by anyone specific.
|
||
The name's certificate is on the Bitcoin Cash chain; the records point to Sia; every path is
|
||
independently checkable.</p>
|
||
|
||
<h3>1. Confirm the certificate exists 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>2. Fetch the TLD-registry snapshot from Nostr</h3>
|
||
<p class="lede">The operator-signed snapshot of the TLD list is published as a Nostr replaceable
|
||
event. Any relay carries it; the event's content field carries the current snapshot root.</p>
|
||
<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>3. Reach this site via more than one route</h3>
|
||
<p class="lede">The same content should be served from at least two independent paths. If one
|
||
mirror is unavailable, the others still work. If two mirrors disagree, the on-chain record is
|
||
the tiebreaker.</p>
|
||
<ul style="color:var(--mut);font-size:14px;margin:.6rem 0 0;padding-left:1.2rem">
|
||
<li>Via any BCNR resolver: <code>https://sirius.x/</code> (requires the local root CA)</li>
|
||
<li>Via the public gateway: <code>https://navigate.st/bns/sirius.x</code></li>
|
||
<li>Via silentmode.st mirror: <code>https://silentmode.st/bns/sirius.x</code></li>
|
||
<li>Direct from Sia (content-addressed): the <code>s3</code> record on <code>sirius.x</code>
|
||
names the exact bucket key</li>
|
||
</ul>
|
||
</section>
|
||
|
||
</div>
|
||
|
||
<footer>
|
||
sirius.x — the Silent Mode name registry entry point ·
|
||
<a href="https://silentmode.st/">silentmode.st</a> ·
|
||
<a href="https://silentmode.st/tlds/">TLD registry</a> ·
|
||
<a href="https://silentmode.st/sirius/register.html">register a name</a><br>
|
||
Alpha on a test network (chipnet). You hold your own keys; verify everything against the chain.
|
||
</footer>
|
||
|
||
</body>
|
||
</html>
|