Commit graph

5 commits

Author SHA1 Message Date
Local Dev
b5eea9422b feat(sirius-x): prices in BCH, amounts in bits, live BCH/USD rate from several exchanges
Every dollar figure on the site came from a hard-coded 250,000 sats per
dollar, which implies $400 per BCH; the market is near $250, so name
prices, TLD fees and sale listings were shown about 60% too cheap in
dollars. The gateway now serves /api/price: the median of Coinbase,
Kraken, Bitstamp, Binance and CoinGecko public tickers, no keys, cached
60 s, last good answer kept if every source fails. The site reads it
first, queries the same tickers itself if the gateway is unreachable,
remembers the last rate per browser, and only falls back to a constant
for the very first paint. Pages repaint when the rate arrives, and the
rate line says where it came from and how old it is.

Units: satoshi no longer appear anywhere. Sale prices, the seller's
input and the buy dialog are in BCH with the dollar figure beside
them; balances, fees and dust are in bits (1 bit = 100 satoshi).
2026-09-20 18:18:43 +02:00
Local Dev
9351045f45 feat(bns): name marketplace and TLD-owner co-sign rule
Two gaps the owner panel left open. First, a hidden TLD was only a UI
gate: anyone could still broadcast a REG under it and every indexer
admitted it. Second, there was no way to sell a name without trusting
the other side.

Co-sign rule (consensus, applied in lockstep by bns.js and
resolver-web.js): a REG under a TLD whose records at that height say
policy "cosign" or hidden 1 is indexed only if the transaction carries
the TLD's own certificate. The certificate can only be spent by the
owner's key and is re-issued to them in the same transaction, so it is
a co-signature nobody can forge and nothing is consumed. The TLD map
now keeps the TUPD timeline so policy is evaluated at the REG height.
Owners register under their private TLDs with the certificate added
from their own wallet; third parties under a "cosign" TLD build the
full transaction, sign their inputs and queue it at /api/cosign, where
the owner approves it from the dashboard (signCosignRequest refuses to
sign unless the certificate returns to the same locking script).

Marketplace: a listing is the seller's certificate input plus a price
output signed SIGHASH_SINGLE|ANYONECANPAY, stored by the gateway as a
bulletin board (/api/market, verified against the on-chain owner and
pruned when the certificate moves). The buyer completes it in one
transaction, so the seller is paid exactly when the name moves.
Cancelling also spends the certificate once so the offer is void.

Site: market.html, Sell sub-tab and Pending approvals in the portal,
Market link in nav and footer, six dictionaries extended, cache tags
bumped. Verified on chipnet: cosigned.sc registered by a throwaway
wallet through the queue with the .sc certificate back at the owner;
aloevera.test listed and delisted through the API.

Ariadne's resolver-web.js copy and the mobile Bns.java port still need
the co-sign rule; until then they admit REGs this index rejects.
2026-09-17 04:05:45 +02:00
Local Dev
55ddee18ec feat(sirius-x): TLD owner panel — owner-set price, on/off switch, private TLDs
A TLD owner needed to run their namespace without the operator: set what
every name under the TLD sells for, take the TLD off the public registry
for a while, and still register names under it themselves.

Both settings live on chain in the TLD's TUPD records (`price`, `hidden`)
because changes are rare and every client already walks the TLD beacon.
The gateway's /api/tlds now carries records, owner, price_usd and
hidden_by per TLD; pricing.js quotes the owner price ahead of the length
tiers and only trusts a TLD_BEACON-sourced list; the register flow refuses
hidden and frozen TLDs for the public but lets the owner through at the
platform share only (the 90% owner cut would be paid to themselves). The
portal's TLDs tab loads real holdings, shows price and on/off state, and
gives each TLD a one-click switch, a price/policy editor and an inline
"register a name under .tld" form. Docs and the design table describe the
two new records.
2026-09-16 21:28:18 +02:00
Local Dev
caf11c2512 feat(sirius-x): raise TLD pricing to $25–$500; PIN gate on payment approval
TLD price tiers (pricing.js):
  1 char  $500  (was $10)
  2 char  $250  (was $8)
  3 char  $150  (was $6)
  4-6ch   $100  (was $5)
  7-10ch  $50   (was $5)
  11+ch   $25   (was $4)

Payment approval (register-flow.js):
  New stepApprove(...) gates the actual sign+broadcast on an explicit
  user gesture — PIN pad when a PIN blob exists on this device, wallet
  password otherwise. Same "3 wrong PINs → wipe, fall back to password"
  behavior as the sign-in unlock step. Wired between stepConfirm(Tld)?
  and stepRegister(Tld)? so both name mints and TLD mints require
  approval even when the wallet is already in memory.

tld.html fee card: reflects the new $25–$500 range instead of the
"≈ 1,250,000 sat · ≈ $5" placeholder.
2026-09-09 03:45:41 +02:00
Local Dev
ce9248a327 feat(sirius-x): tier-based label pricing; badges on search cards + TLD list
Single source of truth (js/pricing.js) mirrored on landing, tld.html
and the mint flow — same label always shows the same price everywhere.

Name tiers (label part):
  1 char           $5.00  premium-1
  2 chars          $3.00  short-2
  3 chars          $2.00  short-3
  4–5 chars        $1.00  standard
  6–7 chars        $0.50  long
  8–16 chars       $0.25  extended
  17+ chars        $0.10  very-long
  all-digits       ×0.5   (less brandable)
  contains hyphen  ×0.7

TLD tiers (label part):
  1 char           $10.00  premium-1
  2 chars          $8.00   short-2
  3 chars          $6.00   short-3
  4–8 chars        $5.00   standard
  9+ chars         $4.00   long

Rendering:
  - Landing #search-results: acid-tinted price badge on each available
    row; grid grew a fourth column so name + badge + price + button
    all sit on one line
  - tld.html search result-card: same price badge next to the Register
    button on available TLDs
  - tld.html registered-TLDs table: new 'Mint price' column showing the
    tier price for every registered TLD, so buyers see the pricing
    ladder next to concrete examples

Mint pipe:
  - startFlow(name)/startTldFlow(label) resolve the label price via
    window.siriusPricing (default) but honour opts.serviceFeeSats when
    the caller passes one — leaves the door open for coupons /
    operator discounts / oracle overrides in a future revision without
    reshuffling call sites
  - The overridden service fee is threaded through quoteRegistration
    AND registerWithBuiltInWallet/registerWithExternalWallet so the
    confirm screen and the on-chain output agree

Chipnet placeholder rate (250,000 sat/USD) stays in pricing.js;
mainnet will swap in a live BCH/USD oracle. Operator-side discounts
and coupon codes are the next iteration — deliberately not disclosed
in this shipping copy.
2026-09-09 01:09:05 +02:00