Comparison of the ENSv2 Contract Names Notion catalog against:
- Sepolia deploy
deploy/sepolia-migration-20260731(deployedAt: 2026-07-30T17:34:25.243Z) - Jeff Lau’s on-chain contract versioning gist
Namespace: v2.ens.eth
Sepolia version: v1
Coin type: addr(0x80aa36a7) (0x80000000 | 11155111)
Latest names ({contract}.v2.ens.eth, impl.{contract}.v2.ens.eth) are aliases of the v1.* names. They must not hold their own addr records.
On every versioned name: text("version")="1.0.0", text("status")="current". Implementation names also get text("proxy") when a protocol proxy exists (namer, universal). Clone implementations (user-registry, wrapper-registry, resolver, hca) have no protocol proxy name.
Do not also register the dotted Notion forms (eth.registry.v2.ens.eth, addr.reverse.v2.ens.eth). Those collide with Jeff aliases and with the registry wildcard.
| Contract | Notion fragment | {contract} |
Latest (alias) | Versioned (set addr) |
Implementation | Sepolia address |
|---|---|---|---|---|---|---|
| RootRegistry | root.registry |
root-registry |
root-registry.v2.ens.eth |
v1.root-registry.v2.ens.eth |
— | 0x8115186e8f2e0b0281e86ab91f0f48ba90364354 |
| ETHRegistry | eth.registry |
eth-registry |
eth-registry.v2.ens.eth |
v1.eth-registry.v2.ens.eth |
— | 0xbdc85dd5b15d7ecb354cd7cb6f2c50b4f2c4f0e2 |
| UserRegistryImpl | impl.registry |
user-registry |
— | — | impl.user-registry.v2.ens.eth → v1.impl.user-registry.v2.ens.eth |
0x624a25d67b59d587752ebec8dded8827dae52050 |
| WrapperRegistryImpl | impl.wrapper-registry |
wrapper-registry |
— | — | impl.wrapper-registry.v2.ens.eth → v1.impl.wrapper-registry.v2.ens.eth |
0x433f81a3e8921fc868ae1a04576f135d9a75b0f2 |
| PermissionedResolverImpl | impl.resolver |
resolver |
— | — | impl.resolver.v2.ens.eth → v1.impl.resolver.v2.ens.eth |
0x9eae5c2730a7dd16bdd1dee6421a1b91e3b0365e |
| ENSV1Resolver | 2to1.resolver |
2to1-resolver |
2to1-resolver.v2.ens.eth |
v1.2to1-resolver.v2.ens.eth |
— | 0xae66c62acae72098bdac57d8e8aed53ef000b2ba |
| ENSV2Resolver | 1to2.resolver |
1to2-resolver |
1to2-resolver.v2.ens.eth |
v1.1to2-resolver.v2.ens.eth |
— | 0x508cb4e4596429ca98a1bb3112d88d18f92456b5 |
| UpgradableUniversalResolverProxy | universal |
universal |
universal.v2.ens.eth |
v1.universal.v2.ens.eth |
text("implementation") = v1.impl.universal.v2.ens.eth |
0xeEeEEEeE14D718C2B47D9923Deab1335E144EeEe |
| ManagedUniversalResolverProxy | — | managed-universal |
managed-universal.v2.ens.eth |
v1.managed-universal.v2.ens.eth |
same impl as universal |
0x6d80F2172CFdEc5730fE683860C33d26fC42e6F1 |
| UniversalResolverV2 | impl.universal |
universal |
— | — | impl.universal.v2.ens.eth → v1.impl.universal.v2.ens.eth (text("proxy") = v1.universal.v2.ens.eth) |
0x4a1817d13e9cf196f471725176355c1234b63c70 |
| PublicResolverV2 | public.resolver |
public-resolver |
public-resolver.v2.ens.eth |
v1.public-resolver.v2.ens.eth |
— | 0xe7b9a25607e02da8145e4eb1836ca539e53f11f7 |
| ETHRegistrar | registrar |
registrar |
registrar.v2.ens.eth |
v1.registrar.v2.ens.eth |
— | 0xa88553f454b77203b0d036a05c894d555eaaa2cc |
| ETHRenewerV1 | renewer |
renewer |
renewer.v2.ens.eth |
v1.renewer.v2.ens.eth |
— | 0x4ad56feb5fc7b8298db06e88fd5cbc41d64602fa |
| StandardRentPriceOracle | oracle |
oracle |
oracle.v2.ens.eth |
v1.oracle.v2.ens.eth |
— | 0x8914b66260eb8c4fff795650c3ae8cd335958987 |
| ReverseRegistrarAdapter | addr.reverse |
reverse-adapter |
reverse-adapter.v2.ens.eth |
v1.reverse-adapter.v2.ens.eth |
— | 0x035ae6188ac22ab79b5018039dfbda4ffe7990e9 |
| DefaultReverseRegistrarAdapter | default.reverse |
default-reverse-adapter |
default-reverse-adapter.v2.ens.eth |
v1.default-reverse-adapter.v2.ens.eth |
— | 0x7a84e241f862d73960d73c26d68c3c8f89f0b18f |
| UnlockedMigrationController | unlocked.migration |
unlocked-migration |
unlocked-migration.v2.ens.eth |
v1.unlocked-migration.v2.ens.eth |
— | 0x2fcf83232b93bd29c59db18aaa1d4b62e9f9fc73 |
| LockedMigrationController | locked.migration |
locked-migration |
locked-migration.v2.ens.eth |
v1.locked-migration.v2.ens.eth |
— | 0x5c39e36a69a9897f08954c71acb1f36e0bd4f409 |
| Graveyard | graveyard |
graveyard |
graveyard.v2.ens.eth |
v1.graveyard.v2.ens.eth |
— | 0xf83fe2658f702a072f3c7b0dc4a0ab8c7b044750 |
| MigrationHelper | helper.migration |
migration-helper |
migration-helper.v2.ens.eth |
v1.migration-helper.v2.ens.eth |
— | 0x1d8c7aa9862f9b823309ad87a4864fb27c575e85 |
| RegistryUpgradeSet | — (was gate.wrapper-registry) |
registry-upgrade-set |
registry-upgrade-set.v2.ens.eth |
v1.registry-upgrade-set.v2.ens.eth |
— | 0x18d2a9dede9b2347f9443783b96954e37e3b7ae6 |
| PublicResolverSet | prset.migration |
public-resolver-set |
public-resolver-set.v2.ens.eth |
v1.public-resolver-set.v2.ens.eth |
— | 0xf2794ebd70c1fa74094a9ec653da1c2df9f5a5a9 |
| ContractNamer proxy | namer |
namer |
namer.v2.ens.eth |
v1.namer.v2.ens.eth |
text("implementation") = v1.impl.namer.v2.ens.eth |
0xa48eb920950d7f4963d1d87f15f195624fbfbd6a |
| ContractNamer impl | — | namer |
— | — | impl.namer.v2.ens.eth → v1.impl.namer.v2.ens.eth |
0xe2dda913acf8378616a2142b820d3ca775b0332d |
| StandaloneHCAFactory | hca |
hca-factory |
hca-factory.v2.ens.eth |
v1.hca-factory.v2.ens.eth |
— | 0x900ff7cf617ef9d802178b4ef480491e3a782672 |
| StandaloneHCAImplementation | — | hca |
— | — | impl.hca.v2.ens.eth → v1.impl.hca.v2.ens.eth |
0xaa761541620fc1a42bb701a26a9f107a9df1e904 |
| HCAOwnerAndSessionValidator | — | hca-validator |
hca-validator.v2.ens.eth |
v1.hca-validator.v2.ens.eth |
— | 0x5f249fca8bb4949105651146858c347e8bfb0f7e |
HCAUpgradeGate (ApprovedUpgradeGate) |
gate.wrapper-registry (wrong target) |
hca-upgrade-gate |
hca-upgrade-gate.v2.ens.eth |
v1.hca-upgrade-gate.v2.ens.eth |
— | 0x3a121fc283e53d2f45564edf97dc8685ede35005 |
| TrustedHCASet | — | trusted-hca-set |
trusted-hca-set.v2.ens.eth |
v1.trusted-hca-set.v2.ens.eth |
— | 0xb3240a0e6c80984c14def037f4f540edc3502b48 |
| LabelStore | labelstore |
labelstore |
labelstore.v2.ens.eth |
v1.labelstore.v2.ens.eth |
— | 0x532cd0cc4ac0793d838f71a67d29b2d790d18777 |
| Contract | Notion | Proposed name | Sepolia | Action |
|---|---|---|---|---|
| BatchRegistrar | unnamed (premigration) | v1.batch-registrar.v2.ens.eth |
0x8b16d15f3e51074d0e06f3cf4a0053f7cb92a7fb |
optional |
| DNSV1MirrorRootBatchRegistrar | — | v1.dns-v1-mirror.v2.ens.eth |
0xdc5c31f7ea5e31efc6d5c68dd568f4c4a169804b |
optional |
| VerifiableFactory | unnamed (trustless) | — | 0x10dc6333cdfe1fcef624c6e0a8221b91804cd7ef |
skip |
| DefaultReverseRegistrarHCAAdapter | leftover of default.reverse |
— | 0x5e2d105f1e6be8444c4ed96c06806093b829644e |
skip; current adapter is 0x7a84…b18f |
| MockUSDC | — | — | 0x768f42455a2d082e23ceef7d51e5787c82d67a39 |
skip |
| MockDAI | — | — | 0x5472c5725a00b7ba11f0794a79d08ade6f4683bd |
skip |
Wire these the same way when those addresses exist:
| Notion fragment | {contract} |
Versioned name |
|---|---|---|
dns.resolver |
dns-resolver |
v1.dns-resolver.v2.ens.eth |
dnstxt |
dnstxt |
v1.dnstxt.v2.ens.eth |
dnsalias |
dnsalias |
v1.dnsalias.v2.ens.eth |
batch.gateways |
batch-gateways |
v1.batch-gateways.v2.ens.eth |
dnssec.gateways |
dnssec-gateways |
v1.dnssec-gateways.v2.ens.eth |
Use a suffix that is not a {contract} parent:
*.reg.v2.ens.eth→findRegistry(name)- Example:
vitalik.eth.reg.v2.ens.eth→ ETHRegistry entry forvitalik.eth
Not *.registry.v2.ens.eth and not *.v2.ens.eth.
- Notion is a name-fragment + how-to-name catalog, not a versioned registry. Jeff requires
v{N}.{contract}.{namespace}plus aliases andtextrecords. impl.registryin Notion is UserRegistryImpl, not the implementation of ETHRegistry. Root / eth / user registries are three identities.- WrapperRegistry upgrades on this deploy go through
RegistryUpgradeSet, notApprovedUpgradeGate. The liveApprovedUpgradeGateisHCAUpgradeGate. ReverseRegistrarHCAAAdapteris a typo; Solidity isReverseRegistrarAdapter.HCAFactorydeployed asStandaloneHCAFactory.- Client-facing Universal Resolver is the top URP
0xeEeE…EeEe, not a v1UniversalResolverartifact. setupEnsDotEth()incontracts/script/setup.tsonly names local non-fork setups; these names are not registered on Sepolia by the 2026-07-30 deploy.