{"id":"ERC-181","name":"ENS Reverse Resolution","status":"Final","chain":"ethereum","category":{"id":"comprehension","name":"Comprehension & Display","description":"Making blockchain data readable to humans"},"journeyStages":[{"id":"authentication","name":"Authentication & Identity","description":"Proving who you are and logging in"},{"id":"asset-display","name":"Asset Discovery & Display","description":"Seeing tokens, NFTs, and balances"}],"uxImpact":"Any wallet address can display a human name — '0xabc...' shows as 'alice.eth' in transaction histories and dashboards. Design implications: fetch reverse records for all displayed addresses, show names in activity feeds/transaction lists, display name in connected wallet UI, cache resolved names for performance. Design decisions: fallback display when no reverse record exists (truncated address vs full), handling mismatches between forward/reverse resolution (possible impersonation), refresh frequency for cached names.","hasDetailedContent":true,"content":{"id":"ERC-181","sources":[{"label":"Official specification","url":"https://eips.ethereum.org/EIPS/erc-181","type":"official-spec"}],"lastReviewed":"2026-05-25","lastUpdated":"2026-05-25","summary":"ERC-181 enables reverse ENS resolution so wallet addresses display human-readable names like alice.eth instead of hex. Apps query reverse records to label senders and recipients in activity feeds, send flows, and connected wallet UI. Always pair names with address fallback and warn when forward and reverse resolution mismatch to prevent impersonation.","designerTakeaways":["You can fetch reverse records for every displayed address.","Your activity feeds can show ENS names with address fallback.","You can warn when forward and reverse resolution mismatch."],"applicability":{"whenToUse":["Addresses appear in feeds, send flows, or leaderboards.","Users benefit from human-readable identity.","ENS reverse records exist on your target chain."],"whenToAvoid":["Internal-only addresses never shown to users.","Performance constraints forbid reverse lookups.","Chain lacks ENS or compatible naming."]},"prototypeFirst":[{"screen":"Primary happy path","why":"Prove the core user promise before edge cases.","covers":["Success state","Clear outcome copy"],"include":["Primary CTA","Confirmation feedback","Next step"]},{"screen":"Blocked or unsupported state","why":"Users discover limits when wallets or chains lack support.","covers":["Unsupported wallet","Wrong network"],"include":["Plain-language reason","Fallback action"]},{"screen":"Failure recovery","why":"Trust breaks when errors look like bugs.","covers":["User rejection","Transaction revert"],"include":["Retry path","Support context"]},{"screen":"Advanced disclosure","why":"Power users need technical detail without cluttering the default path.","covers":["Contract address","Token ID","Raw status"],"include":["Expandable section","Copy buttons","Explorer link"]}],"statesToDesign":[{"state":"Ready","trigger":"Prerequisites met.","userNeed":"Understand what happens next.","designResponse":"Enable primary action with plain-language preview."},{"state":"Awaiting signature","trigger":"Wallet prompt open.","userNeed":"Know what they are approving.","designResponse":"Mirror human-readable summary in app and wallet."},{"state":"Pending","trigger":"Transaction submitted.","userNeed":"Confidence it is progressing.","designResponse":"Show status strip with explorer link."},{"state":"Succeeded","trigger":"On-chain confirmation.","userNeed":"See updated ownership or balance.","designResponse":"Celebrate outcome and show new state clearly."},{"state":"Failed or reverted","trigger":"Validation or execution failed.","userNeed":"Fix or retry without guessing.","designResponse":"Name the failed constraint and offer a concrete next step."}],"designDecisions":[{"question":"How much protocol detail do users see?","recommendation":"Lead with outcomes; tuck identifiers behind review.","rationale":"Users decide on consequences, not function selectors."},{"question":"What happens when support is missing?","recommendation":"Block with explanation and fallback path.","rationale":"Silent failure feels like a broken product."},{"question":"How do you label restricted assets?","recommendation":"Use persistent badges for non-transferable, locked, or expiring states.","rationale":"Hidden restrictions cause rage-quits at transfer time."}],"problemsSolved":[{"problem":"Inconsistent behavior across apps","oldWay":"Each team reinvents copy and edge cases","newWay":"Shared standard gives predictable UX patterns","impact":"high"},{"problem":"Users surprised by on-chain rules","oldWay":"Generic transfer UI fails at submit time","newWay":"Standard-aware UI sets expectations upfront","impact":"high"},{"problem":"Support burden from opaque errors","oldWay":"Raw revert reasons in toasts","newWay":"Mapped states explain what to do next","impact":"medium"}],"uxPatterns":[{"name":"Name-First Address Chip","description":"Show ENS name with truncated address on hover.","mockup":"concept/nft-gallery","components":["AddressChip","ENSResolver","AvatarFallback"],"userFlow":["Address displayed","Reverse lookup runs","Name shown if exists","Address available on expand"]},{"name":"Mismatch Warning","description":"Flag when forward and reverse disagree.","mockup":"concept/verify-safety","components":["MismatchBanner","VerifyLink"],"userFlow":["Name resolves","Forward check fails","Warning shown","User verifies before sending"]}],"seenInTheWild":[{"app":"ENS App","url":"https://app.ens.domains/","note":"Reference for reverse record setup and display."},{"app":"Etherscan","url":"https://etherscan.io/","note":"Shows ENS names on address pages and transaction lists."},{"app":"Rainbow","url":"https://rainbow.me/","note":"Wallet UI resolves names in send and receive flows."}],"antiPatterns":[{"pattern":"Hiding standard-imposed restrictions until submit","why":"Users feel tricked when actions fail at the last step","instead":"Show eligibility and badges before the primary CTA","severity":"critical"},{"pattern":"Protocol jargon in user-facing copy","why":"Non-technical users cannot consent informedly","instead":"Use outcome language with optional technical disclosure","severity":"high"},{"pattern":"No fallback when wallet lacks support","why":"Dead-end flows increase churn","instead":"Explain limitation and offer alternate path or network","severity":"high"}],"vocabulary":[{"use":"Your balance / Your item","avoid":"Token ID / Token contract","why":"Ownership language matches mental models."},{"use":"Cannot transfer yet","avoid":"Transfer reverted","why":"Explain restriction without EVM vocabulary."},{"use":"Confirm in wallet","avoid":"Sign transaction","why":"Matches wallet UX users already know."}],"technicalNotes":"ERC-181 reverse resolution maps address to primary ENS name; cache with refresh strategy.","relatedStandards":[{"id":"ERC-137","relationship":"Forward ENS resolution complement"},{"id":"ERC-162","relationship":"ENS name acquisition via registrar"}]},"sources":[{"label":"Official specification","url":"https://eips.ethereum.org/EIPS/erc-181","type":"official-spec"},{"label":"Discussion","url":"https://ethereum-magicians.org/search?q=ERC-181","type":"discussion"},{"label":"Official specification","url":"https://eips.ethereum.org/EIPS/erc-181","type":"official-spec"}],"urls":{"canonical":"https://www.eipsfordesigners.com/standards/ERC-181","markdown":"https://www.eipsfordesigners.com/standards/ERC-181/content.md","agent":"https://www.eipsfordesigners.com/standards/ERC-181/agent.md","api":"https://www.eipsfordesigners.com/api/standards/ERC-181","official":"https://eips.ethereum.org/EIPS/erc-181","discussion":"https://ethereum-magicians.org/search?q=ERC-181"},"freshness":{"lastReviewed":"2026-05-25","lastUpdated":"2026-05-25"}}