<aside> <img src="https://prod-files-secure.s3.us-west-2.amazonaws.com/5daf3b41-07be-47c5-ade9-fed18156fd7f/55a71b99-1ca1-436f-b60c-35296ad6abfc/ens_mark_primary.svg" alt="https://prod-files-secure.s3.us-west-2.amazonaws.com/5daf3b41-07be-47c5-ade9-fed18156fd7f/55a71b99-1ca1-436f-b60c-35296ad6abfc/ens_mark_primary.svg" width="40px" /> What is ENS? ENS (Ethereum Name Service) is the de facto decentralized, permissionless naming protocol that lives on Ethereum and scales to the entire internet.

</aside>

<aside> ๐Ÿ“ข Workshops

CleanShot 2024-07-01 at 23.31.36@2x.png

</aside>

<aside> โ“ Have Questions? Weโ€™re here to help

Come to our booth located by the main stage Or ask in the Discord channel #partner-ens Or reach out to Greg on Telegram @gregskril

</aside>

<aside> ๐Ÿ”‘ **Key Concepts

Forward resolution** (aka Address Lookup) - resolving any crypto address (ETH, Base, BTC, etc.) by a human readable name. So gregskril.eth โ†’ 0x179A862703a4adfb29896552DF9e307980D19285. Any number of names can resolve to the same address.

**Reverse resolution** (aka Name Lookup) - resolving a human readable name by ETH address. So 0x179A862703a4adfb29896552DF9e307980D19285 โ†’ gregskril.eth. In this example, gregskril.eth is considered 0x179...'s โ€œPrimary Nameโ€. An address can only have one Primary Name.

Text Records - arbitrary key:value storage attached to an ENS name, with some standards for things like avatar.

**Resolvers** - the smart contract standard that controls how ENS data (mainly addresses and text records) is fetched. They can read from internal contract storage on mainnet Ethereum, or defer storage to any L2/offchain data source using CCIP Read and Wildcard Resolution.

**Subnames** (aka subdomains) - children of a name (eg sub.ens.eth) which can be more flexible than second level names (eg ens.eth). These can exist on any L2/offchain data source using the same method as resolvers.

</aside>

Project Ideas for Prize Categories

<aside> ๐Ÿง  **Project Ideas ($10k in prizes)

Default names with account abstraction** Smart contract wallets that creates a subname upon deployment so that users always have a name and never need to copy/paste a hex address.

Creative use cases for subnames An example is FluidKey, a subname system that resolves to a new stealth address on each resolution.

Unique use cases for text records Since text records can store any key:value pair, it works as any generic datastore!


AI Projects If you're building an AI project, consider how ENS can be used to name autonomous agents.

โ€”โ€”โ€”

We encourage teams to explore the EVMGateway for L2-related projects.

</aside>

<aside> ๐Ÿฅ‡ $10k in Prizes

Any type of ENS integration is eligible for this prize, from subname infrastructure to consumer social apps that use ENS for identity. Get creative!

It should be abundantly clear how ENS improves your product and is not just implemented as an afterthought. The more ENS-centric it is, the better. Your demo should be functional and not just include hard-coded values. Upon submission, your project showcase must have a video recording or link to a live demo.

</aside>

<aside> โญ๏ธ Address Lookup (see useEnsAddress)

</aside>

import { useEnsAddress } from 'wagmi'
import { normalize } from 'viem/ens'

function App() {
  const { data: ensAddress, isLoading } = useEnsAddress({
    name: normalize('luc.eth'),
    chainId: 1
  })

	if (isLoading) return <div>loading...</div>;
  return <div>Your address is {ensAddress}</div>
}

<aside> โช Name Lookup (see useEnsName)

</aside>

import { useEnsName } from 'wagmi'

function App() {
  const { data: ensName, isLoading } = useEnsName({
    address: '0x225f137127d9067788314bc7fcc1f36746a3c3B5',
    chainId: 1
  })

	if (isLoading) return <div>loading...</div>
  return <div>๐Ÿซก Gm {ensName}!</div>
}

<aside> <img src="https://s3-us-west-2.amazonaws.com/secure.notion-static.com/b7e5fb02-a62c-44f9-bb31-1443ac05c6c8/pfp.png" alt="https://s3-us-west-2.amazonaws.com/secure.notion-static.com/b7e5fb02-a62c-44f9-bb31-1443ac05c6c8/pfp.png" width="40px" /> Avatars (see useEnsAvatar)

</aside>

import { useEnsName } from 'wagmi'
import { normalize } from 'viem/ens'

function Avatar() {
  const { data: ensAvatar } = useEnsAvatar({
    name: normalize('luc.eth'),
    chainId: 1
  })

	if (!ensAvatar) return <div className="w-32 rounded-full bg-blue-500" />
  return <img src={ensAvatar} className="w-32 rounded-full" />
}

<aside> ๐Ÿ““ Text Records (see useEnsText)

</aside>

import { useEnsText } from 'wagmi'
import { normalize } from 'viem/ens'

function Avatar() {
  const { data: ensTwitter } = useEnsText({
    name: normalize('luc.eth'),
    key: 'com.twitter',
    chainId: 1
  })

	if (!ensTwitter) return <div className="w-32 rounded-full bg-blue-500" />;
  return <img src={ens} className="w-32 rounded-full" />
}

<aside> ๐Ÿค“ **Common Mistakes

Wagmi is not resolving names correctly** Specify the chain ID to whichever ENS network youโ€™re using. This can be 1 for Mainnet, 11155111 for Sepolia, or 17000 for Holesky. Also make sure you have a mainnet RPC configured in your wagmi config.

****When building a dApp we highly recommend you take a look at our frontend-starter template to kickstart your dApp development journey. If youโ€™re using a different stack, wagmi, viem, ethers, web3js, and many more come with ENS support built-in! ๐Ÿ› ๏ธ This saves you tons of work and lets you use the libraries native ENS tooling!

๐Ÿ“œ I am building a Contract Every smart contract should have an ENS name. It lets users see what contract they are interacting with. Learn more about how to give you contract a name.

</aside>

<aside> ๐ŸŒ Ecosystem If you are interested in continuing to build in the ENS ecosystem, join our ENS Developers group on Telegram.

</aside>

<aside> ๐Ÿ“š Resources Docs | Frontend Starter Template | FAQ

</aside>

<aside> โ“ Questions & Support Discord | Support

</aside>