ENSv2 Overview
Welcome to the next evolution of the Ethereum Name Service!
ENSv2 introduces a suite of upgraded smart-contracts designed to make the protocol more scalable, modular and future-proof. This section will outline the high-level architecture, guiding principles and migration strategy for ENSv2.
What's new in ENSv2?
- Hierarchical Registries - While ENSv1 used a single flat registry for all
names, ENSv2 uses a hierarchical model where a full
name like
sub.alice.ethis a chain of entries across registries linked by subregistry pointers. Name owners can deploy their own subname registry on demand. Registries and resolvers are deployed as proxies via the Verifiable Factory. - Permissions as Standard - All of the functionality enabled by the Name Wrapper in ENSv1 has been integrated into the core of ENSv2 via a new role-based permission system called Enhanced Access Control.
- Shorter Grace Period - The grace period has been reduced from 90 days in ENSv1 to 28 days. During this window, the expired name can still be renewed (by anyone, not just the owner). After the grace period, names enter a temporary premium period.
- Per-Account Resolvers - Rather than sharing a single Public Resolver, every account gets its own Permissioned Resolver proxy with fine-grained per-record permissions and record aliasing.
What hasn't changed?
- Resolvers - while we have developed new resolver contracts to take advantage of the changed environment enabled by ENSv2, the resolver interface remains the same. Custom resolver implementations are fully supported.
- True Ownership - ENSv2 continues to prioritize trust minimization, enabling you to own your name fully, without having to worry about interference from centralized third-parties.
- Truly multi-chain - ENS continues to support all L2s.
Architecture
| Page | Description |
|---|---|
| Registry Hierarchy | Hierarchical registry model, tree structure, resolution, namespace aliasing |
| Enhanced Access Control | Role-based permission system replacing ENSv1 fuses |
| ERC1155Singleton | Gas-optimized token standard with single ownership per token |
| Mutable Token IDs | Dynamic token IDs that protect against permission leaks and griefing |
| Hidden Contract Accounts | Smart-account attribution for HCA proxy wallets |
| Verifiable Factory | Deterministic CREATE2 proxy deployment with on-chain verification |
Contracts
| Page | Description |
|---|---|
| Permissioned Registry | Tokenized registry managing name ownership, state, and permissions |
| Permissioned Resolver | Per-account resolver with per-record roles and record aliasing |
| ETH Registrar | Commit-reveal registration and renewal for .eth names |
| Universal Resolver V2 | Single entry point for name resolution across the hierarchy |
| DNS Name Resolution | Resolving DNS domain names through the ENS protocol |
| Reverse Resolution | Primary names and multi-chain reverse resolution |
Guides
| Page | Description |
|---|---|
| Migration | Guide to migrating ENSv1 names (locked, unlocked, unwrapped) to ENSv2 |
| For App Developers | What changes for apps that resolve ENS names |
| For Contract Developers | Tutorial: build a subname registrar on the Permissioned Registry |
| Registry Template | Building custom registries, configuration patterns, emancipation |
| Indexing | Events and functions for building indexers and subgraphs |
| FAQ | Frequently asked questions about ENSv2 |
Deployments (Sepolia)
| Contract | Address |
|---|---|
| ETHRegistry | 0xDEDB92913A25abE1f7BCDD85D8A344a43B398B67 |
| ETHRegistrar | 0x8c2E866B439358c41AE05De9cbE8A00BFEFafFcA |
| StandardRentPriceOracle | 0xe19D37839F42F7d2694D8C5712f412C66A218161 |
| VerifiableFactory | 0xD2a632D8a8b67c2c4398c255CbD7aF8dd7236198 |
| UserRegistryImpl | 0x0F99e7Ea74903AfCB7224d0354fD7428A6f92917 |
| PermissionedResolverImpl | 0xdcE5205A553573FFd47629327DDdf36186022FfA |
| HCAFactory | 0x358680728dEDb552adaA9f5eb5d4395B291Cf943 |
| LockedMigrationController | 0xF91c34ED840889Ed96F806f882fD50506A336Edb |
| UnlockedMigrationController | 0x056138Ef5660F7113a3B0ADC08ac3683310e7FBC |
| MigrationHelper | 0x11Cfa7E034DaFB7439cC1CC8b6e547F5C82ad021 |
| USDC (payment token) | 0xBA11ebdB3f9a2c5946D8629517f06364E53A2E10 |
| DAI (payment token) | 0x2922bCD677Af690fCD1eCC699519e4bfaBc73fF8 |