Ariadne's resolver copy and the Android indexer still admitted every
REG under a cosign or hidden TLD, so they disagreed with the gateway
and Theseus about which names exist. Ariadne now carries the current
Argus resolver-web.js verbatim (the copy had drifted: no TLD beacon, no
owner tracking, old electrum list); its daemon only imports buildIndex
and normalizeName, both unchanged. Bns.java gains the same rule in
Java: walk the TLD beacon, keep each TLD's TUPD policy timeline, and
drop a REG whose TLD required a co-signature at that height unless the
transaction re-issues the TLD certificate. If the TLD beacon cannot be
read the mobile index degrades open rather than empty. Needs an APK
build (0.19) and an Ariadne zip rebuild to reach devices.
Dashboard balance: it was read once from the gateway at sign-in and
never again, so payments and spends never showed. The sidebar and
Settings figures now come straight from electrum every 15 seconds
while the tab is visible, after every broadcast the page makes, on tab
focus and on a new refresh button; unconfirmed coins count as spendable
(listunspent includes the mempool) with a small "incl. N sat
unconfirmed" line. The header wallet pill asks the dashboard for a
fresh figure when opened, and the register flow keeps its stored
figure current while it watches for funding.
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.
The wallet dropdown had become a navigation menu (My names, Admin panel)
while wallet facts were nowhere. Now a Dashboard button sits left of the
wallet pill on every page while signed in, and the wallet menu shows the
address, balance and holdings, copy address / token address, the faucet,
wallet settings and sign out. The admin panel moves into the dashboard
sidebar and only appears for the operator wallet. Translations included.
Studio chrome, template picker, publish dialog, the shorter dashboard
menu and the Settings copy in all six languages. Dictionary cache version
bumped.
Menu, panes, DNS table, transfer, export, settings and the new session
copy get German, Greek, Russian, Spanish, French and Portuguese entries;
Greek and Russian keep the "blockchain" wording. Dictionary cache version
bumped so returning visitors pick the new strings up.
Same reasoning as the Russian fix: "αλυσίδα" is a literal "chain" that
Greek readers do not use for a blockchain, which is normally written as
the loanword. Every Greek string now uses "blockchain" with the neuter
article in the right case. Dictionary cache version bumped.
"Цепочка" is a literal rendering of "chain" that Russian readers do not
use for a blockchain. The headline now states plainly that these are
domain names on the blockchain, and every other Russian string uses
"блокчейн" in the right case. Dictionary cache version bumped so
returning visitors pick up the new wording.
Visitors should not have to read English to register a name. The pages
stay authored in English; js/i18n.js picks the language from the saved
choice, ?lang=, or the browser, fetches i18n/<lang>.json (exact English
text -> translation) and rewrites text nodes, placeholders, titles and the
page title. A MutationObserver keeps script-built content (search rows,
register modal, portal rows, footer, profile menu) translated, so no page
script had to change. A dropdown in the top nav switches languages and
back to English losslessly. Code, hashes, addresses and record keys are
never touched. Ships German, Greek, Russian, Spanish, French and
Portuguese; the docs page keeps its English prose and only gains the
translated chrome.