Issue #2330: N0..N3 Namecoin RFC track
Recreation note. This is a copy of issue nostr-protocol/nips#2330 (the broader N0..N3 RFC track), preserved as a custom NIP because my GitHub account (
mstrofnone) is currently suspended.
Background
This issue is a recreation, on this mirror, of the broader N0..N3 RFC track originally filed upstream at nostr-protocol/nips#2330. The companion PR on this mirror — "NIP-05 verification via Namecoin (.bit)" — implements the narrowest N1 slice of that track. This issue exists so reviewers on this mirror can discuss the broader track in one place.
Summary
Adds a coherent track of optional NIPs that use the Namecoin blockchain as a censorship-resistant alternative anchor for parts of Nostr's identity / discovery / verification surface. All four pieces are independent — clients can ship N1 alone, or any subset — and all four use only the existing ifa-0001 Domain Name Object schema. No new top-level Namecoin record keys.
| Slot | Purpose | Deployment status |
|---|---|---|
| N1 | NIP-05 verification over .bit (the narrow PR in this mirror) | 8 wire-compatible impls across 6 platforms, all merged upstream |
| N2 | Relay discovery via .bit (relay list pinned in chain record) | implemented in Amethyst PR #2595, dart-nostr #44 |
| N3 | TLSA-style pin for .bit relay WebSocket certs | implemented in Amethyst PR #2595, dart-nostr #44 |
| N4 | Block-height-pinned identity / receipt (optional block field) | spec only |
Each piece independently composes with existing NIPs (NIP-05, NIP-65, NIP-11). The Namecoin record container ("N0") is folded directly into N1 in the companion PR; standalone container NIP isn't useful without a consuming NIP.
Implementation matrix (N1)
8 wire-compatible reference implementations across 6 platforms have shipped N1 against the live Namecoin chain, with byte-for-byte agreement on the same on-chain records:
| Platform | Implementation | Status |
|---|---|---|
| Android / iOS / Desktop (Kotlin/KMP) | vitorpamplona/amethyst (Quartz namecoin module + Amethyst LocalCache) | merged |
| iOS (Swift) | nostur-com/nostur-ios-public — NamecoinNip05Service.swift | merged |
| TypeScript / Node | nbd-wtf/nostr-tools — nip05namecoin module | merged |
| Flutter / Dart | ethicnology/dart-nostr — nip05_namecoin.dart | merged |
Web (browser-resident wss:// ElectrumX) | CodyTseng/jumble | merged |
| Web | hzrd149/nostrudel | open |
| Sidecar / relay | mstrofnone/strfry-nip05-namecoin (Node strfry plugin), mstrofnone/nostrlib-nip05-namecoin (Go) | shipped |
| CLI | fiatjaf/nak (via the Go lib) — PR open | open |
Live demo
- Verifier:
[email protected]resolves via Namecoind/testls→ pubkey, with an ifa-0001importchain (d/testls → dd/testls → d/cl-testls) exercising the multi-record path. .bit-served relay:wss://relay.testls.bit/(TLSA-pinned, Tor-reachable). Hosts a kind:30023 long-form announcement of the track.
Scope discipline
This issue is for track-level discussion. Spec PRs land one NIP at a time:
- N1: the "NIP-05 verification via Namecoin (.bit)" PR on this mirror (recreated from
nostr-protocol/nips#2349). - N2/N3/N4: follow-up PRs after N1 lands. Specs already drafted at https://github.com/mstrofnone/nips ; happy to open them separately.
CC: none — opening cold so the broadest set of reviewers can chime in.