{"id":"ERC-7828","name":"Chain-Specific Address Resolution","status":"Draft","chain":"both","category":{"id":"cross-chain","name":"Cross-Chain","description":"Moving assets and messages between chains"},"journeyStages":[{"id":"authentication","name":"Authentication & Identity","description":"Proving who you are and logging in"},{"id":"executing","name":"Executing Transactions","description":"Performing on-chain actions"}],"uxImpact":"Chain-aware addresses route to the correct network automatically — no manual chain switching required when interacting. Design implications: resolve addresses to their target chain context, auto-switch or prompt for network change when interacting with chain-specific addresses, show chain indicator alongside resolved addresses. Design decisions: whether to auto-switch silently or confirm with users, how to display chain context in address fields, fallback behavior when target chain is not supported by wallet. High priority — 'Auto-switch networks on interaction — no manual chain switching.' Resolves the Manual Network Switching pain point.","hasDetailedContent":true,"content":{"id":"ERC-7828","sources":[{"label":"Official specification","url":"https://eips.ethereum.org/EIPS/erc-7828","type":"official-spec"}],"lastReviewed":"2026-05-25","lastUpdated":"2026-05-25","summary":"Chain-aware addresses route to the correct network automatically — no manual chain switching required when interacting.","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 and switch before send","impact":"critical"},{"problem":"Manual network switching friction","oldWay":"User guesses chain from context","newWay":"Address resolution suggests target network","impact":"high"},{"problem":"dApp on wrong network empty state","oldWay":"Broken UI with no explanation","newWay":"Switch network banner on mismatch","impact":"medium"}],"uxPatterns":[{"name":"Chain Detect on Paste","description":"Resolve target chain when address entered.","mockup":"concept/bridge","components":["AddressInput","ChainChip","DetectSpinner"],"userFlow":["Paste address","Chain detected","Chip shows","Switch if needed"]},{"name":"Switch Network Prompt","description":"Confirm before changing active chain.","mockup":"concept/verify-safety","components":["SwitchModal","ChainIcon","ConfirmSwitch"],"userFlow":["Mismatch detected","Modal appears","User confirms","Wallet switches"]}],"seenInTheWild":[{"app":"Rainbow","url":"https://rainbow.me/","note":"Network switch prompts on chain mismatch."},{"app":"MetaMask","url":"https://metamask.io/","note":"Switch network when dApp requests different chain."},{"app":"Across","url":"https://across.to/","note":"Cross-chain address context in bridge flows."}],"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."}],"onMonad":[{"aspect":"Monad detection","ethereum":"New chains missing from resolution tables","monad":"Register Monad in resolution from launch","designImplication":"Monad chip appears on Monad-native addresses immediately."},{"aspect":"Switch speed","ethereum":"Switch feels sluggish","monad":"Fast switch-to-confirm loop after user approves","designImplication":"Inline switching status on Monad without long modal."}],"technicalNotes":"ERC-7828 is draft High priority; never enable send on chain mismatch without user-confirmed switch.","relatedStandards":[{"id":"ERC-7930","relationship":"Chain-encoded address format"},{"id":"EIP-695","relationship":"Chain ID standard complement"}]},"sources":[{"label":"Official specification","url":"https://eips.ethereum.org/EIPS/erc-7828","type":"official-spec"},{"label":"Discussion","url":"https://ethereum-magicians.org/search?q=ERC-7828","type":"discussion"},{"label":"Official specification","url":"https://eips.ethereum.org/EIPS/erc-7828","type":"official-spec"}],"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://eips.ethereum.org/EIPS/erc-7828","discussion":"https://ethereum-magicians.org/search?q=ERC-7828"},"freshness":{"lastReviewed":"2026-05-25","lastUpdated":"2026-05-25"}}