UPDATE: Click here to view a more up-to-date description of the BitAlias protocol.
Bitcoin is a great protocol to send real value (bitcoins) to everybody on the Internet, without borders, instantly and almost without fees. Sending bitcoins currently requires knowing the cryptographic hash of the public key of the recipient, his Bitcoin ‘address’. Bitcoin addresses are not made for humans as they basically consist of thirty-something (almost) random characters.
What people usually do to share their addresses is copy-and-paste them, scan their QR-codes with their phones, or send them over email or other more-or-less secure channels. This is an imperfect process which can be simplified by having an aliasing system in a decentralized and censorship-free way, on top of the Bitcoin blockchain.
BitAlias is a protocol and open-source implementation where everybody who owns bitcoins can register an alias to his Bitcoin address in a simple, secure and fair way. For example I want to register yanislav as my alias for my address 1MAg54QsLPirAYjmBWu7E6RB4tGYAZEn2r. Now people can send me bitcoins using my alias instead of my Bitcoin address. This only works with wallets which support BitAlias, but for those wallets which do not, one can look up the associated bitcoin address on the blockchain or at BitAlias.info.
The protocol was inspired by Namecoin’s protocol but is more simple, yet more secure. The protocol is designed for the aliasing of Bitcoin addresses and not for arbitrary key-value storage (like Namecoin does). Similar to Namecoin’s protocol, the registration of an alias consists of two steps and is done in a decentralized way on top of the Bitcoin blockchain.
In short: One alias always points to one Bitcoin address: ALIAS -> ADDRESS. Four different transactions get defined for 1. initializing, 2. registering, 3. transferring and 4. renewing aliases. All transactions must be made from the address which the alias belongs to.
Registering Aliases: 2 Steps in 2 Transactions
Publishing is done via sending two transactions to a special registry marker address [1BitALiasRegistryXXXXXXXXXXXYP9R77] each with at least 0.0001 BTC (together about 5 cents | registration fee) in the following way:
- Transaction [ALIAS_INIT]: Publish the signature of your alias on the Bitcoin blockchain. Sign your alias with your private key which corresponds to your Bitcoin address (first input).
- Transaction [ALIAS_REGISTER]: After 3 to 30 blocks (~30–300 minutes) publish the actual alias.
Both transactions must further contain an OP_RETURN output as the second output with the data from steps one and two. The bitcoins which get sent to the registry marker address get ‘burned’ and act like a donation to all the Bitcoin network as the total amount of available bitcoins decreases.
Aliases can be transferred to point to another Bitcoin address through publishing a transfer transaction [ALIAS_TRANSFER] on the Bitcoin blockchain. Also, here the registry marker address has to be used but this time without any special fee required. The output to the BitAlias marker address has to be bigger than the current dust limit, though.
On Expiration and Renewals
After the successful registration of an alias it stays valid for one year. It can be renewed through sending a transaction [ALIAS_RENEW] to the registry address, just like the first time. Initially, 0.0002 BTC (~5 cents) buys one year time.
When the fee for extending the validity of the alias is not paid in time, the alias can be registered by whoever is first to claim it.
In case there is a battle for an alias, e.g. because two or more entities get their ALIAS_INIT transactions included into the same blocks right after the alias expired, then the alias gets registered for the address according to following rule: The one with the lowest SHA256-hash(ALIAS_INIT-tx-hash + containing-block-hash) wins!
Adjustment of Fees
Because the bitcoin price fluctuates a lot, BitAlias will need a price adjustment mechanism. Therefore every six months the holders of BitAlias-enabled addresses can vote on-chain for what the fee for the next six month will be. Voting will involve sending a data transaction again, but this time to oneself, so that only the Bitcoin network transaction fee applies. Detailed descriptions will be released in time.
The Reference Implementation
Reference Wallet and Libraries
To make it easy for users to register their names, an open source wallet will be released, which will support the registration process of aliases, sending to aliases and transferring aliases.
Reference Web Interface and API
To provide an easy way to look up aliases without the need to download the Bitcoin blockchain, one can lookup aliases and addresses on BitAlias.info. An API will exist for programmatic interfacing with this data. The reference wallet will use this API. The source of BitAlias.info will be open and free, and everybody is invited to run their own API on their server or on their local computer.
Properties of BitAliases
BitAliases fulfill almost all the properties which bitcoins have:
- decentralized, secure and censorship-free
- scarce, yet tradable
- but they are not fungible
To be able to dedicate more time to the BitAlias project the community is invited to donate to the development fund which will be managed in the beginning by myself, Yanislav Malahov. I have a couple of years of experience in developing and maintaining Bitcoin related software, including a very early colored coin wallet in 2013, a Dogecoin browser wallet and I was also a founding member of the Darkwallet.
Development fund address: 15yXLHu3AjoLLkhr1XB8WfqPXiwsgt4GuJ
Also, launch partners and helping hands most welcome!
This blog post is a first draft of the BitAlias protocol. Members of the Bitcoin community are invited to suggest well-thought-out additions or changes. And if the community demands it, this proposal can also evolve into a BIP (official Bitcoin Improvement Proposal), but the protocol can also easily work without becoming part of the Bitcoin core.
BitAliases or ‘usernames for Bitcoin’ can also be used for authentication to third party web services. Most conveniently this can be done with a browser wallet extension, which supports the BitID or Trezor Connect protocol. Such a wallet extension also could route BitAlias.btc domain names to decentralized websites. Stay tuned and follow @BitAlias on Twitter or sign up for the email list at BitAlias.info.
Update on Privacy & Security
The initial idea and implementation does not focus on privacy, because there are a lot of use-cases where you actually DO want to be in public, e.g. when you send and receive tips on the web.
But after spending some more thoughts on this I came to the conclusion that privacy can easily be archived through using stealth addresses.
The protocol above needs a minor change: By publishing the missing information (chain code) for creating ones extended public key inside the [ALIAS_REGISTER] transaction (part of the OP_RETURN output) payers can generate as many stealth and also hierarchical addresses as they want. Afterwards one can choose between sending BTC privately (default) or publicly.
Conclusion: By knowing one simple alias payers can generate unlimited* private and public addresses for any BitAlias user. If implemented properly, this could be a true revolution for the usability of Bitcoin. Please get in touch if you want to help!