From cb7b275c595f08ddfa5f70daa023199cd3e092a7 Mon Sep 17 00:00:00 2001 From: Simon Emanuel Schmid Date: Thu, 30 Oct 2025 19:43:55 +0100 Subject: [PATCH 01/10] Add ENSv2 readiness page to navigation --- src/components/HomePage.tsx | 1 + vocs.config.tsx | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/src/components/HomePage.tsx b/src/components/HomePage.tsx index 83210269..8be97e4e 100644 --- a/src/components/HomePage.tsx +++ b/src/components/HomePage.tsx @@ -58,6 +58,7 @@ const navigation = [ ['Name Wrapper', '/wrapper/overview'], ['Subgraph', '/web/subgraph'], ['Sign In With Ethereum (SIWE)', '/web/siwe'], + ['ENSv2 Readiness', '/web/ensv2-readiness'], ], }, ] diff --git a/vocs.config.tsx b/vocs.config.tsx index 0c88aa6f..1bca9083 100644 --- a/vocs.config.tsx +++ b/vocs.config.tsx @@ -161,6 +161,10 @@ export default defineConfig({ text: 'Tools and Libraries', link: '/web/libraries', }, + { + text: 'ENSv2 Readiness', + link: '/web/ensv2-readiness', + }, { text: 'Web & Querying', items: [ From 2c79a98adb5152f0236414b31fe5ef9daa9b03fe Mon Sep 17 00:00:00 2001 From: Simon Emanuel Schmid Date: Thu, 30 Oct 2025 19:44:28 +0100 Subject: [PATCH 02/10] Preparing for ENSv2: Universal Resolver --- src/pages/web/ensv2-readiness.mdx | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 src/pages/web/ensv2-readiness.mdx diff --git a/src/pages/web/ensv2-readiness.mdx b/src/pages/web/ensv2-readiness.mdx new file mode 100644 index 00000000..a9c4baa7 --- /dev/null +++ b/src/pages/web/ensv2-readiness.mdx @@ -0,0 +1,24 @@ +# Preparing for ENSv2 [Everything you need to know to prepare your application for ENSv2.] + +Preparing an application for [ENSv2](/contracts/ensv2/overview) should be as simple as updating to the latest version of a [supported library](/web/libraries). At the time of writing, not all libraries added support for ENSv2. Here is the current status: +- [viem >= v2.35.0](https://github.com/wevm/viem/blob/main/src/CHANGELOG.md#2350) +- ethers.js: Not published yet. [Work in progress on v6.16.0](https://github.com/ethers-io/ethers.js/tree/wip-v6.16.0-ens) +- web3.js: Deprecated + +Following on this page are some integration-specific features of ENS that will be important to support in order to be ready for ENSv2: + +## Universal Resolver + +Although ENSv2 is designed with multi-chain in mind, resolution always starts on +Ethereum mainnet. In order to prepare for ENSv2, a new Universal Resolver [was deployed](https://eth.blockscout.com/address/0xeEeEEEeE14D718C2B47D9923Deab1335E144EeEe) +which acts as the canonical entry point and can be updated in the future if needed. + +Applications integrating ENS resolution need to switch over to the new Universal Resolver. As described above, this might be as simple as just update the according library to the latest version which supports Universal Resolver. + +Learn more about the [Universal Resolver here](/resolvers/universal) and about the [resolution process in general here](/resolution). + +### Test + +To test if an integration uses the Universal Resolver, one can simply try to resolve the address for `ur.gtest.eth`. It should return `0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE` + +## DNS Resolution \ No newline at end of file From 5bc925cbcad1e00fcf1f183cf2259d5c167284c7 Mon Sep 17 00:00:00 2001 From: Simon Emanuel Schmid Date: Thu, 30 Oct 2025 20:05:16 +0100 Subject: [PATCH 03/10] Add CCIP Read section --- src/pages/web/ensv2-readiness.mdx | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/src/pages/web/ensv2-readiness.mdx b/src/pages/web/ensv2-readiness.mdx index a9c4baa7..b7a37a1a 100644 --- a/src/pages/web/ensv2-readiness.mdx +++ b/src/pages/web/ensv2-readiness.mdx @@ -1,6 +1,7 @@ # Preparing for ENSv2 [Everything you need to know to prepare your application for ENSv2.] Preparing an application for [ENSv2](/contracts/ensv2/overview) should be as simple as updating to the latest version of a [supported library](/web/libraries). At the time of writing, not all libraries added support for ENSv2. Here is the current status: + - [viem >= v2.35.0](https://github.com/wevm/viem/blob/main/src/CHANGELOG.md#2350) - ethers.js: Not published yet. [Work in progress on v6.16.0](https://github.com/ethers-io/ethers.js/tree/wip-v6.16.0-ens) - web3.js: Deprecated @@ -9,8 +10,8 @@ Following on this page are some integration-specific features of ENS that will b ## Universal Resolver -Although ENSv2 is designed with multi-chain in mind, resolution always starts on -Ethereum mainnet. In order to prepare for ENSv2, a new Universal Resolver [was deployed](https://eth.blockscout.com/address/0xeEeEEEeE14D718C2B47D9923Deab1335E144EeEe) +Although ENSv2 is designed with multi-chain in mind, resolution always starts on +Ethereum Mainnet. In order to prepare for ENSv2, a new Universal Resolver [was deployed](https://eth.blockscout.com/address/0xeEeEEEeE14D718C2B47D9923Deab1335E144EeEe) which acts as the canonical entry point and can be updated in the future if needed. Applications integrating ENS resolution need to switch over to the new Universal Resolver. As described above, this might be as simple as just update the according library to the latest version which supports Universal Resolver. @@ -21,4 +22,15 @@ Learn more about the [Universal Resolver here](/resolvers/universal) and about t To test if an integration uses the Universal Resolver, one can simply try to resolve the address for `ur.gtest.eth`. It should return `0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE` -## DNS Resolution \ No newline at end of file +## CCIP Read + +Already with ENSv1 it is possible to delegate resolution from Ethereum Mainnet to an L2 or completely offchain with [CCIP Read as specified in ERC-3668](http://localhost:5173/learn/ccip-read#layer-2--offchain-resolution). +All libraries mentioned above already implement CCIP Read. That being said, not all integrations do it properly. Since ENSv2 will introduction the option to store a name on Ethereum Mainnet, Namechain or any other supported L2, support for CCIP-read will be fundamental. + +Learn more about [CCIP-Read, Offchain and L2 resolvers here](/resolvers/ccip-read). + +### Test + +To test if an integrations properly implements CCIP Read, one can simply try to resolve `test.offchaindemo.eth` which should return address: `0x779981590E7Ccc0CFAe8040Ce7151324747cDb97` + +{/* ## DNS Resolution */} From da6ebf1c12a3d36df97b4c49367b71cf08aec520 Mon Sep 17 00:00:00 2001 From: Simon Emanuel Schmid Date: Thu, 30 Oct 2025 20:07:56 +0100 Subject: [PATCH 04/10] Fix typos in ENSv2 readiness guide MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Fix grammar: "just update" → "just updating" - Replace "according" with "appropriate" for better clarity - Fix typo: "will introduction" → "will introduce" - Fix grammar: "an integrations" → "an integration" - Fix localhost URL to use relative path 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- src/pages/web/ensv2-readiness.mdx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/pages/web/ensv2-readiness.mdx b/src/pages/web/ensv2-readiness.mdx index b7a37a1a..7791948c 100644 --- a/src/pages/web/ensv2-readiness.mdx +++ b/src/pages/web/ensv2-readiness.mdx @@ -14,7 +14,7 @@ Although ENSv2 is designed with multi-chain in mind, resolution always starts on Ethereum Mainnet. In order to prepare for ENSv2, a new Universal Resolver [was deployed](https://eth.blockscout.com/address/0xeEeEEEeE14D718C2B47D9923Deab1335E144EeEe) which acts as the canonical entry point and can be updated in the future if needed. -Applications integrating ENS resolution need to switch over to the new Universal Resolver. As described above, this might be as simple as just update the according library to the latest version which supports Universal Resolver. +Applications integrating ENS resolution need to switch over to the new Universal Resolver. As described above, this might be as simple as just updating the appropriate library to the latest version which supports Universal Resolver. Learn more about the [Universal Resolver here](/resolvers/universal) and about the [resolution process in general here](/resolution). @@ -24,13 +24,13 @@ To test if an integration uses the Universal Resolver, one can simply try to res ## CCIP Read -Already with ENSv1 it is possible to delegate resolution from Ethereum Mainnet to an L2 or completely offchain with [CCIP Read as specified in ERC-3668](http://localhost:5173/learn/ccip-read#layer-2--offchain-resolution). -All libraries mentioned above already implement CCIP Read. That being said, not all integrations do it properly. Since ENSv2 will introduction the option to store a name on Ethereum Mainnet, Namechain or any other supported L2, support for CCIP-read will be fundamental. +Already with ENSv1 it is possible to delegate resolution from Ethereum Mainnet to an L2 or completely offchain with [CCIP Read as specified in ERC-3668](https://eips.ethereum.org/EIPS/eip-3668). +All libraries mentioned above already implement CCIP Read. That being said, not all integrations do it properly. Since ENSv2 will introduce the option to store a name on Ethereum Mainnet, Namechain or any other supported L2, support for CCIP-read will be fundamental. Learn more about [CCIP-Read, Offchain and L2 resolvers here](/resolvers/ccip-read). ### Test -To test if an integrations properly implements CCIP Read, one can simply try to resolve `test.offchaindemo.eth` which should return address: `0x779981590E7Ccc0CFAe8040Ce7151324747cDb97` +To test if an integration properly implements CCIP Read, one can simply try to resolve `test.offchaindemo.eth` which should return the address: `0x779981590E7Ccc0CFAe8040Ce7151324747cDb97` {/* ## DNS Resolution */} From 6d12a741613502d76e9b77e05f11f2a24815aa48 Mon Sep 17 00:00:00 2001 From: Simon Emanuel Schmid Date: Thu, 30 Oct 2025 20:55:17 +0100 Subject: [PATCH 05/10] Rewrite ENSv2 readiness guide to match docs style MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Add context about ENSv2 and Namechain as primary L2 - Convert formal tone to conversational "you" style throughout - Break complex sentences into shorter, punchier ones - Change passive voice to active voice - Rename generic "Test" headers to descriptive ones - Clarify that supported libraries handle everything automatically - Position technical sections as educational rather than required steps - Fix CCIP Read link 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- src/pages/web/ensv2-readiness.mdx | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/src/pages/web/ensv2-readiness.mdx b/src/pages/web/ensv2-readiness.mdx index 7791948c..b0db3cc4 100644 --- a/src/pages/web/ensv2-readiness.mdx +++ b/src/pages/web/ensv2-readiness.mdx @@ -1,36 +1,37 @@ # Preparing for ENSv2 [Everything you need to know to prepare your application for ENSv2.] -Preparing an application for [ENSv2](/contracts/ensv2/overview) should be as simple as updating to the latest version of a [supported library](/web/libraries). At the time of writing, not all libraries added support for ENSv2. Here is the current status: +ENSv2 brings multi-chain support and improved architecture to ENS. While names can still be stored on Ethereum Mainnet, ENSv2 introduces Namechain as the primary Layer 2 for ENS, with support for additional L2s as well. To ensure your application works seamlessly with ENSv2, you'll need to make a few key updates. + +The good news? For most applications, preparing for ENSv2 is as simple as updating to the latest version of a [supported library](/web/libraries). At the time of writing, not all libraries have added ENSv2 support yet. Here's the current status: - [viem >= v2.35.0](https://github.com/wevm/viem/blob/main/src/CHANGELOG.md#2350) - ethers.js: Not published yet. [Work in progress on v6.16.0](https://github.com/ethers-io/ethers.js/tree/wip-v6.16.0-ens) - web3.js: Deprecated -Following on this page are some integration-specific features of ENS that will be important to support in order to be ready for ENSv2: +If you're using a supported library, it should handle everything automatically. The sections below explain what's happening under the hood and how to test that your integration is working correctly: ## Universal Resolver -Although ENSv2 is designed with multi-chain in mind, resolution always starts on -Ethereum Mainnet. In order to prepare for ENSv2, a new Universal Resolver [was deployed](https://eth.blockscout.com/address/0xeEeEEEeE14D718C2B47D9923Deab1335E144EeEe) -which acts as the canonical entry point and can be updated in the future if needed. +Even though ENSv2 supports multi-chain, all resolution starts on Ethereum Mainnet. ENS deployed a [new Universal Resolver](https://eth.blockscout.com/address/0xeEeEEEeE14D718C2B47D9923Deab1335E144EeEe) that acts as the canonical entry point. This resolver can be updated in the future if needed. -Applications integrating ENS resolution need to switch over to the new Universal Resolver. As described above, this might be as simple as just updating the appropriate library to the latest version which supports Universal Resolver. +Your application needs to use this new Universal Resolver. As mentioned above, updating to the latest version of your library should handle this automatically. Learn more about the [Universal Resolver here](/resolvers/universal) and about the [resolution process in general here](/resolution). -### Test +### Testing Universal Resolver Support -To test if an integration uses the Universal Resolver, one can simply try to resolve the address for `ur.gtest.eth`. It should return `0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE` +To test if your integration uses the Universal Resolver, try resolving the address for `ur.gtest.eth`. It should return `0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE`. ## CCIP Read -Already with ENSv1 it is possible to delegate resolution from Ethereum Mainnet to an L2 or completely offchain with [CCIP Read as specified in ERC-3668](https://eips.ethereum.org/EIPS/eip-3668). -All libraries mentioned above already implement CCIP Read. That being said, not all integrations do it properly. Since ENSv2 will introduce the option to store a name on Ethereum Mainnet, Namechain or any other supported L2, support for CCIP-read will be fundamental. +ENSv1 already supports delegating resolution from Ethereum Mainnet to an L2 or completely offchain using [CCIP Read (ERC-3668)](/learn/ccip-read). All the libraries mentioned above implement CCIP Read. However, not all integrations handle it properly. + +With ENSv2, you can store names on Ethereum Mainnet, Namechain, or any other supported L2. This makes CCIP Read support essential for your integration to work correctly. Learn more about [CCIP-Read, Offchain and L2 resolvers here](/resolvers/ccip-read). -### Test +### Testing CCIP Read Support -To test if an integration properly implements CCIP Read, one can simply try to resolve `test.offchaindemo.eth` which should return the address: `0x779981590E7Ccc0CFAe8040Ce7151324747cDb97` +To test if your integration properly implements CCIP Read, try resolving `test.offchaindemo.eth`. It should return the address `0x779981590E7Ccc0CFAe8040Ce7151324747cDb97`. {/* ## DNS Resolution */} From 092d1e8f7938220c06138e4aa0a5e8cbd378e624 Mon Sep 17 00:00:00 2001 From: Simon Emanuel Schmid Date: Thu, 30 Oct 2025 22:06:04 +0100 Subject: [PATCH 06/10] Add DNS resolution section to ENSv2 readiness guide MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Explain importance of detecting DNS names alongside .eth names - Show common mistake: regex that only matches .eth domains - Provide correct regex pattern for matching all valid domains - Add info callout recommending library use over custom regex - Include real examples: ensfairy.xyz and ses.fkey.id - Link to DNS integration documentation 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- src/pages/web/ensv2-readiness.mdx | 34 ++++++++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/src/pages/web/ensv2-readiness.mdx b/src/pages/web/ensv2-readiness.mdx index b0db3cc4..2ffef737 100644 --- a/src/pages/web/ensv2-readiness.mdx +++ b/src/pages/web/ensv2-readiness.mdx @@ -34,4 +34,36 @@ Learn more about [CCIP-Read, Offchain and L2 resolvers here](/resolvers/ccip-rea To test if your integration properly implements CCIP Read, try resolving `test.offchaindemo.eth`. It should return the address `0x779981590E7Ccc0CFAe8040Ce7151324747cDb97`. -{/* ## DNS Resolution */} +## DNS Resolution + +ENS supports importing DNS names into ENS, allowing traditional domain names to work alongside .eth names. It's important that your application correctly also detects DNS names to avoid false positives. + +### Common Mistake: Only Matching .eth + +Many integrations use a regex that only matches `.eth` domains: + +```regex +^[a-zA-Z0-9-]+\.eth$ +``` + +This is **incorrect** because it excludes DNS names imported into ENS (like `ensfairy.xyz`). + +### Correct Pattern: Match All Valid Domains + +Instead, your integration should match any valid domain name with a regex like this: + +```regex +^(?:[\dA-Za-z-]+\.)+[A-Za-z]{2,}$ +``` + +:::info +The above regex is a simplification. An actual implementation is more complex. Use a library to detect an ENS name. +::: + +This pattern correctly matches: + +- `.eth` names like `vitalik.eth` +- DNS names like `ensfairy.xyz` +- Subdomains like `ses.fkey.id` + +Learn more about [DNS integration here](/learn/dns). From cc38b6d2acdb32f8aedb26347710f8135a2d5467 Mon Sep 17 00:00:00 2001 From: Simon Emanuel Schmid Date: Thu, 30 Oct 2025 23:07:57 +0100 Subject: [PATCH 07/10] Add multichain configuration section to ENSv2 readiness guide MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Explain that ENS resolution always uses Mainnet even on L2s - Show how to configure both L2 (Base) and Mainnet together - Provide code examples for Wagmi, Viem, and Ethers - Use library defaults instead of specific RPC URLs - Clarify that Wagmi auto-uses Mainnet for ENS resolution - Show explicit mainnet client usage for Viem and Ethers 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- src/pages/web/ensv2-readiness.mdx | 65 ++++++++++++++++++++++++++++++- 1 file changed, 64 insertions(+), 1 deletion(-) diff --git a/src/pages/web/ensv2-readiness.mdx b/src/pages/web/ensv2-readiness.mdx index 2ffef737..1c497c94 100644 --- a/src/pages/web/ensv2-readiness.mdx +++ b/src/pages/web/ensv2-readiness.mdx @@ -12,7 +12,7 @@ If you're using a supported library, it should handle everything automatically. ## Universal Resolver -Even though ENSv2 supports multi-chain, all resolution starts on Ethereum Mainnet. ENS deployed a [new Universal Resolver](https://eth.blockscout.com/address/0xeEeEEEeE14D718C2B47D9923Deab1335E144EeEe) that acts as the canonical entry point. This resolver can be updated in the future if needed. +Even though ENSv2 supports multi-chain, all resolution starts on Ethereum Mainnet. ENS deployed a [new Universal Resolver](https://eth.blockscout.com/address/0xeEeEEEeE14D718C2B47D9923Deab1335E144EeEe) that acts as the canonical entry point. This resolver will be updated when ENSv2 launches. Your application needs to use this new Universal Resolver. As mentioned above, updating to the latest version of your library should handle this automatically. @@ -67,3 +67,66 @@ This pattern correctly matches: - Subdomains like `ses.fkey.id` Learn more about [DNS integration here](/learn/dns). + +## Multichain Considerations + +Even if your application only operates on an L2 like Base, ENS resolution always starts on Ethereum Mainnet. This means you need to configure Mainnet alongside your L2 chain. + +### Configuring Both L2 and Mainnet + +Here's how to set up your application to use Base (or another L2) while ensuring ENS resolution works correctly by including Mainnet: + +:::code-group + +```ts [Viem] +import { createPublicClient, http } from 'viem' +import { base, mainnet } from 'viem/chains' + +// Client for Base transactions +const baseClient = createPublicClient({ + chain: base, + transport: http(), +}) + +// Client for ENS resolution on Mainnet +const mainnetClient = createPublicClient({ + chain: mainnet, + transport: http(), +}) + +// Use mainnetClient for ENS resolution +const ensAddress = await mainnetClient.getEnsAddress({ + name: 'vitalik.eth', +}) +``` + +```tsx [Wagmi] +import { createConfig, http } from 'wagmi' +import { base, mainnet } from 'wagmi/chains' + +export const config = createConfig({ + chains: [base, mainnet], // Include both your L2 and Mainnet + transports: { + [base.id]: http(), + [mainnet.id]: http(), + }, +}) + +// ENS resolution will automatically use Mainnet +``` + + +```ts [Ethers] +import { ethers } from 'ethers' + +// Provider for Base +const baseProvider = new ethers.getDefaultProvider('base') + +// Provider for ENS resolution on Mainnet +const mainnetProvider = new ethers.getDefaultProvider('mainnet') + +// Use mainnetProvider for ENS lookups +const address = await mainnetProvider.resolveName('vitalik.eth') +``` + +::: From 1d6897098862f7d42cbad4f0044e3904727ada21 Mon Sep 17 00:00:00 2001 From: Simon Emanuel Schmid Date: Fri, 31 Oct 2025 00:04:31 +0100 Subject: [PATCH 08/10] Add L2 address resolution examples to multichain section MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Show how to resolve Base addresses from ENS names - Add Wagmi hook example with useEnsAddress and chainId - Add Viem example using coinType for Base - Add Ethers example using getResolver and getAddress - Focus examples on L2-specific address resolution 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- src/pages/web/ensv2-readiness.mdx | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/src/pages/web/ensv2-readiness.mdx b/src/pages/web/ensv2-readiness.mdx index 1c497c94..bb0bfab4 100644 --- a/src/pages/web/ensv2-readiness.mdx +++ b/src/pages/web/ensv2-readiness.mdx @@ -94,14 +94,16 @@ const mainnetClient = createPublicClient({ transport: http(), }) -// Use mainnetClient for ENS resolution -const ensAddress = await mainnetClient.getEnsAddress({ +// Get the Base address for this ENS name +const baseAddress = await mainnetClient.getEnsAddress({ name: 'vitalik.eth', + coinType: 8453, // Base chain ID }) ``` ```tsx [Wagmi] import { createConfig, http } from 'wagmi' +import { useEnsAddress } from 'wagmi' import { base, mainnet } from 'wagmi/chains' export const config = createConfig({ @@ -112,10 +114,16 @@ export const config = createConfig({ }, }) -// ENS resolution will automatically use Mainnet +// In your component - ENS resolution automatically uses Mainnet +function MyComponent() { + // Get Base address + const { data: baseAddress } = useEnsAddress({ + name: 'vitalik.eth', + chainId: base.id, + }) +} ``` - ```ts [Ethers] import { ethers } from 'ethers' @@ -125,8 +133,10 @@ const baseProvider = new ethers.getDefaultProvider('base') // Provider for ENS resolution on Mainnet const mainnetProvider = new ethers.getDefaultProvider('mainnet') -// Use mainnetProvider for ENS lookups -const address = await mainnetProvider.resolveName('vitalik.eth') +// Get the Base address for this ENS name +const resolver = await mainnetProvider.getResolver('vitalik.eth') +const baseAddress = await resolver?.getAddress(8453) // Base chain ID ``` ::: + From 5ca047c53c564b3b6b89cf2ada6e8ee026568115 Mon Sep 17 00:00:00 2001 From: Simon Emanuel Schmid Date: Mon, 10 Nov 2025 19:04:59 -0300 Subject: [PATCH 09/10] Ignore .claude --- .gitignore | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index d34faf52..f70348ed 100644 --- a/.gitignore +++ b/.gitignore @@ -16,4 +16,5 @@ src/pages/ensip/* src/data/generated/* !src/data/generated/.keep -.wrangler \ No newline at end of file +.wrangler +.claude \ No newline at end of file From 995039753e19797228b6e0794aaaf914ccf4f5e4 Mon Sep 17 00:00:00 2001 From: Simon Emanuel Schmid Date: Mon, 10 Nov 2025 19:53:23 -0300 Subject: [PATCH 10/10] Incorporate feedback from the pull-request: - Explicit about web3 libraries - Clarify Universal Resolver proxy contract - Easier DNS naming - Emoji example --- src/pages/web/ensv2-readiness.mdx | 39 +++++++++++++++++-------------- 1 file changed, 22 insertions(+), 17 deletions(-) diff --git a/src/pages/web/ensv2-readiness.mdx b/src/pages/web/ensv2-readiness.mdx index bb0bfab4..b6bf7977 100644 --- a/src/pages/web/ensv2-readiness.mdx +++ b/src/pages/web/ensv2-readiness.mdx @@ -8,19 +8,23 @@ The good news? For most applications, preparing for ENSv2 is as simple as updati - ethers.js: Not published yet. [Work in progress on v6.16.0](https://github.com/ethers-io/ethers.js/tree/wip-v6.16.0-ens) - web3.js: Deprecated -If you're using a supported library, it should handle everything automatically. The sections below explain what's happening under the hood and how to test that your integration is working correctly: +:::info +**Using a supported library? You're done!** Everything is handled automatically. + +The sections below are optional reading for those who want to understand the technical details or test their integration manually. +::: ## Universal Resolver -Even though ENSv2 supports multi-chain, all resolution starts on Ethereum Mainnet. ENS deployed a [new Universal Resolver](https://eth.blockscout.com/address/0xeEeEEEeE14D718C2B47D9923Deab1335E144EeEe) that acts as the canonical entry point. This resolver will be updated when ENSv2 launches. +Even though ENSv2 is designed for multi-chain, all resolution still starts on Ethereum Mainnet. There is a [new Universal Resolver](https://eth.blockscout.com/address/0xeEeEEEeE14D718C2B47D9923Deab1335E144EeEe) that acts as the canonical entry point. This is an upgradable proxy contract, so its address won't change in the future if its implementation is changed. -Your application needs to use this new Universal Resolver. As mentioned above, updating to the latest version of your library should handle this automatically. +Your application needs to use this new Universal Resolver in order to be ready for ENSv2. As mentioned above, updating to the latest version of your supported web3 library handles this automatically. Learn more about the [Universal Resolver here](/resolvers/universal) and about the [resolution process in general here](/resolution). ### Testing Universal Resolver Support -To test if your integration uses the Universal Resolver, try resolving the address for `ur.gtest.eth`. It should return `0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE`. +To test if your integration uses the Universal Resolver, try resolving the address for `ur.gtest.eth`. It should return `0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE`. If it instead returns `0x1111111111111111111111111111111111111111`, you likely need to update your web3 library. ## CCIP Read @@ -34,39 +38,40 @@ Learn more about [CCIP-Read, Offchain and L2 resolvers here](/resolvers/ccip-rea To test if your integration properly implements CCIP Read, try resolving `test.offchaindemo.eth`. It should return the address `0x779981590E7Ccc0CFAe8040Ce7151324747cDb97`. -## DNS Resolution +## DNS Names and Name Detection -ENS supports importing DNS names into ENS, allowing traditional domain names to work alongside .eth names. It's important that your application correctly also detects DNS names to avoid false positives. +ENS supports importing DNS names into ENS, allowing legacy domain names to work alongside .eth names. It's important that your application correctly also detects DNS names. ### Common Mistake: Only Matching .eth -Many integrations use a regex that only matches `.eth` domains: +Many integrations check if the input ends with `.eth` in order to detect an ENS name: -```regex -^[a-zA-Z0-9-]+\.eth$ +```js +if (input.endsWith('.eth') { + // ... +} ``` This is **incorrect** because it excludes DNS names imported into ENS (like `ensfairy.xyz`). ### Correct Pattern: Match All Valid Domains -Instead, your integration should match any valid domain name with a regex like this: +Instead, your integration should treat any dot-separated string with as a potential ENS name. For example, `a.co` should be treated as a potential ENS name. -```regex -^(?:[\dA-Za-z-]+\.)+[A-Za-z]{2,}$ +```js +if (input.includes('.') && input.length > 2) { + // ... +} ``` -:::info -The above regex is a simplification. An actual implementation is more complex. Use a library to detect an ENS name. -::: - This pattern correctly matches: - `.eth` names like `vitalik.eth` - DNS names like `ensfairy.xyz` - Subdomains like `ses.fkey.id` +- Emoji domains like `🦇️🔊️🦇️🔊️🦇️🔊️.eth` -Learn more about [DNS integration here](/learn/dns). +Learn more about [DNS integration here](/learn/dns). The full specification of name normalization is defined in [ENSIP-15](/ensip/15). ## Multichain Considerations