nosotros: Namecoin .bit NIP-05 resolution (web, browser-native ElectrumX)
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 / Android —
vitorpamplona/amethyst(PRs #1734, #2707, #2747, #2801, #2911, #2956, #2957) - Swift / iOS —
nostur-com/nostur-ios-publicPR #60 - JS / TS —
nbd-wtf/nostr-toolsPR #533,hzrd149/nostrudelPR #352,CodyTseng/jumblePR #774,dergigi/antsPR #281,cesardeazevedo/nosotrosPR #205 (new) - Dart / Flutter —
ethicnology/dart-nostrPR #44 (merged)
All eight interop on the same on-chain JSON shape documented in N1.
Try it
_@mstrofnone.bitresolves tonpub1gvv9ahktvavf9qjtrgm62le7gplmmchd5usp5wpfhr85hf79kncqj8xchstestls.bitin 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
- Reference: https://github.com/cesardeazevedo/nosotros/pull/205
- Reference: https://github.com/mstrofnone/nips
Write a comment