{"id":"ERC-137","name":"Ethereum Name Service (ENS)","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":"Users can send to 'vitalik.eth' instead of '0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045' — memorable names replace error-prone addresses. Design implications: always show ENS names where available, provide autocomplete for .eth names, display both name AND resolved address for verification, show avatar/profile data from ENS records, handle subdomains gracefully. Design decisions: when to show address vs name (trust tradeoff), how to handle unregistered/expired names, whether to require re-resolution before transactions, loading states for async resolution. 910K+ active domains. ENS is a primary solution to Sending to Wrong Address (Critical severity). Showing ENS names alongside addresses is High priority for safety UX.","hasDetailedContent":true,"content":{"id":"ERC-137","summary":"ERC-137 is the Ethereum Name Service (ENS) standard. It turns \"0xd8dA6BF26964aF...\" into \"vitalik.eth\". Human-readable names for addresses, just like DNS for the internet. Users can send to \"alice.eth\" instead of copying 42-character hex strings. It's the foundation of human-readable web3 identity.","applicability":{"whenToUse":["Your product addresses: addresses are unreadable hex strings.","Your product addresses: easy to make typos in addresses.","The flow should deliver: type \"alice.eth\" or scan ENS name.","You are designing a ens input field experience with visible states and recovery paths."],"whenToAvoid":["Always show the resolved address.","Accept both ENS names and addresses.","Verify resolution on intended network.","Users never see addresses, amounts, or signing payloads in your UI."]},"designerTakeaways":["You can design UI that delivers type \"alice.eth\" or scan ENS name.","You can design UI that delivers names are memorable, typos are obvious.","You can design UI that delivers your .eth name works everywhere."],"problemsSolved":[{"problem":"Addresses are unreadable hex strings","oldWay":"Copy-paste \"0x7a3d8f2c9e1b4a5c6d7e8f9a0b1c2d3e4f5a6b7c\"","newWay":"Type \"alice.eth\" or scan ENS name","impact":"critical"},{"problem":"Easy to make typos in addresses","oldWay":"One wrong character = funds lost forever","newWay":"Names are memorable, typos are obvious","impact":"critical"},{"problem":"No portable identity across dApps","oldWay":"Different username on every platform","newWay":"Your .eth name works everywhere","impact":"high"}],"uxPatterns":[{"name":"ENS Input Field","description":"Accept both ENS names and addresses","mockup":"generic/token-transfer","userFlow":["User types ENS name","App resolves to address","Shows resolved address","Validates on correct network","User confirms and continues"]},{"name":"Profile with ENS","description":"Display user identity with ENS details","mockup":"generic/list-selector","userFlow":["User views address","App does reverse lookup","Fetches ENS name if exists","Loads avatar and records","Displays complete profile"]}],"uiComponents":[{"name":"ENSInput","description":"Input that accepts and resolves ENS names","states":["empty","typing","resolving","resolved","invalid"],"props":["value","resolvedAddress","onResolve"]},{"name":"ENSAvatar","description":"Displays ENS avatar or generates placeholder","states":["loading","loaded","fallback"],"props":["ensName","address","size"]},{"name":"AddressDisplay","description":"Shows address with ENS when available","states":["address-only","with-ens","loading"],"props":["address","ensName","truncate"]}],"antiPatterns":[{"pattern":"Only accepting raw addresses","why":"Users forced to copy long hex strings","instead":"Accept both ENS names and addresses","severity":"high"},{"pattern":"Not showing resolved address","why":"User can't verify where funds will go","instead":"Always show the resolved address","severity":"critical"},{"pattern":"Displaying addresses without ENS lookup","why":"User sees hex when human name exists","instead":"Do reverse resolution, show name if found","severity":"medium"},{"pattern":"Not checking resolution network","why":"ENS name might resolve differently on L2","instead":"Verify resolution on intended network","severity":"high"}],"onMonad":[{"aspect":"ENS Resolution","ethereum":"ENS is native to Ethereum mainnet","monad":"May need cross-chain resolution or Monad native names","designImplication":"Check if ENS works or use Monad equivalent"}],"keyTakeaways":["ENS = human-readable .eth names","Accept both ENS names and addresses in inputs","Always show resolved address for verification","Do reverse lookup to display names instead of hex","Verify resolution on the correct network"],"technicalNotes":"ERC-137 defines ENS registry with resolver pattern. namehash(name) produces deterministic node ID. Registry maps nodes to owners and resolvers. Resolvers implement addr() for address resolution, text() for records. ERC-181 adds reverse resolution via [address].addr.reverse. CCIP-read enables off-chain and L2 resolution."},"sources":[{"label":"Official specification","url":"https://eips.ethereum.org/EIPS/eip-137","type":"official-spec"},{"label":"Discussion","url":"https://ethereum-magicians.org/search?q=ERC-137","type":"discussion"}],"urls":{"canonical":"https://www.eipsfordesigners.com/standards/ERC-137","markdown":"https://www.eipsfordesigners.com/standards/ERC-137/content.md","agent":"https://www.eipsfordesigners.com/standards/ERC-137/agent.md","api":"https://www.eipsfordesigners.com/api/standards/ERC-137","official":"https://eips.ethereum.org/EIPS/eip-137","discussion":"https://ethereum-magicians.org/search?q=ERC-137"},"freshness":{"lastReviewed":"2026-04-05","lastUpdated":"2026-04-05"}}