Skip to content

Instantly share code, notes, and snippets.

@makoto
Created August 24, 2026 07:24
Show Gist options
  • Select an option

  • Save makoto/a393462743b5b4d6e5d4e77bd83f0fbd to your computer and use it in GitHub Desktop.

Select an option

Save makoto/a393462743b5b4d6e5d4e77bd83f0fbd to your computer and use it in GitHub Desktop.
ENSv2 contract names: Notion fragments mapped to Jeff versioning under v2.ens.eth, with Sepolia 2026-07-30 addresses

ENSv2 contract names — Sepolia (2026-07-30) × Jeff versioning

Comparison of the ENSv2 Contract Names Notion catalog against:

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.


Register on Sepolia

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.ethv1.impl.user-registry.v2.ens.eth 0x624a25d67b59d587752ebec8dded8827dae52050
WrapperRegistryImpl impl.wrapper-registry wrapper-registry impl.wrapper-registry.v2.ens.ethv1.impl.wrapper-registry.v2.ens.eth 0x433f81a3e8921fc868ae1a04576f135d9a75b0f2
PermissionedResolverImpl impl.resolver resolver impl.resolver.v2.ens.ethv1.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.ethv1.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.ethv1.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.ethv1.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

Optional / skip

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

Notion names not on this Sepolia deploy

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

Registry wildcard (separate from this table)

Use a suffix that is not a {contract} parent:

  • *.reg.v2.ens.ethfindRegistry(name)
  • Example: vitalik.eth.reg.v2.ens.eth → ETHRegistry entry for vitalik.eth

Not *.registry.v2.ens.eth and not *.v2.ens.eth.


Notes vs Notion / Sepolia

  • Notion is a name-fragment + how-to-name catalog, not a versioned registry. Jeff requires v{N}.{contract}.{namespace} plus aliases and text records.
  • impl.registry in Notion is UserRegistryImpl, not the implementation of ETHRegistry. Root / eth / user registries are three identities.
  • WrapperRegistry upgrades on this deploy go through RegistryUpgradeSet, not ApprovedUpgradeGate. The live ApprovedUpgradeGate is HCAUpgradeGate.
  • ReverseRegistrarHCAAAdapter is a typo; Solidity is ReverseRegistrarAdapter.
  • HCAFactory deployed as StandaloneHCAFactory.
  • Client-facing Universal Resolver is the top URP 0xeEeE…EeEe, not a v1 UniversalResolver artifact.
  • setupEnsDotEth() in contracts/script/setup.ts only names local non-fork setups; these names are not registered on Sepolia by the 2026-07-30 deploy.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment