Carlos Buendía (@buendiadas)
http://buendia.io
ENS: Ethereum name Service
Motivación
Si bien la web necesitaba un estandar para la resolución de nombres legibles en lugar del acceso a IP's, la web3 (o aquello a lo que aspira conseguir Ethereum) necesitará un protocolo similar. En mayor medida si cabe, ya si bien que una IPv4 puede ser incluso legible, una dirección en Hexadecimal como la que encontramos en la figura anterior puede ser una pesadilla. Entre otros motivos, este problema facilita la ejecución de ataques de phising , ya que un cambio de dirección por el atacante pasará inadvertido por cualquier persona (incluso en muchos casos el dueño de la dirección).
Además de las direcciones, podemos comenzar a asociar una multitud de registros nuevos, y, de la misma manera que DNS albergaba diferentes registros (MX,A etc..) comenzar a dirigir peticiones de Swarm, DNS, DNI (para ID's), o multitud de nuevas aplicaciones.
Arquitectura
De la misma manera que dividimos la arquitectura de DNS en tres diferentes componentes, dividimos la arquitectura de ENS en otros 3:
-
ENS : Un registro único para todos los dominios de Ethereum. Un Smart contract muy simplón: mapping de los nombres registrados a dos direcciones:
- La dirección del owner
- La dirección del resolver
- TTL
Comparando con la arquitectura DNS, sustituiría la función de los Nameservers.
-
El resolver Otro mapping, en este caso desde el dominio seleccionado a los diferentes recursos asociados (namespace) .
-
[Contratos de registro]: Diseñados para gestionar dominios jerarquicamente inferiores .
Arquitectura
ENS Registry
ENS Registry
Básicamente:
Namehash
¿Cómo mantenemos cierto grado de privacidad sobre los nodos/Keys/dominios, manteniendo un URI?
Básicamente, haciendo un Keccak hash recursivo de cada "label", separada por los puntos.
Definición: EIP137
Namehash: Implementación
Registrars
- Contrato con capacidad de registrar subdominios de un registro
- Fija las normas para registrar estos subdominios
- Owner de ENS al deployer del contrato (actualmente una multisig)
- Por jerarquía, el registro principal actualmente es '.eth', un 'auctionRegistrar'
Ejemplo:
Ejemplo práctico FIFS (I)
En la terminal 2:
En la terminal 1:
Almacena las claves migradas (yourENSDeployedAddress, yourFIFSDeployedAddress)
Ejemplo práctico FIFS (II)
Ejemplo práctico FIFS (III)
Resolver
- Acceso al NameSpace del dominio
- Cada tipo de registro (Recuerda A,MX, etc…) se representa como una nueva interfaz.
- Actualmente:
Record type | Function(s) | Interface ID | Defined in |
---|---|---|---|
Ethereum address | addr | 0x3b3b57de | EIP137 |
ENS Name | name | 0x691f3431 | EIP181 |
ABI specification | ABI | 0x2203ab56 | EIP205 |
Public key | pubkey | 0xc8690233 | EIP619 |
Ejemplo práctico resolver
Vamos a llenar el campo address (interfaz 0x3b3b57de)!