{"id":"ERC-7828","name":"Chain-Specific Address Resolution","status":"Review","chain":"both","category":{"id":"cross-chain","name":"Cross-Chain","description":"Moving assets and messages between chains"},"journeyStages":[{"id":"discovery","name":"Discovery & Connection","description":"Finding and connecting wallet to dApp"},{"id":"authentication","name":"Authentication & Identity","description":"Proving who you are and logging in"},{"id":"executing","name":"Executing Transactions","description":"Performing on-chain actions"}],"uxImpact":"ERC-7828 defines a human-readable chain-aware name format and ENS chain resolution. Applications can use the resolved chain context to prompt a user to switch networks, while routing and wallet switching remain application behavior with explicit user consent.","officialUrl":"https://ercs.ethereum.org/ERCS/erc-7828","lastReviewed":"2026-09-18","lastUpdated":"2026-09-18","kind":"proposal","hasDetailedContent":true,"content":{"id":"ERC-7828","specConstraints":[{"id":"ens-checksum-scope","constraint":"The optional checksum is not recommended for an ENS-name address component.","appliesTo":"application","normativity":"normative","specQuote":"A checksum SHOULD NOT be included when the <address> component is an ENS name","specSection":"Specification / Interoperable Name Definition / Checksums","specUrl":"https://ercs.ethereum.org/ERCS/erc-7828#checksums","designImplication":"Do not mark an ENS-based name invalid simply because it lacks this checksum. Distinguish checksum integrity for raw addresses from name resolution and ownership verification."},{"id":"chain-specific-resolution","constraint":"Resolve an ENS address for the target chain, not whichever network is currently selected.","appliesTo":"application","normativity":"normative","specQuote":"If an ENS address is used within the <address> component, it MUST be resolved subject to the ENS resolution specifications, giving consideration to the target chain specified in the <chain> component.","specSection":"Specification / Resolving the component","specUrl":"https://ercs.ethereum.org/ERCS/erc-7828#resolving-the-component","designImplication":"Show the resolved chain and address together. Use applicable ENS resolution rules and require a supported resolution result before preparing a send on that chain."},{"id":"name-normalization","constraint":"ENS normalization rules must be considered to prevent deceptive name displays.","appliesTo":"application","normativity":"security-considerations","specQuote":"Implementers MUST give consideration to the name normalization specifications of the Ethereum Name Service so as to avoid homoglyph or spoofing attacks. These are outlined in ENSIP-1 and ENSIP-15.","specSection":"Security Considerations","specUrl":"https://ercs.ethereum.org/ERCS/erc-7828#security-considerations","designImplication":"Use an ENS-aware normalization library and make the final resolved address inspectable. Do not treat a familiar-looking name as proof of identity; resolver data can change, and raw addresses remain vulnerable to poisoning."},{"id":"raw-address-checksum","constraint":"A checksum is optional but recommended when the address component is a raw target address.","appliesTo":"application","normativity":"normative","specQuote":"The checksum is OPTIONAL but RECOMMENDED when the <address> component represents a target address, as it helps mitigate homoglyph and spoofing attacks for chain-specific addresses.","specSection":"Specification / Interoperable Name Definition / Checksums","specUrl":"https://ercs.ethereum.org/ERCS/erc-7828#checksums","designImplication":"Offer checksum-aware display and validation for raw target addresses, but do not turn this recommendation into a mandatory input rule."},{"id":"checksum-display-option","constraint":"Clients may include or omit the checksum when displaying or sharing an Interoperable Name.","appliesTo":"application","normativity":"normative","specQuote":"Clients MAY include or omit the checksum when displaying or sharing an _Interoperable Name_.","specSection":"Specification / Interoperable Name Definition / Checksums","specUrl":"https://ercs.ethereum.org/ERCS/erc-7828#checksums","designImplication":"Keep checksum display and sharing as an explicit product choice. Do not describe omission as invalid when the raw-address checksum remains optional."},{"id":"checksum-input-compatibility","constraint":"Clients may accept Interoperable Name inputs with or without a checksum.","appliesTo":"application","normativity":"normative","specQuote":"Clients MAY accept _Interoperable Name_ inputs with or without a checksum.","specSection":"Specification / Interoperable Name Definition / Checksums","specUrl":"https://ercs.ethereum.org/ERCS/erc-7828#checksums","designImplication":"Accept both forms at the input boundary and explain checksum status without rejecting an otherwise valid name solely because the suffix is absent."},{"id":"checksum-validation","constraint":"Clients may validate a supplied target-address checksum by deriving the underlying Interoperable Address and recalculating it.","appliesTo":"application","normativity":"normative","specQuote":"When a checksum is provided for a target address, clients MAY validate it by deriving the underlying _Interoperable Address_ and recalculating the checksum.","specSection":"Specification / Interoperable Name Definition / Checksums","specUrl":"https://ercs.ethereum.org/ERCS/erc-7828#checksums","designImplication":"When validation is available, show a clear mismatch state and keep the raw target address inspectable. Do not claim validation when the client has not recalculated the checksum."},{"id":"address-poisoning-warning","constraint":"Users should stay alert to address-poisoning attacks when using a raw target address.","appliesTo":"application","normativity":"security-considerations","specQuote":"Users should stay vigilant of address poisoning attacks when using a raw _target address_ in the `<address>` component.","specSection":"Security Considerations","specUrl":"https://ercs.ethereum.org/ERCS/erc-7828#security-considerations","designImplication":"Keep the resolved raw address visible in confirmation and use a warning or verification affordance for copied or pasted addresses."}],"sources":[{"label":"Official specification","url":"https://ercs.ethereum.org/ERCS/erc-7828","type":"official-spec"}],"lastReviewed":"2026-09-18","lastUpdated":"2026-09-18","summary":"ERC-7828 defines a human-readable chain-aware name format and ENS chain resolution. Applications can use the resolved chain context to prompt a user to switch networks, while routing and wallet switching remain application behavior with explicit user consent.","partialDeployment":{"body":"ERC-7828 is Review. Treat chain-aware names and network-switch prompts as conditional on resolver, wallet, and target-network support; verify parsing and routing behavior before relying on the encoded chain context."},"designerTakeaways":["You can detect chain context when address is pasted and show Target network: Arbitrum chip.","Your switch prompt can explain Switch to Arbitrum to continue with confirm, not silent hop.","You can block send when current network mismatches with Switch network CTA."],"applicability":{"whenToUse":["Multi-chain wallet or dApp.","Addresses encode or map to specific chains.","Wrong-chain sends are support burden."],"whenToAvoid":["Single-chain product.","Address format ambiguous without ERC-7828.","User explicitly pinned to one network."]},"prototypeFirst":[{"screen":"Paste address chain detect","why":"Immediate feedback when address entered.","covers":["Detected chain","Ambiguous","Unsupported chain"],"include":["Chain chip on field","Detecting spinner","Unsupported message"]},{"screen":"Network switch prompt","why":"User must consent to network change.","covers":["Switch needed","User declines"],"include":["Switch to [chain] modal","Reason copy","Switch / Stay buttons"]},{"screen":"Wrong network block","why":"Prevent send on current chain when mismatch.","covers":["Blocked send"],"include":["Wrong network banner","Switch CTA","Disabled confirm until match"]},{"screen":"Interaction deep link","why":"Link opens app on correct chain.","covers":["Auto route","Wallet lacks chain"],"include":["Add network if missing","Switch then continue"]}],"mentalModel":[{"label":"Chain-aware address","description":"Address implies or maps to target network."},{"label":"Current network","description":"Wallet active chain — must match for success."},{"label":"Resolution","description":"App reads address → determines target chain."},{"label":"Switch prompt","description":"User approves network change — not silent."},{"label":"Fallback","description":"Unknown address → ask user to pick chain manually."}],"statesToDesign":[{"state":"Chain detected — match","trigger":"Wallet already on target.","userNeed":"Proceed smoothly.","designResponse":"Green chain chip; enable send."},{"state":"Chain detected — mismatch","trigger":"Wrong network active.","userNeed":"Switch safely.","designResponse":"Banner plus Switch to [chain] CTA."},{"state":"Switch in progress","trigger":"User approved switch.","userNeed":"Know wallet prompting.","designResponse":"Switching network… status."},{"state":"Unsupported chain","trigger":"Wallet lacks chain.","userNeed":"Add network path.","designResponse":"Add [chain] to wallet flow."},{"state":"Detection failed","trigger":"Ambiguous address.","userNeed":"Pick chain manually.","designResponse":"Select network dropdown required."}],"designDecisions":[{"question":"Auto-switch silent or prompt?","recommendation":"Always confirm switch unless user enabled auto in settings.","rationale":"Silent switch disorients and enables phishing."},{"question":"Chain chip in address field?","recommendation":"Yes after detection resolves.","rationale":"Constant context during compose."},{"question":"Fallback when detection fails?","recommendation":"Require manual chain pick before enable send.","rationale":"Better delay than wrong-chain loss."}],"problemsSolved":[{"problem":"Wrong-chain sends lose funds","oldWay":"Send USDC on Ethereum to Arbitrum address","newWay":"Detect chain context and ask the user to switch before send","impact":"critical"},{"problem":"Manual network switching friction","oldWay":"User guesses chain from context","newWay":"Address resolution suggests a target network; the application decides how to route and prompts for switching","impact":"high"},{"problem":"dApp on wrong network empty state","oldWay":"Broken UI with no explanation","newWay":"Switch network banner and user-confirmed action on mismatch","impact":"medium"}],"uxPatterns":[{"name":"Chain Detect on Paste","description":"Resolve target chain when address entered.","components":["AddressInput","ChainChip","DetectSpinner"],"userFlow":["Paste address","Chain detected","Chip shows","Switch if needed"]},{"name":"Switch Network Prompt","description":"Confirm before changing active chain.","components":["SwitchModal","ChainIcon","ConfirmSwitch"],"userFlow":["Mismatch detected","Modal appears","User confirms","Wallet switches"]}],"antiPatterns":[{"pattern":"Silent auto network switch","why":"User loses context; phishing vector","instead":"Confirm switch modal every time unless opted in","severity":"critical"},{"pattern":"Send enabled on wrong chain","why":"Funds stuck or lost","instead":"Block confirm until network matches","severity":"critical"},{"pattern":"No chain indicator on address field","why":"User assumes current network is correct","instead":"Target chain chip after detection","severity":"high"}],"vocabulary":[{"use":"This address is on [chain]","avoid":"Chain context resolved","why":"Plain routing language."},{"use":"Switch network","avoid":"Change chainId","why":"Wallet-familiar terms."},{"use":"Add [chain] to wallet","avoid":"Register network RPC","why":"Setup action users know."}],"technicalNotes":"ERC-7828 specifies chain-aware names and resolution. Keep sending disabled on a chain mismatch until the user confirms the network switch.","relatedStandards":[{"id":"ERC-7930","relationship":"Chain-encoded address format"},{"id":"EIP-695","relationship":"Chain ID standard complement"}]},"sources":[{"label":"Official specification","url":"https://ercs.ethereum.org/ERCS/erc-7828","type":"official-spec"},{"label":"Discussion search","url":"https://ethereum-magicians.org/search?q=ERC-7828","type":"discussion"}],"urls":{"canonical":"https://www.eipsfordesigners.com/standards/ERC-7828","markdown":"https://www.eipsfordesigners.com/standards/ERC-7828/content.md","agent":"https://www.eipsfordesigners.com/standards/ERC-7828/agent.md","api":"https://www.eipsfordesigners.com/api/standards/ERC-7828","official":"https://ercs.ethereum.org/ERCS/erc-7828","discussion":"https://ethereum-magicians.org/search?q=ERC-7828"},"freshness":{"lastReviewed":"2026-09-18","lastUpdated":"2026-09-18"}}