Forward ENS resolution maps a name (vitalik.eth) to an address (0xd8dA...). Reverse resolution does the opposite — it maps an Ethereum address back to its primary ENS name. This is essential for any application that displays wallet activity: transaction feeds, governance dashboards, NFT marketplaces, and leaderboards.
How Reverse Resolution Works
ENS implements reverse resolution through a special domain: the .addr.reverse namespace. Every Ethereum address maps to a corresponding reverse record at [address].addr.reverse. For example, Vitalik's address maps to d8da6bf26964af9d7eed9e03e53415d37aa96045.addr.reverse.
The name() function on that reverse record returns the user's claimed primary name. The resolution process then performs a forward verification step: it resolves the returned name forward and checks that the resulting address matches the original address. This prevents spoofing — a user can't claim someone else's name as their reverse record without controlling the forward resolution too.
Setting Up a Primary ENS Name
To have a primary ENS name, a wallet owner must explicitly set it. In the ENS app (app.ens.domains):
- Connect the wallet whose address you want to map
- Navigate to "My Account" → "Primary Name"
- Select the ENS name you own and want as your primary
- Confirm the transaction (this writes to the .addr.reverse record)
For smart contracts, the reverse record can be set programmatically via the ReverseRegistrar contract — useful for protocols that want their contract addresses to display a human-readable name.
Reverse Resolution with Resolvio
# Single address reverse resolution
curl https://api.resolvio.xyz/ens/v2/reverse/0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045
{
"address": "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045",
"name": "vitalik.eth",
"hasReverseRecord": true,
}
When an address has no primary ENS name set, name is null and displayName is a truncated version of the address (e.g. 0xd8dA...6045).
Bulk Reverse Resolution
For lists of addresses — transaction feeds, leaderboards, voter lists — use the bulk endpoint:
curl "https://api.resolvio.xyz/ens/v2/reverse/bulk?addresses=0xd8dA...,0xAb58...,0x225f..."
All addresses are resolved in a single request using onchain multicall batching. Results are returned in input order.
Display Best Practices
- Always show the
displayNamefield — it gracefully falls back to a truncated address when no ENS name is set - Show the avatar if available — it significantly improves perceived identity
- Cache reverse resolution results on the client for the session; ENS primary names rarely change
- For payments, always confirm the resolved address before sending — never send funds based on a displayed name without re-verifying the forward resolution