The Ethereum Name Service (ENS) is a decentralised, on-chain naming system built on Ethereum that maps human-readable names ending in .eth to Ethereum addresses, content hashes, multi-coin addresses, and arbitrary text records via ERC-137 compliant smart contracts and pluggable resolver contracts. It functions as the Web3 analogue of DNS, replacing opaque hexadecimal addresses with memorable, self-sovereign labels backed by ERC-721 NFTs and governed by the ENS DAO. Off-chain resolution via CCIP-Read (EIP-3668) extends the system to conventional databases with on-chain verification, reducing gas overhead for high-frequency updates whilst preserving trustless resolution semantics.
Overview
- ENS was launched in May 2017 by Nick Johnson and the Ethereum Foundation and subsequently spun out as an independent project. It became a cornerstone of Web3 UX by giving every participant a memorable, portable, and censor-resistant identity anchor instead of a 42-character hexadecimal address.
- Why it matters:
- Reduces user error when sending cryptocurrency by replacing cryptographic addresses with readable labels.
- Provides a single namespace that wallets, dApps, and browsers can resolve uniformly.
- Creates an on-chain public profile: ENS names can hold avatar, email, social-media handles, and website records, acting as a Self Sovereign Identity hub.
- Governance is fully on-chain through the ENS DAO, funded by a November 2021 retroactive airdrop of the ENS Governance Token, making the protocol one of the most studied examples of On-chain Governance.
- How it works (high-level):
- A hierarchical namespace is partitioned into nodes (hashed via the Namehash algorithm defined in ERC-137).
- The root Registry Smart Contract records the owner, resolver address, and TTL for each node.
- A Registrar contract (ETHRegistrarController) manages auctions and renewals of second-level .eth names; each registered name is wrapped as an ERC-721 NFT transferable in standard marketplaces.
- Resolver contracts translate a node into actual records. The default PublicResolver supports addr (multi-coin via SLIP-0044), contenthash (IPFS/Arweave), text records, and ABI fields.
- Reverse resolution maps an address back to a primary ENS name, enabling human-readable display in any Decentralised Application.
Key Components
- Registry — The single authoritative Smart Contract that stores
owner,resolver, andTTLfor every node in the ENS namespace. It is the root of trust; all other contracts defer to it for ownership checks. - Registrar (ETHRegistrarController) — Manages the .eth second-level domain: name registration, two-step commit-reveal to prevent front-running, annual renewal fees, and grace periods. Each registered name mints an ERC-721 NFT to the owner’s Wallet Address.
- NameWrapper — Introduced in ENS v2, wraps names as ERC-1155 tokens, enabling fine-grained fuse (permission) controls so owners can lock, emancipate, or burn specific capabilities (e.g. prevent sub-name creation).
- Resolvers — Pluggable contracts implementing the
IResolverinterface. The canonical PublicResolver supports:addr(node, coinType)— multi-chain addresses via SLIP-0044contenthash(node)— IPFS, Arweave, and Swarm content hashestext(node, key)— arbitrary key-value metadata (avatar, email, url, com.twitter)ABI(node, contentType)— contract ABI storage
- CCIP-Read / EIP-3668 — An off-chain lookup protocol that lets resolvers redirect clients to a gateway URL, fetch off-chain data, and verify it on-chain with an EIP-712 signature. Enables wildcard DNS-style resolution (e.g.
*.myprotocol.eth) without per-subdomain gas costs. - Namehash (ERC-137) — A recursive hashing algorithm converting
alice.ethinto a 256-bit node ID. Ensures a parent domain cannot spoof sub-names and that the entire hierarchy is authenticated. - ENS DAO — Governs the protocol through an ENS Governance Token (ERC-20). Token holders vote on registrar parameters, treasury allocation, and protocol upgrades via Snapshot off-chain signalling and on-chain timelock execution.
Applications / Use Cases
- Cryptocurrency payments — Users send ETH, ERC-20 tokens, BTC (via SLIP-0044 coinType 0), and other assets to
name.ethinstead of raw addresses. Integrated natively in MetaMask, Rainbow, Coinbase Wallet, and most major wallets. - Decentralised websites — Setting a contenthash record to an IPFS CID makes a site accessible at
name.eth.limovia a centralised gateway or directly in Brave browser’s ENS-aware resolver. Eliminates reliance on ICANN-registered domains for censorship-resistant publishing. - On-chain identity profiles — ENS names serve as public profiles: avatar, bio, social handles, and linked credentials stored in text records, consumed by dApps like OpenSea, Mirror, and Farcaster.
- Multi-chain address book — A single .eth name resolves to native addresses on Bitcoin, Solana, Cosmos, Polkadot, and other chains, providing a universal address aggregation layer across heterogeneous blockchains.
- Smart contract discoverability — Protocols register human-readable names for their contract deployments (e.g.
uniswap.eth,aave.eth), enabling developer tooling and auditing interfaces to reference contracts symbolically rather than by bytecode address. - dApp routing and link resolution — Frameworks like Wagmi and ethers.js resolve ENS names transparently at the SDK level, so developers write
provider.resolveName('vitalik.eth')and receive the underlying address. - DAO treasury management — ENS DAO itself and many sub-DAOs identify multisig wallets and treasury contracts via ENS names, making governance proposals and fund transfers auditable and human-readable.
- DID integration — ENS names map to DIDs via the
did:ensmethod, bridging Web3 naming into the W3C DID ecosystem and enabling Verifiable Credential issuance anchored to .eth names.
Standards & Context
- ERC-137 — Defines the Namehash algorithm, the ENS Registry interface, and the resolver interface. The foundational specification that every ENS component implements.
- ERC-181 — Specifies the reverse resolution contract interface, allowing
addr.reverselookups from address to primary name. - EIP-3668 (CCIP-Read) — Cross-Chain Interoperability Protocol Read: enables off-chain resolver gateways with on-chain verification, dramatically reducing gas for dynamic or large datasets whilst maintaining trustless semantics.
- SLIP-0044 — Satoshi Labs Improvement Proposal defining coinType integers for multi-asset address resolution; ENS resolvers use this to store BTC, LTC, XRP and other addresses against a single name.
- ERC-1155 (NameWrapper) — ENS v2 wraps names as semi-fungible tokens with fuse permissions, inheriting the ERC-1155 standard for flexible ownership models.
- W3C DID Core — ENS names are addressable as DIDs via the
did:ensmethod, aligning with W3C Decentralised Identifier specification and enabling interoperability with Verifiable Credential ecosystems. - ICANN / DNS comparison — ENS deliberately mirrors DNS’s hierarchical namespace model but removes ICANN’s centralised root authority, replacing it with Ethereum’s decentralised consensus. This trade-off sacrifices universal browser support for censorship resistance and self-sovereignty.
Technical Deep Dive
- Namehash algorithm —
namehash('')= 32 zero bytes;namehash(label + '.' + domain)=keccak256(namehash(domain) ++ keccak256(label)). This recursive structure ensures each node in the hierarchy is cryptographically bound to its parent, preventing name spoofing. - Commit-reveal registration — To prevent front-running, ENS registration uses a two-step process: first a commitment hash (
keccak256(name, owner, secret)) is submitted on-chain, and after a minimum wait (typically 1 minute), the reveal transaction registers the name. The secret prevents miners from observing the intent. - Gas economics — Registration fees are denominated in USD and paid in ETH via a price oracle (Chainlink). Annual renewal costs scale with name length to discourage squatting of short names. The fee revenue funds the ENS DAO treasury.
- Wildcard resolution — Via CCIP-Read, a single resolver can handle
*.subdomain.ethwithout individual on-chain entries, enabling protocols to dynamically serve millions of sub-names (e.g. user profiles indexed in a database with cryptographic proofs returned on demand). - Reverse records — The
addr.reversenode allows any Ethereum address to claim a primary ENS name. Wallets display this name as the canonical identity for the address, creating a bidirectional mapping between address and human-readable label.