Listing a Users Names
In some cases you might want to show off all names that a user owns. Due to the nature of how the ENS Protocol works under the hood, this might be a slightly more difficult task than expected.
Fortunately, tooling has been developed to accommodate for this and to make it easier.
Try it out using the widget below!
Not all ENS names exist onchain (learn more about wildcard resolution), meaning we don't always know which names a user owns/controls.
The notable exception is second-level .eth names. Ownership of these names are onchain and indexable through scanning events on the appropriate smart contracts. Note that this does not necessarily mean address and text records associated with the name are onchain (read more about offchain resolvers).
When using one of the methods described below it is important to keep in mind that you should always allow for a user to manually enter a name, as not all names are indexable.
It is generally recommended to allow users to input a name using an input box and to verify it resolves to the correct address upon user-completion.
The ENS subgraph indexes all events from relevant smart contracts and exposes them via a GraphQL endpoint. Note that addresses in filters must be lowercased.
ENSjs makes it easy to run common queries on the subgraph with strong type safety. Docs can be found here.
{
domains(where: { owner: "0x225f137127d9067788314bc7fcc1f36746a3c3b5" }) {
name
}
wrappedDomains(
where: { owner: "0x225f137127d9067788314bc7fcc1f36746a3c3b5" }
) {
name
}
}
Alchemy has several API endpoints for fetching NFTs, which we can use to query a list of names owned by a given address.
// Setup: npm install alchemy-sdk
import { Alchemy, Network } from 'alchemy-sdk'
const config = {
apiKey: '<-- ALCHEMY APP API KEY -->',
network: Network.ETH_MAINNET,
}
const alchemy = new Alchemy(config)
const walletAddress = '0x458d1E307CcA61C0Bea82f7663F66831175EcDe8' // replace with wallet address
const ensContractAddress = '0x57f1887a8BF19b14fC0dF6Fd9B2acc9Af147eA85'
const nfts = await alchemy.nft.getNftsForOwner(walletAddress, {
contractAddresses: [ensContractAddress],
})
console.log(nfts)