Name processing

When interacting with Nad Name Service smart-contracts directly, note that names are not stored in their human readable format. We must process the name before it can be used by a smart-contract by execute below steps in order:

  • Name normalization

  • Name hash

Name normalization

Normalization is the process of standardizing a name before passing it through the Namehash algorithm. It's crucial to normalize all input consistently, as even a small variation, such as a difference between uppercase and lowercase letters, can result in a completely different namehash.

For example, Salmo.Nad normalizes to salmo.nad. This ensures that no matter how the user types in the name, the correct node is used.

Using viem:

import { normalize } from 'viem/ens'

const normalizedName = normalize('Salmo.Nad') 
// => salmo.nad

Using ethersjs(v6):

import { ensNormalize, namehash } from "ethers/hash";

const normalizedName = ensNormalize('Salmo.Nad')
// => salmo.nad

Namehash

You must normalize names before creating a namehash.

In NNS core smart-contracts, names are stored as a hash instead of the raw string for optimization purpose. The hashed value is called a node , which is a hex-encoded 32-byte value that is derived from the name using the namehash algorithm from ENS ENSIP-1.

Using viem:

import { namehash, normalize } from "viem/ens";

const normalizedName = normalize('salmo.nad');
const node = namehash(normalizedName);

Using ethersjs(v6):

import { ensNormalize, namehash } from "ethers/hash";

const normalizedName = ensNormalize('salmo.nad')
const node = namehash(normalizedName)

Last updated