Skip to main content

ENS Namehash Calculator

EIP-137 namehash and labelhash derivation — all client-side

ENS name

Namehash

0x2d1b301ca7190a631be63cc5c5992836263a3de24788c3f03035c1be790876bb

Derivation chain (EIP-137)

vitalik labelhash:

0xaf2caa1c2ca1d027f1ac823b529d0a67cd144264b2789fa2ea4d63a67c7103cc

node after this label:

0x55fa0b76d2f883883158a03d7f42dfdff9d91a35c1b6a01eca4e670ed3830d73

eth labelhash:

0x4f5b812789fc606be1b3b16908db13fc7a9adf7ca72641f84d75b47069d3d7f0

node after this label:

0x2d1b301ca7190a631be63cc5c5992836263a3de24788c3f03035c1be790876bb

About the ENS Namehash

The Ethereum Name Service resolves human-readable names like vitalik.eth through the EIP-137 namehash algorithm: a recursive Keccak-256 construction that turns a dotted name into a 32-byte node used as the storage key in ENS registry contracts. Getting namehash right by hand is error-prone because every label is hashed separately and combined in order.

This calculator shows the full derivation chain — each label, its labelhash, and the node value after combining it — so you can verify exactly what the ENS registry will look up. Everything is computed locally in your browser.

How to use

  1. Type an ENS name such as vitalik.eth.
  2. The final namehash appears immediately at the top.
  3. Inspect the derivation chain to see each labelhash and intermediate node.
  4. Copy the namehash for use in your contract calls or tests.

Frequently Asked Questions

What is the difference between namehash and labelhash? ▾

A labelhash is the Keccak-256 of a single label like eth. The namehash combines labelhashes recursively from the root, producing the 32-byte node the ENS registry uses as its key.

Does the calculator normalize names? ▾

It lowercases labels and strips trailing dots, which covers standard names. Full ENS normalization (ENSIP-15) handles Unicode edge cases; for those, verify with the official ENS normalization library.

What is the ENS namehash algorithm? ▾

Defined by EIP-137, namehash recursively hashes labels from the rightmost part: namehash('foo.bar.eth') = keccak256(namehash('bar.eth') + keccak256('foo')). The root is the zero hash, and labels are hashed as UTF-8 bytes.

Why do I need namehash instead of just hashing the name? ▾

ENS stores records keyed by namehash in the registry — node lookups, resolver addresses, and reverse records all use it. Hashing the full string directly produces a value no contract recognizes.

Does normalization matter for namehash? ▾

Yes — labels must be ENS-normalized (lowercase, Unicode forms per UTS-46) before hashing. This tool applies the normalization step; skipping it yields hashes that do not match on-chain records.