Skip to content

NANOALIAS

Inkeliz edited this page Oct 28, 2018 · 3 revisions

O NanoAlias prove uma maneira de registrar um apelido na própria blockchain, o que independe diretamente de terceiros. Desta forma o usuário pode enviar moedas usando @nanollet, ao invés de xrb_3tz9pdfskx934ce36cf6h17uspp4hzsamr5hk7u1wd6em1gfsnb618hfsafc.

Trabalhos relacionados:

  • OpenCAP: Este protocolo é similar ao e-mail, portanto oferece a possibilidade de o usuário escolher o seu “provedor”, criando seu apelido, onde considerar confiável, e apontado ao endereço.

    O NanoAlias não depende autoridades externas à Blockchain, escorando apenas no dPoS. O OpenCAP é extremamente dependente do TLS, onde sua segurança é baseada em diversas autoridades certificadores, e do DNSSEC.

  • Nanode Alias: Este alias foi desenvolvido pela Nanode para a própria Nanode, nela o usuário poderia registrar um alias e aponta-lo para um endereço.

    O NanoAlias não é centralizado e não é externo à Nano, dependendo apenas do dPoS. O Nanode Alias não permitia qualquer auditoria ou monitoramento dos cadastros de maneira pública, podendo ser alterado arbitrariamente pela Nanode, além disso era pago.

Objetivos:

  • O apelido apenas pode ser registrado uma única vez:

    O mesmo apelido não pode ser reivindicado por múltiplos usuários simultaneamente. O apelido deve ser único em toda a blockchain e apenas poderá apontar para um único endereço.

  • O registro deve ser imutável, uma vez registrado:

    O apelido registrado não pode ser alterado por outros usuários, ou pelo próprio titular

Limitações, contras e falhas:

Este sistema depende unicamente do consenso da rede, do dPoS, não oferecendo uma real prova criptográfica de titularidade, uma vez que a chave-privada é pública. Dessa forma ainda é possível que outras pessoas tentem alterar o destino do apelido, restando apenas o dPoS decidir qual informação é válida, um comportamento similar há como é feito para solucionar um fork. Uma vez que a chave privada é conhecida é possível que outros usuários executem um spam no aliás, o que trará mais trabalho para recuperar o Open. Além disso, não há como considerar uma cadeia de blocos como correta baseado no número de blocos corretamente assinados.

Descrição geral:

O usuário criará um endereço usando o próprio nome desejado. Por exemplo, se o usuário desejar o apelido de “nanollet”, basicamente o usuário irá criar uma chave publica usando a chave privada de Ed25519(key = 5BitASCII(“nanollet”)). Então, ele irá enviar 1 RAW para esta chave, usando o endereço que quer receber o alias. A chave privada do alias será usada para criar o Open, este open possui um representante de (xrb_3this7is7an7a1ias33333333333333333333333333333333333x9bet1jy), para fácil identificação.

Uma vez que o Open não pode ser realizado mais de uma vez ninguém poderá alterar este bloco, exceto se o consenso da rede concordar com a substituição.

Para enviar um pagamento basta realizar o mesmo procedimento, criando a chave privada Ed25519(key = 5BitASCII(“nanollet”)) e obtendo todos os blocos desta chave publica, até localizar o Open. Uma vez que há um Open válido, deverá obter o bloco apontado no "Link" (que é o bloco que enviou o pagamento) e obter o "Account" deste bloco. Assim, o resultado será a chave pública da conta que enviou o pagamento, que foi aquele que registrou.

Registro:

  1. O usuário escolherá um apelido, este apelido apenas pode ser constituído dos seguintes caracteres: ., _, - e a-z e não pode ter sido registrado anteriormente.

    Como exemplo poderá escolher o “nanollet”.

  2. A carteira codificará este apelido usando 5Bit-ASCII, descrito baixo em detalhes.

    A codificação em 5Bit-ASCII de “nanollet” é 0x892327BD17

  3. A carteira utilizará o resultado do 5bit-ASCII como uma chave privada, preenchendo com null-byte.

    Chave Secreta da “nanollet” é 0x892327BD17000000000000000000000000000000000000000000000000000000 e a Chave Pública é 0xC839673F7CBBDE7118A18E6860D6CAEA877B90D3A9C6963AF3992168855F35F3.

  4. O usuário deverá enviar um pagamento de 1 RAW para a respectiva chave pública, usando o endereço que receberá o alias.

    O xrb_3tz9pdfskx934ce36cf6h17uspp4hzsamr5hk7u1wd6em1gfsnb618hfsafc envia 1 RAW para 0xC839673F7CBBDE7118A18E6860D6CAEA877B90D3A9C6963AF3992168855F35F3.

  5. A chave privada do alias é usada para criar o bloco Open.

    O alias cria um bloco Open usando o pagamento que acabou de receber, este bloco open possui um representante de (xrb_3this7is7an7a1ias33333333333333333333333333333333333x9bet1jy).

  6. O alias está registrado!

    É recomendado que o alias reembolse o usuário, devolvendo o 1 RAW enviado.

Pesquisa:

  1. O usuário insere o apelido de quem deseja receber o pagamento.

    Por exemplo: @nanollet.

  2. A carteira removerá o "@" e codificará este apelido usando 5Bit-ASCII, descrito baixo em detalhes.

    A codificação em 5Bit-ASCII de “nanollet” é 0x892327BD17

  3. A carteira utilizará o resultado do 5bit-ASCII como uma chave privada, preenchendo com null-byte e obterá a chave pública.

    Chave Secreta da “nanollet” é 0x892327BD17000000000000000000000000000000000000000000000000000000 e a Chave Pública é 0xC839673F7CBBDE7118A18E6860D6CAEA877B90D3A9C6963AF3992168855F35F3.

  4. A carteira buscará por todos os blocos emitidos pela chave-publica até identificar um Open válido.

    Deve obter todos os blocos e localizar o bloco Open, requisitando votos para confirmação se necessário. Neste caso o bloco é 0xED2E820762019C8AFFBBD6FD37B906A406E6DFCEF5DF30563B647AA876E3AE5E.

  5. A carteira irá obter o bloco usando a hash do “Link” contido no Open.

    Deve obter o bloco apontado no “Link” do Open. Neste caso é 0xA530B7382BCBA83131163B5FA3F99E30CEECD4F2094CA1AE7A3B9B3620DF76D4.

  6. Pronto, temos endereço do alias contido no “Account” deste bloco.

    O bloco obtido no passo 5 possuirá o “Account” é que a conta de quem enviou o pagamento ao Alias e que é o titular. Neste caso é xrb_3tz9pdfskx934ce36cf6h17uspp4hzsamr5hk7u1wd6em1gfsnb618hfsafc.


5Bit-ASCII:

O apelido usa apenas 5bit por caractere, isto permite que o apelido tenha até 51 caracteres, ocupando os mesmos 32 bytes usados para a chave privada. Isto também restringe o número de caracteres que podem ser utilizados, evitando caracteres que são parecidos.

CHAR ASCII 5BIT
NULL 0 (00000000) 0 (00000)
- 45 (00101101) 1 (00001)
. 46 (00101110) 2 (00010)
_ 95 (01011111) 3 (00011)
a 97 (01100001) 4 (00100)
b 98 (01100010) 5 (00101)
c 99 (01100011) 6 (00110)
d 100 (01100100) 7 (00111)
e 101 (01100101) 8 (01000)
f 102 (01100110) 9 (01001)
g 103 (01100111) 10 (01010)
h 104 (01101000) 11 (01011)
i 105 (01101001) 12 (01100)
j 106 (01101010) 13 (01101)
k 107 (01101011) 14 (01110)
l 108 (01101100) 15 (01111)
m 109 (01101101) 16 (10000)
n 110 (01101110) 17 (10001)
o 111 (01101111) 18 (10010)
p 112 (01110000) 19 (10011)
q 113 (01110001) 20 (10100)
r 114 (01110010) 21 (10101)
s 115 (01110011) 22 (10110)
t 116 (01110100) 23 (10111)
u 117 (01110101) 24 (11000)
v 118 (01110110) 25 (11001)
w 119 (01110111) 26 (11010)
x 120 (01111000) 27 (11011)
y 121 (01111001) 28 (11100)
z 122 (01111010) 29 (11101)
Clone this wiki locally