Регистрация - простая.
1. Вводим никнейм. При этом, он проверяется на уникальность, через поиск по табличке.
2. Сервер генерирует некое значение, в виде байт или строки, и отправляет его клиенту.
3. Клиент - принимает это значение, и
подписывает его, приватным ключём, добавляя к нему - цифровую подпись свою4. После этого, клиент, отправляет подписанное сообщение с этим значением и подписью цифровой - назад, на сервер.
5. Сервер, берёт подписанное сообщение,
проверяет цифровую подпись,
сравнивает значение отправленное клиенту со значением в подписанном сообщении,
берёт адрес клиента после проверки подписи получаемый,
самим фактом успешной проверки цифровой подписи, сервер убеждается в том,
что у клиента есть приватный ключ от этого адреса,
и дальше уже, сервер, просто ассоциирует, в табличке своей базы данных - никнейм и адрес клиента,
и пишет пару этих значений, с свою базу данных.
6. В итоге, на сервере, в табличке базы данных - появляется записанная пара значений: никнейм <-> адрес.
7. Сервер, может резолвить никнейм в адрес, и наоборот (правда, какой в этом смысл - хз).
Потребует слишком большого изменения в коде многих приложений, того же Электрума. По стандарту значение введеное в поле "send to" используется для формирования транзакции (вап вап вап) и прописывается в sciptpubkey транзакции. Так что это придется делать так, чтобы при введении ника, условный Электрум различал эту разницу (между адресом и ником), делал get запрос на твой сервер, получал оттуда уже адрес и использовал его для формирования транзакции далее.
А еще, чтобы не было проблем, надо добавить функционал, чтобы адрес высвечивал потом рядом с ником, при подтверждении транзакции (чтобы у юзера очеча не сжималась, а то вдруг васян99 через английское "а" ник писал, и ты хер пойми кому отправишь). Тоесть даже здесь тебе придется знать адрес.
А вот этим вот всем кошельки заниматься не будут, в смысле менять свой интерфейс. По крайней мере пока нет удачных прецендентов.