EOS Account Name Service Proposal
We all want a friendly user experience, and pretty names are a critical component of usability. Historically EOS has supported a limited degree of friendly user names, for a price. The act of choosing an EOS account name involves learning arcane rules and limits that don’t make sense to the typical person. Its time we change this and improve the experience of users.
This document proposes a technical approach to enable names that are up to 32 characters long and can contain the letters a-z, numbers 0–9, and ‘_’. Furthermore, it proposes a more user friendly means of rationing premium names to minimize name squatting.
EOS accounts are really just 64 bit numbers displayed in base32. This is why there are only 32 characters supported (a-z, ‘.’, and 1–5). I designed EOS this way for performance reasons: 64 bit accounts names are more memory efficient and computationally efficient. They are all “fixed size” instead of “dynamic length” and various other benefits that are more computer friendly than people friendly.
By using base32 encoding, these 64bit numbers could be made more “human friendly” which helps developers looking at the raw on-chain data. Unfortunately, what was originally created as a developer-friendly debugging tool has become a user-facing technical detail.
The original, if not thoroughly stated, intention was for EOS account names to be similar to BitShares account numbers. On BitShares accounts are assigned numbers sequentially, something that gives potential for even more performance gains. However, the sequential allocation strategy complicated account creation because you never knew what your account number was until after it was created. BitShares had pretty account names as well, they were just used to lookup the unique account number.
For the sake of relative completeness, the EOS system contract also implemented “namespaces”. If you reserved the name “com”, then only your account could create accounts with the names ending in “.com”. Since account names are limited to 12 characters, this leaves only 8 characters.
As things exist today, all account name allocation is governed by upgradable smart contracts that do not require a hardfork.
Going forward I recommend that all EOS accounts utilize “random” account numbers and that a pretty-name registry be used to lookup account numbers. This can be done in a manner that prevents confusion between the old and new naming system.
If an EOS account already exists with a name, only that account can re-register its pretty-name under the pretty-name system. It may also choose to register a completely different name under the new system, but if it does so no one else may register their old name.
If someone attempts to create a new EOS account with a name identical to one already registered under the pretty-name system then it will be rejected.
The mapping between pretty-names and EOS accounts cannot be changed once locked in.
The existing premium name auction system will be abandoned and everyone who has bid on a name will receive a full refund.
There are two classes of names going forward: standard and premium. Standard names are free and allocated on a first-come, first-serve basis similar to 12 character EOS account names. Premium names are allocated at an average rate of 1 per hour and the price of a premium name will adjust in a manner similar to Bitcoin difficulty. There will no longer be any auction periods.
A standard name is any name that has a number, underscore, or no vowels. A premium name is any name that lacks a number, underscore, or contains a vowel.
No names under the new system may contain a ‘.’, these namespaces are reserved for those who purchased premium names under the old system.
Wallets provide the user interface allowing people to interact with smart contracts. These user interfaces will be responsible for mapping the pretty-name to the underlying EOS account name. So this means if you want to transfer from ‘dan_the_man’ to ‘bobby’ the wallet would lookup ‘dan_the_man’ and substitute his random EOS account number, ‘bnaidfndfded’, into the transfer operation. It would also lookup ‘bobby’. Since ‘bobby’ is valid under both old and new rules it would first check the new system, then, if not found, check to see if ‘bobby’ is a valid EOS account number.
Old interface and tooling would continue to work, users would just have to rely upon their 12 digit account number rather than their pretty name until they are upgraded.
Smart contacts would still refer to users by their EOS account number instead of their pretty name. This allows us to keep the performance while still having a pretty user interface. Block explorers will have to be upgraded to enhance readability.
In addition to the pretty user name, accounts can specify an IPFS address which points to a JSON blob containing additional information such as a profile picture or display name. My “display name” could be “Daniel Larimer” while my standard pretty user name could be dlarimer1 (cheap because it contains a number). Display names would always start with a capital letter to minimize attempted fraud and the pretty-name should always be displayed along side it in sensitive situations to minimize attempted fraud. The display name would also support better internationalisation.
Premium Name Pricing
Premium names are allocated at a rate of 1 per hour on average. Every 24 names or 24 hours, whichever comes first, the price is adjusted. If the average rate of premium name creation is above 1 per hour, then prices will increase by 5%. If it is below 1 per hour, then prices will decrease by 5%. Initial pricing will start off high and fall by 5% per day until people start buying premium names at a rate of 1 per hour.
Users no longer need to participate in a time consuming auction to reserve a premium name. If a premium name is compatible with a legacy EOS account number and it has not yet be paired to an account, then it can be used to create a legacy EOS account with the number that matches the name.
When a name is purchased it is not automatically paired to the purchasers account. These unpaired names can be listed for sale-by-owner and can trade freely. Once a name is hard-linked to an EOS account number it can no longer be remapped. You would have to sell the entire EOS account and its full history.
This EOS Account Name Service proposal should empower developers to build more user-friendly experiences and make it easier than ever to purchase premium account names and numbers on EOS. Please share your thoughts in the comment section, telegram, and twitter!