Right now in Zbay we’re registering usernames by sending encrypted memos with a name to the network, using an approach similar to the one originally described by Aaron Swartz where everyone checks the list and only the first registration is the valid one.
http://www.aaronsw.com/weblog/squarezooko
However, we’d like to have a way where users can quickly verify that a given user is the real owner of a given name, without having to look through the whole list.
It’s easy to verify that the user has registered a name. They can point to a transaction and we can ask a lightwalletd about it, and maybe the lightwalletd can even prove to us that it’s valid. However, that doesn’t tell us that they were the first to register that username, so they could still be impersonating the real user.
So our question is, is there some property in a transaction that is:
- Checked for uniqueness by miners and thus guaranteed to be unique and
- Mappable 1:1 to arbitrary data like a name, so that it’s uniqueness tells you that the name is unique too.
For example, let’s imagine that by setting some parameters of transaction we can control the ID of the UTXO that the transaction creates. If we find a function that translates username into this is, than we could say, that user owns a username if he had transaction creating this UTXO included in a block.
So one way to solve this is if we can control the ID of the UTXO created such that its uniqueness also guarantees the uniqueness of a name. Is this possible? How would you construct such a transaction? (Note: it can be a transparent transaction; it doesn’t have to be shielded.)
But if this doesn’t work, is there some other value checked for uniqueness by miners?