Problem with this is, how do you make sure that two different people do not use the same username at the same time?
Content addressed storage (made possible with IPFS, which allows files to never change), and Nostr relays help distribute the content. But neither of them gives you a way to agree on order.
Assume that Alice and Bob try to register "satoshi" at the same time. Both of them sign and upload their files onto IPFS and then announce it on various Nostr relays. But, who is satoshi, really? Alice's registration reaches Relay A first, Bob's reaches Relay B first. If a common source of truth is not present, then in this environment users may end up with different perceptions of who owns that same name.
This is Zooko's Triangle in action — you cannot get decentralized, secure, and human readable names without a global ordering system. This is why blockchain is used in name services, a ledger is required as proof of who was first to register. There is no such state machine available via IPFS + Nostr alone.
A few other things worth thinking on:
- If someone is not pinning their files on IPFS, they will eventually stop existing. Who is in charge of keeping the username records stored for the long term?
- Relay filtering: Relays can decide not to distribute certain events, so this is only censorship-resistant if enough independently operated relays are carrying it.
But you would still need a lightweight consensus mechanism (such as an on-chain timestamp) so that there is no username clash. How would you handle that conflict scenario?