GALAXY OF TOOLS

CRYPTO SECTOR

ENS Name Normalizer

Normalise an ENS name, flag confusable characters, and compute its namehash, labelhashes and token ID.

Any number of labels: name.eth, pay.name.eth, or a DNS name imported into ENS such as example.com.
    Normalised name
    —
    Namehash (ENSIP-1)
    —
    Token ID of first label (ERC-721, .eth only)
    —
    DNS wire format (hex)
    —
    LabelCode pointsLabelhash (keccak256)

    This checker approximates ENSIP-15: it applies NFC normalisation, lowercasing and a set of invalid-character, hyphen and confusable-script rules. The full standard uses large Unicode mapping tables and emoji sequence rules; a name reported as valid here can still be rejected by an ENSIP-15 library, so verify with the ENS app before registering or sending funds. Informational only, not investment advice.

    Runs entirely in your browser. Nothing you enter or upload is sent to a server.

    ENS name normalizer and namehash calculator

    Ethereum Name Service names such as vitalik.eth are stored on chain not as text but as a 32-byte namehash. Before hashing, a name must be normalised so that Vitalik.ETH, vitalik.eth and a version typed with a decomposed accent all resolve to the same record — and so that look-alike characters cannot be used to impersonate a name. This ENS name normalizer applies NFC normalisation and lowercasing, runs a set of validity and confusable-character checks inspired by ENSIP-15, and computes the namehash, each labelhash, the ERC-721 token ID for a .eth second-level name and the DNS wire-format encoding used by ENS resolvers.

    It is useful when you are integrating ENS in a dapp or script and want to check a hash by hand, when you are about to register a name and want to catch problems early, and when a name someone sent you looks suspicious.

    Everything is computed in your browser with an in-page Keccak-256 implementation; the page never contacts the ENS contracts or any server. It is informational only and not investment advice.

    How to use the ENS Name Normalizer

    1. Type or paste a name into ENS name — with any capitalisation and as many labels as you like.
    2. Read the status badge and the report lines: red items make the name invalid, amber items deserve a closer look, green items describe what was changed.
    3. Copy the Normalised name and the Namehash; the token ID is shown for name.eth registrations.
    4. Check the label table for the code points of each label — handy for spotting a Cyrillic letter hiding in a Latin word.
    5. Verify anything you intend to register or pay in the official ENS app, which runs the full ENSIP-15 normaliser.

    ENS Name Normalizer features

    Namehash per ENSIP-1

    The recursive keccak256 of labels from right to left, starting from 32 zero bytes — matching ethers.js namehash().

    Labelhash and token ID

    Each label’s keccak256, plus the decimal token ID that the .eth registrar NFT uses.

    NFC + lowercase

    Composed Unicode form and case folding, the first two steps of every ENS normaliser.

    Confusable detection

    Cyrillic and Greek letters that mimic Latin ones are named with their code points, and mixed-script labels are flagged.

    Structural rules

    Empty labels, inner underscores, whitespace, invisible characters, punctuation, full-width characters, the “xn--” pattern and sub-3-character .eth labels are all reported.

    DNS wire format

    Length-prefixed label encoding used by ENS’s dnsEncode and wildcard resolution (ENSIP-10).

    How namehash works

    ENSIP-1 defines namehash("") = 0x00…00 and namehash(label + "." + rest) = keccak256(namehash(rest) ‖ keccak256(label)). The name is processed from the right, so vitalik.eth becomes keccak256(namehash("eth") ‖ labelhash("vitalik")), where namehash("eth") is 0x93cdeb70…93fc4ae. Because every level only needs the hash of the level above, a registry can own and delegate subdomains without ever storing the text.

    Labelhash is simply keccak256 of the UTF-8 label. For second-level .eth names the registrar mints an ERC-721 token whose ID is that labelhash read as a 256-bit integer, which is why NFT marketplaces show enormous decimal IDs for ENS names. The Name Wrapper instead uses the namehash as the ERC-1155 ID.

    What ENSIP-15 normalisation adds — and what this page approximates

    ENSIP-15 (2023) replaced the earlier UTS-46 based rules. The full standard ships Unicode mapping tables, a list of allowed emoji sequences, confusable groups per script and rules about combining marks. This tool implements the parts that can be expressed compactly and explains the rest, so treat its verdict as a first pass:

    RuleHereFull ENSIP-15
    NFC normalisation and lowercasingYesYes, with extra character mappings (e.g. ℌ → h)
    Whitespace, control and invisible charactersRejectedRejected
    Underscore only at the start of a labelYesYes
    “--” in positions 3–4RejectedRejected
    Mixed scripts in one labelFlaggedRejected for most script combinations; whole-script confusables also checked
    Latin look-alikes (Cyrillic а, е, о, р, с…)Warned, 20 common casesFull Unicode confusables table
    EmojiAllowed with a noteOnly whitelisted sequences, with FE0F handling
    Combining marks and arabic/indic shaping rulesNot checkedChecked

    Spotting an impersonation

    Homograph attacks register a name that renders like a trusted one — pаypal.eth with a Cyrillic “а” instead of paypal.eth. The code-point column exposes it: a genuine Latin “a” is U+0061, the Cyrillic look-alike is U+0430. Before paying an ENS name, check the namehash against what a block explorer shows for the address you expect, or resolve the name in your wallet and compare the address with the EIP-55 checksum tool. For raw hashes of other text use the hash generator, and to decode a resolver call paste it into the ABI decoder.

    ENS Name Normalizer FAQ

    What is an ENS namehash?

    A 32-byte identifier derived from the name by hashing its labels from right to left with keccak256 (ENSIP-1). The ENS registry stores owners and resolvers by namehash, not by text.

    Why does the ENS name normalizer lowercase my name?

    ENS names are case-insensitive. Every client normalises to lowercase before hashing, so a mixed-case name resolves to exactly the same record as its lowercase form.

    Is this the complete ENSIP-15 algorithm?

    No — it is an approximation. It covers normalisation, lowercasing, structural rules and common confusables, but not the full Unicode mapping and emoji tables. Confirm important names in the ENS app or with the official ens-normalize library.

    How do I get the token ID of a .eth name?

    For a second-level name such as alice.eth the ERC-721 token ID is keccak256("alice") as a decimal integer. The tool shows it under Token ID. Wrapped names use the namehash as an ERC-1155 ID instead.

    Can an ENS name contain emoji?

    Yes, from a whitelist of emoji sequences defined in ENSIP-15. This page allows emoji and reminds you to confirm the exact sequence, because variation selectors and joiners are handled specially.

    Does the page look up who owns the name?

    No. It performs no network requests and does not query the ENS registry; it only computes hashes and checks characters locally.

    You might also need