{"id":"ERC-55","name":"Mixed-case Address Checksum","status":"Final","chain":"both","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":"reading","name":"Reading & Understanding","description":"Interpreting what you're being asked to do"}],"uxImpact":"ERC-55 encodes a checksum in the capitalization of an EVM address. A client that validates the checksum can catch many accidental edits, although checksum-valid text is not proof that the recipient is correct and all-lowercase or all-uppercase input needs separate handling.","officialUrl":"https://ercs.ethereum.org/ERCS/erc-55","lastReviewed":"2026-09-18","lastUpdated":"2026-09-18","kind":"proposal","hasDetailedContent":true,"content":{"id":"ERC-55","sources":[{"label":"Official specification","url":"https://ercs.ethereum.org/ERCS/erc-55","type":"official-spec"}],"lastReviewed":"2026-09-18","lastUpdated":"2026-09-18","summary":"ERC-55 encodes a checksum in the capitalization of an EVM address. A client that validates the checksum can catch many accidental edits, although checksum-valid text is not proof that the recipient is correct and all-lowercase or all-uppercase input needs separate handling.","designerTakeaways":["Format a validated EVM address with ERC-55 casing when the network and address format are known.","Validate pasted mixed-case input and explain when the checksum is invalid or unavailable.","Preserve the checksummed form when users copy an address, while keeping recipient and network review separate."],"applicability":{"whenToUse":["Users paste or type addresses manually.","Wrong-address sends are irreversible.","Your app displays addresses anywhere."],"whenToAvoid":["The source already validates the address and network through a separate trusted flow.","Non-EVM address formats use different validation.","Read-only display where adding checksum semantics would confuse the address format."]},"prototypeFirst":[{"screen":"Address entry or paste","why":"Show how the client reports a valid, invalid, or checksum-unavailable address before users send it.","covers":["Checksummed input","Invalid mixed-case input","Lowercase or uppercase input"],"include":["Address and network label","Validation feedback","Copy or continue action"]},{"screen":"Invalid or unsupported address format","why":"Users need a clear explanation when the address cannot be parsed or the checksum does not match.","covers":["Invalid checksum","Wrong address format","Unsupported chain format"],"include":["Plain-language reason","Paste again or choose a supported address"]},{"screen":"Recipient review","why":"Checksum feedback cannot identify the intended recipient, so the send review needs a separate confirmation step.","covers":["Checksum-valid address","Recipient mismatch concern","Network mismatch concern"],"include":["Full address copy","Network context","Cancel and edit"]},{"screen":"Technical address details","why":"Power users may need the raw and checksummed forms without turning the checksum into a safety claim.","covers":["Raw address","Checksummed address","Validation method"],"include":["Expandable detail","Copy buttons","Explorer link when network is known"]}],"statesToDesign":[{"state":"Address parsed","trigger":"The input is a valid EVM address.","userNeed":"Know whether the text includes a usable checksum.","designResponse":"Show the checksummed form and keep the destination network visible."},{"state":"Checksum mismatch","trigger":"Mixed-case input does not match the ERC-55 checksum.","userNeed":"Fix a possible transcription error.","designResponse":"Explain the mismatch, preserve the entered value for review, and require correction or an explicit supported fallback."},{"state":"Checksum unavailable","trigger":"The address is all lower-case, all upper-case, or uses a different address format.","userNeed":"Know what the validator checked.","designResponse":"Label checksum information as unavailable and continue with address and network validation."},{"state":"Recipient review","trigger":"The address passes formatting and checksum checks.","userNeed":"Confirm the intended destination before signing.","designResponse":"Show the full address, recipient context, and selected network."},{"state":"Address invalid","trigger":"The input cannot be parsed as a supported address.","userNeed":"Correct the destination without losing the entered value.","designResponse":"Name the format error, keep sending disabled, and offer paste or edit recovery."}],"designDecisions":[{"question":"When do you show checksum details?","recommendation":"Show the address result beside the recipient and network review.","rationale":"The checksum describes address text and does not identify the intended recipient."},{"question":"What happens when checksum data is missing?","recommendation":"Label the casing state and continue with the address validation rules that apply.","rationale":"All-lowercase and all-uppercase forms do not carry ERC-55 checksum information."},{"question":"What does a valid checksum allow you to claim?","recommendation":"Call it an input-format result and keep recipient confirmation separate.","rationale":"Checksum validation can catch edits but cannot establish ownership, intent, or destination safety."}],"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":"A checksum-aware UI reports input state before the user reviews the recipient and network","impact":"high"},{"problem":"Support burden from opaque errors","oldWay":"Raw revert reasons in toasts","newWay":"Mapped checksum and address states explain what to do next","impact":"medium"}],"uxPatterns":[{"name":"Instant Checksum Validation","description":"Validate on paste with clear error state.","components":["AddressInput","ChecksumValidator","ErrorInline"],"userFlow":["User pastes address","Checksum validated","Green check or red error","Send blocked on invalid"]},{"name":"Checksummed Display","description":"Render ERC-55 casing after validating the EVM address and known network.","components":["ChecksummedText","CopyButton"],"userFlow":["Address loaded","Checksummed format applied when supported","User reviews the full address and network","User copies the validated representation"]}],"antiPatterns":[{"pattern":"Calling a checksum a recipient guarantee","why":"A valid checksum does not establish who controls the address or whether it is the intended recipient","instead":"Explain checksum validation as an input check and keep recipient confirmation separate","severity":"critical"},{"pattern":"Rejecting every lower- or uppercase address as corrupt","why":"ERC-55 checksum casing is absent from some valid input and other address formats","instead":"Label the casing state and validate the address and network with the appropriate rules","severity":"high"},{"pattern":"Showing a checksum as proof of the recipient","why":"Checksums detect some transcription errors but do not prove who controls the address","instead":"Pair checksum feedback with explicit recipient and network review","severity":"high"}],"vocabulary":[{"use":"Checksum verified","avoid":"Recipient verified","why":"Checksum validation describes the address text, not who owns it."},{"use":"Check the address and network","avoid":"Checksum passed, send now","why":"A checksum result does not replace recipient review."},{"use":"Address format is valid","avoid":"Address is safe","why":"The checksum says whether the text matches the encoded casing."}],"technicalNotes":"ERC-55 hashes the lowercase hexadecimal address and uppercases selected alphabetic nibbles. A mixed-case string with an invalid checksum should be flagged, while all-lowercase and all-uppercase forms do not carry checksum information. Validate the address format and network separately.","relatedStandards":[{"id":"ERC-1191","relationship":"Chain-specific checksum extension"},{"id":"ERC-7930","relationship":"Chain-aware address format complement"}]},"sources":[{"label":"Official specification","url":"https://ercs.ethereum.org/ERCS/erc-55","type":"official-spec"},{"label":"Discussion search","url":"https://ethereum-magicians.org/search?q=ERC-55","type":"discussion"}],"urls":{"canonical":"https://www.eipsfordesigners.com/standards/ERC-55","markdown":"https://www.eipsfordesigners.com/standards/ERC-55/content.md","agent":"https://www.eipsfordesigners.com/standards/ERC-55/agent.md","api":"https://www.eipsfordesigners.com/api/standards/ERC-55","official":"https://ercs.ethereum.org/ERCS/erc-55","discussion":"https://ethereum-magicians.org/search?q=ERC-55"},"freshness":{"lastReviewed":"2026-09-18","lastUpdated":"2026-09-18"}}