nosotros: Namecoin .bit NIP-05 resolution (web, browser-native ElectrumX)

A PR against cesardeazevedo/nosotros adds Namecoin .bit NIP-05 verification to its existing nostr-tools-based NIP-05 path, with browser-native ElectrumX WebSocket resolution and a distinct teal shield badge for Namecoin-verified identities. Eighth shipping N1 reference implementation across five runtimes.

nosotros: Namecoin .bit NIP-05 resolution (web)

A PR opened against cesardeazevedo/nosotros — a fast Nostr web client built on React / TypeScript / nostr-tools / SQLite-WASM — adds Namecoin .bit NIP-05 verification directly in the browser via ElectrumX WebSocket. No backend, no proxy, fully static.

GitHub PR: https://github.com/cesardeazevedo/nosotros/pull/205

Supported identifier shapes

  • alice@example.bit
  • _@example.bit / example.bit (root entry)
  • d/example (Namecoin domain namespace)
  • id/alice (Namecoin identity namespace)

What changes in nosotros

Area Change
src/services/namecoin/ New resolver: WSS to ElectrumX, scripthash via Web Crypto SubtleCrypto, NAME_UPDATE vout parsing, ~36 000-block name-expiry check, nostr.names[<localpart>] / nostr.pubkey / nostr.relays extraction, Map-based TTL cache.
src/hooks/query/useNIP05.ts Splits NIP-05 resolution into nip05QueryOptionsNamecoin (blockchain) and nip05QueryOptionsStandard (HTTP well-known); routes .bit / d/ / id/ to the chain path. Hook now returns { valid, isNamecoin }.
src/components/elements/User/UserNIP05.tsx Distinct teal IconShieldCheck for Namecoin-verified identities, separate from the standard @ badge.
Search dropdown + results page New user_namecoin search-item type; both the autocomplete dropdown (SearchContent, SearchDialog) and the /search?q= results page (SearchRoute) now resolve .bit identifiers via ElectrumX and navigate to the profile with relay hints attached to the nprofile.

Why an inline resolver instead of waiting on nostr-tools

nbd-wtf/nostr-tools #533 exposes a nip05namecoin module with exactly this surface, but is still open. Rather than gate this PR on it landing, the resolver ships inline under src/services/namecoin/ — the same path hzrd149/nostrudel #352 and CodyTseng/jumble #774 took. If/when #533 ships, swapping the nosotros internals is a small mechanical replacement.

The cross-language family

This brings the N1 reference-implementation count to eight, across five runtimes:

  • Kotlin / Androidvitorpamplona/amethyst (PRs #1734, #2707, #2747, #2801, #2911, #2956, #2957)
  • Swift / iOSnostur-com/nostur-ios-public PR #60
  • JS / TSnbd-wtf/nostr-tools PR #533, hzrd149/nostrudel PR #352, CodyTseng/jumble PR #774, dergigi/ants PR #281, cesardeazevedo/nosotros PR #205 (new)
  • Dart / Flutterethicnology/dart-nostr PR #44 (merged)

All eight interop on the same on-chain JSON shape documented in N1.

Try it

  • _@mstrofnone.bit resolves to npub1gvv9ahktvavf9qjtrgm62le7gplmmchd5usp5wpfhr85hf79kncqj8xchs
  • testls.bit in the search bar resolves through ElectrumX and shows the profile with the teal shield

Out of scope for this PR

  • TLSA pinning of the resolver’s WSS dial (N3) — separate PR.
  • Relay-URL resolution for wss://example.bit (N2) — separate PR.
  • CLINK / payment-pointer composition on the same record (N5) — separate PR.

Discussion and review is in the GitHub PR. Replies on Nostr are welcome.

— mstrofnone


Write a comment
No comments yet.