Bitcoin usernames / domain names instead of DNS-based NIP-05
Problem - keys are cumbersome and hard to remember, but DNS names and usernames can't be self-custodied. Previous fix attempts seem distracted with trying to make money instead of actually solving the problem.
Solution - Bitcoin fixes this. We can encode aliases in Bitcoin transactions, and use the Bitcoin chain as a lookup table for them.
A name could be registered in 3 transactions to yourself, of any size/amount -
-
Generate a new wallet and send Bitcoin to yourself, with the alias encrypted using AES-256 in the OP_RETURN field. For example, my username - ๐ฐ๐ก๐จ๐๐ฏ๐๐ซ
-
After the transaction has confirmed, send it back to the wallet it came from with the AES-256 decryption key in the OP_RETURN field. This process should prevent anyone from copying your alias in the time between sending and confirming your transactions.
-
After the second transaction has confirmed, yet again send the same UTXO back to the other wallet you sent it to in step 1, with the associated long address in the OP_RETURN field. For example, my nostr key with the nostr URI prefix - ๐ง๐จ๐ฌ๐ญ๐ซ:๐ง๐ฉ๐ฎ๐๐๐ฐ๐๐ฆ๐ฏ๐ฑ๐ญ๐๐ญ๐ซ๐๐๐ ๐ก๐ฎ๐๐๐๐ฐ๐๐๐ค๐ฌ๐๐๐ง๐ญ๐๐ฉ๐๐๐๐ง๐ฏ๐๐ฏ๐๐ก๐ฉ๐ฅ๐ฆ๐ฏ๐๐ง๐๐ณ๐๐๐๐๐ณ๐ฒ๐ช๐๐๐ฎ๐๐ฅ๐
Optionally, additional addresses could be linked to the same alias by continuing to send OP_RETURN transactions back and forth between the same 2 wallets after step 3. For example, you could have an alias with 2 nostr keys, or an alias with a nostr key and a webpage link.
This mechanism could also be used to attach a backup Bitcoin address that's allowed to re-register the name under its own control, in case you lose the wallet you're using. Alternatively, you could seal the package and signal no further addresses should be added, by sending a final transaction with no OP_RETURN data.
It would make sense to consider some aliases invalid. For example, we might want to consider an alias invalid if it contains dots, so that we can use dots for subaddresses similar to DNS subdomains. In that case, we might also want to consider well-known TLD aliases like com invalid, so someone can't just register com and then freely generate fake .com subaddresses.
Likewise, we might want to consider any alias containing @ invalid, so @ can be used structurally in ways like twitter tagging or email addresses.
If 2 wallets try to claim the same name in the same block, they should both be invalid. This should help encourage people to think of unique usernames, instead of trying scalp sought-after ones.
However, scalping would still be possible. An alias could be transferred by entering the recipient as a backup wallet address, enabling them to re-register the name under their control.
Some of these design choices have pros and cons that may be worth considering.
The destination:
Letting users send their money to themselves makes sense, but searching and verifying names will require scanning every transaction in every block. The community could instead agree on a set of addresses to send these transactions to, such as charities or Satoshi Nakamoto's first wallet.
This way, a search index would only have to download and store the transactions for those wallet addresses, instead of every transaction in the Bitcoin network.
OP_RETURN / formatting:
Some people hate OP_RETURN, and some would even speculate the feature might be removed completely and have all its data purged from the blockchain someday. If that's a concern, we can instead encode data as numbers and transmit the numbers as transaction amounts in a long chain of transactions. People might also have other suggestions or concerns on exactly how the data should be formatted.
Invalid names:
Some people might be against blocking characters like . or @ or blocking .com names. It might make sense for some of these restrictions to be context-specific instead of baked in.
For example, maybe email apps or twitter apps using this protocol could just not allow names with @ even if those names are able to be registered on the protocol. A browser extension that adds URL bar support could ignore .com names. In this case, any app that helps users register names should simply warn them if they're trying to register a name that might not work everywhere.
PS: I suggest to avoid those unicode strings, they add a lot of usability/accessibility issues; you can simply use the bold or code markup
PS: I suggest to avoid those unicode strings, they add a lot of usability/accessibility issues; you can simply use the bold or code markup
I'd be concerned about clients rendering it wrong then. I think the first article I ever wrote on this topic has a code block that gets rendered wrong by clients ignoring it to try to tag fiatjaf or something
I've given a lot of thought to unique namespace, and there's been a lot of proposals to use Bitcoin already. There's a lot of friction to do it with Bitcoin and it doesn't solve a number of problems like squatting and ensuring people actually get navigated to the user they'd expect for a given name since there is no social context. There's also no obviating DNS entirely, since 1) the internet is built on it and therefore 2) browsers can't escape it (extensions are not widely distributable, mobile friendly, and therefore unsustainable
What I've arrived as is WoT based names in Nymrank
FAQ and POC here: https://nymrank.dev/faq
Nosfabrica presentation: https://lightning.video/7a7ddce07c473e160654320ff3809b93738cbc4c52e4124037ffc1544f66358a
Squatting sounds like ownership, solving it sounds like a problem rather than a solution.
Happy to see people still thinking about solutions related to DNS.
Someone tried to do something similar but with nostr's involvement, called nomen, but it seems to have been abandoned. It was about utilizing nostr and bitcoin's op_return and same idea with having a place to manage who owns what.
Aside from that, I've made my own working solution, but taking different decisions that other attempts haven't done afaik, called it DNN, but current reworking it from the ground up again and making it a lot more simple. Here's a quick demo about it https://video.nostr.build/43921e1b0338d017fdae92a11b36a2cd0a0b4755d6ad70082f79f39cc2d9b22b.mp4 and also, you can see the handle example regarding social here: https://jdnn.top/users/nabandondelivera , that nAbandonDeliverA is both a social handle (instead of an npub or traditional domain address) and a top-level domain (think .com).
How DNN works, in gist:
You grab your npub, derive a bitcoin address, send a transaction to yourself, publish a nostr event that includes that TXID, a node verifies the connection records it as legit. Done. The ID you get is determinisic, produced by taking the block number the tx is on and its position in the block (based on a couple of rules), and encodes that number to a human readable/usable address. A one time cheap self-transfer payment and you get a short usable ID with many domains you can whip up on the fly, along with many other benefits that I'm ommiting (like there being no need for Certificate Authorities).
After the rework for it is done, will push hard for its adoption on the DNS and nostr sides.
To participate and reply, please


