Al igual que el DNS (Domain Name System) permite usar nombres legibles para el ser humano a fin de comunicarse con las máquinas en la internet tradicional centralizada, el ENS (Ethereum Name Service) permite realizar la misma labor en la blockchain de Ethereum de una manera descentralizada.

 

¿Qué es ENS?

ENS (Ethereum Name Service) es un herramienta que permite usar nombres legibles en la blockchain de Ethereum y asignarlos a identificadores legibles por las máquinas que participan en Ethereum, como son direcciones, hashes, y metadatos. Como consecuencia, viene a simular el comportamiento del ENS en la internet tradicional.

Al igual que DNS, ENS funciona con un sistema de nombres jerárquicos separados por puntos llamados dominios. El propietario de un dominio controla dicho dominio y los subdominios subyacentes.

ENS admite resolución inversa, con lo que se pueden asociar metadatos, como nombres canónicos o descripciones de interfaz, con direcciones de Ethereum.

Los dominios ENS, como “x.eth y “x.test son gestionados por contratos inteligentes llamados “Registrars”, los cuales especifican las reglas que rigen la asignación de sus subdominios. Como veremos más adelante, cualquiera puede, siguiendo las reglas impuestas por estos “Registrars” obtener la propiedad de un dominio para su propio uso durante periodos de tiempo, siendo el mínimo un año.

El sistema ENS fue lanzado el 04 de Mayo del 2017, y ha sido evolucionado desde entonces, siendo en la actualidad un sistema totalmente interoperable con la mayor parte de los wallets (CoinBase Wallet, Brave, MyEtherWallet, Mycryto, MetaMask, etc) y las DApps más importantes (Aragon, ChainLink, DappNode, Gitcoin, IPFS, Swarm, Truffle Suite, etc) existentes en el ecosistema blockchain. Para ver el listado completo visitar el siguiente enlace.

 

Arquitectura de ENS

El sistema ENS consta de tres componentes principales: el “ENS Registry”, los “Resolvers”, y los “Registrars” (Figura 1).

 

Arquitectura ENS Master Blockchain Online

Figura 1: Arquitectura de ENS. Fuente

El “ENS Registry” es un contrato inteligente que contiene una lista de todos los dominios y subdominios. Para cada uno de ellos, almacena la siguiente información: el dueño del dominio, el “Resolver” asociado al dominio, y el TTL. El dueño del dominio viene representado por una dirección, que puede ser una EOA (Externally Owned Account), o un smart contract. Los propietarios de dominios en el “ENS Registry” pueden indicar el “Resolver”, el TTL para el dominio, transferir la propiedad del dominio a otra dirección, y cambiar la propiedad de los subdominios. El “ENS Registry” se especifica en el EIP 137 que se puede consultar en el siguiente enlace. El smart contract “ENS”, escrito en Solidity, que implementa el registro ENS, se puede consultar en el siguiente enlace.

Los “Resolvers” son smart contracts responsables de realizar las búsquedas de los recursos asociados a los nombres de dominio. Traducen nombres a direcciones. Estos recursos asociados a los nombres de dominio pueden ser desde una dirección de contrato, un hash, o direcciones IP, entre otros. Cada tipo de recurso define un método o métodos que el “Resolver” debe implementar para proporcionar registros de ese tipo.

Aunque existen muchas implementaciones y versiones de “Resolvers”, existe uno estándar por defecto que se llama Public Resolver”, el cual implementa un “Resolver” de propósito general que es adecuado para la mayoría de los casos de uso de ENS estándar. Permite resolver una variedad de recursos, incluyendo direcciones de wallets y smart contracts, así como contenidos tales como el código fuente de contratos y hashes de Swarm para DApps. El “Public Resolver” implementa los siguientes EIP: EIP 137 – Contract address interface (addr()), EIP 165 – Interface Detection (supportsInterface()), EIP 181 – Reverse resolution (name()), EIP 205 – ABI support (ABI()), EIP 619 – SECP256k1 public keys (pubkey()), EIP 634 – Text records (text()), EIP 1577 – Content hash support (contenthash()), EIP 2304 – Multicoin support (addr()). Se puede consultar el código de Solidity que implementa el smart contract “PublicResolver” a través del siguiente enlace.

Los “Registrars” son los contratos inteligentes que poseen los dominios y emiten subdominios de los dominios a los usuarios siguiendo un conjunto de reglas definidas en dichos contratos. En el sistema ENS existen tres Registrars” principales: “Permanent Registrar”, “Test Registrar”, y “Reverse Registrar”.

El Permanent Registrar” implementa la asignación y la renovación de nombres en el dominio .eth”. El código del mismo y la funcionalidad que implementa se puede consultar en el siguiente enlace.

El Test Registrar” implementa la asignación de nombres de prueba para ser usados en las redes de prueba de Ethereum, los cuales caducan a los 28 días después de que sean reclamados. Maneja el espacio de nombres .test”. El código del mismo se puede consultar en el siguiente enlace.

El Reserve Registrar” gestiona la resolución inversa en ENS. Dicha resolución inversa implementa el proceso de asignación de una dirección de Ethereum a un nombre ENS. Maneja el espacio de nombres .addr.reverse”, y está implementado en el EIP 181. El código del smart contract se puede consultar en el siguiente enlace.

 

Resolviendo un nombre en ENS

La resolución de un nombre en ENS es un proceso que consta de tres pasos.

En el primer paso, se procede a ejecutar el algoritmo “Namehash”, el cual convierte cualquier nombre en un hash de longitud fija que identifica el nombre de forma única. A este hash se le denomina “node”.

En el segundo paso, se procede a realizar una llamada al “ENS Registry” con el nombre a resolver. Si el nombre está registrado en el “ENS Registry”, se devuelve la dirección de su “Resolver” asignado.

En el tercer paso, una vez que se sabe el “Resolver” asignado al nombre buscado, se le llama utilizando el método apropiado acorde al recurso que se solicita. El “Resolver” devuelve el resultado deseado.

Imaginemos que queremos encontrar la dirección del contrato inteligente asociado al nombre “uah.eth”. El código a ejecutar sería el siguiente:

1.- var node = namehash(“uah.eth”);

2.- var resolver = ens.resolver(node);

3.- var address = resolver.addr(node);

 

Estructura de nombres válidos

Un nombre válido está formado por un conjunto de “etiquetas” separadas por puntos. Antes de aplicarles el algoritmo “Namehash”, los nombres se normalizan, usando un proceso llamado normalización UTS-46. Esto garantiza que los nombres en mayúsculas y minúsculas se traten de manera equivalente y que los caracteres no válidos estén prohibidos. Se pueden definir etiquetas de cualquier longitud, pero se recomienda seguir las siguientes reglas:

  • Cada etiqueta no debe superar 64 caracteres.
  • El nombre ENS completo no debe superar 255 caracteres.
  • Las etiquetas no deben comenzar con dígitos.
  • Las etiquetas no deben comenzar ni terminar con guiones.

Para tener más información acerca de la estructura de los nombres se puede consultar el siguiente enlace.

Para tener más información acerca del algoritmo “Namehash” se puede consultar el siguiente enlace.

 

Registros y renovaciones

Cuando un usuario quiere obtener un dominio por primera vez, debe interactuar con un “Registrar”. Como ya hemos explicado, los “Registrars” son contratos inteligentes que gestionan los dominios y que tienen un proceso definido para distribuir los subdominios. El “Registrar” con el que un usuario necesita interactuar depende del dominio que desea obtener. Para dominios .eth hay que interactuar con “Permanent Registrar”, para dominios .test con “Test Registrar”, y para dominios .addr.reverse con Reverse Registrar”.

El propietario de un dominio puede renovar el mismo y extender la fecha de vencimiento en cualquier momento, previo pago de la tarifa estipulada. Si no se hiciese antes de la fecha de vencimiento, cualquier otro usuario podrá registrar el dominio a su nombre, aunque existe un periodo de gracia de 90 días después de que el dominio caduque antes de que esto suceda.

A través de la ENS APP los usuarios podrán buscar cualquier nombre, administrar sus direcciones o recursos a los que apunta y crear subdominios para cada nombre.

 

Dominios .eth

En la actualidad, los dominios .eth son asignados a través de un sistema llamado ENS Permanent Registrar, el cual ha sustituido al anterior sistema ENS Interim Registrar que estaba basado en las subastas de Vickrey.

El nuevo sistema utiliza un método de registro de dominio del tipo FIFS (first-in-first-served), el cual permite registrar un nuevo dominio a través de dos transacciones (registerreveal) en un tiempo aproximado de 5 minutos, a contraposición del anterior método que necesitaba tres transacciones y 5 días hasta que se completaba la subasta.

Con la implementación de Permanent Registrar, se introduce la figura del Controller. El propietario de un nombre de dominio puede establecer diferentes direcciones (Controllers) para delegar la administración del dominio de modo que un no propietario pueda cambiar el Resolver del dominio entre otras cosas.

A día de hoy el coste asociado al registro de un dominio .eth es el siguiente:

  • Si el nombre tiene 5 caracteres o más, el coste es de 5 $ (en ETH) al año.
  • Si el nombre tiene 4 caracteres, el coste es de 160 $ (en ETH) al año.
  • Si el nombre tiene 3 caracteres, el coste es de 640 $ (en ETH) al año.

El coste de los nombres de 3 y 4 caracteres es más alto debido al pequeño número de estos nombres disponibles.

Para adquirir un dominio .eth se puede realizar a través del siguiente enlace.

 

Propiedad del nodo Raíz

Una de las consecuencias que tiene implementar un sistema jerárquico como es el ENS, es que depende de los propietarios del nodo raíz. Desde su nacimiento, hasta la actualidad, con el objetivo de facilitar la posibilidad de actualizar, mantener, y en circunstancias excepcionales, para manejar problemas con el sistema ENS, la raíz de ENS es gestionada por un sistema multifirma 4/7. El objetivo es que en un futuro el sistema ENS se pueda gestionar mediante un sistema de toma de decisiones distribuido. Los propietarios (root key holders) de las claves que intervienen en el proceso multifirma se pueden consultar en el siguiente enlace.

 

Conclusión

ENS (Ethereum Name Server) es un sistema de nombres distribuido, abierto y extensible basado en la cadena de bloques de Ethereum.

Al igual que DNS (Domain Name Server), ENS tiene como objetivo asignar nombres legibles para los humanos, como “uah.eth”, a identificadores legibles por las máquinas, pero con una arquitectura diferente debido a las características de la tecnología blockchain.

 

Referencias