# ERC-55: Mixed-case Address Checksum

Source: https://www.eipsfordesigners.com/standards/ERC-55
Agent brief: https://www.eipsfordesigners.com/standards/ERC-55/agent.md
Machine-readable JSON: https://www.eipsfordesigners.com/api/standards/ERC-55
Last reviewed: 2026-05-25
Last updated: 2026-05-25

| Field | Value |
| --- | --- |
| Status | Final |
| Chain | both |
| Category | Comprehension & Display |
| Journey stages | Authentication & Identity |
| Detailed guide | Yes |
| Official specification | https://eips.ethereum.org/EIPS/erc-55 |
| Discussion search | https://ethereum-magicians.org/search?q=ERC-55 |

## UX Impact

Mixed-case addresses (0x5aAeb6053F3E94C9b9A09f33669435E7Ef1BeAed) catch typos before funds are lost — ~0.02% chance a random typo passes checksum. Design implications: always display checksummed addresses, validate checksum on paste/input with instant feedback, show clear error states for invalid checksums, consider case-preserving copy functionality. Design decisions: whether to auto-correct lowercase addresses or require exact match, how prominently to warn on checksum failure, whether to block or just warn on invalid checksums. Safety & Security Checklist rates verifying addresses with ERC-55 checksum as High priority — detects typos before sending.

## Summary

Mixed-case addresses (0x5aAeb6053F3E94C9b9A09f33669435E7Ef1BeAed) catch typos before funds are lost — ~0.02% chance a random typo passes checksum.

## For Designers

- You can always display checksummed addresses in your UI.
- Your paste handler can validate checksum with instant feedback.
- You can preserve exact casing on copy for power users.

## Applicability

### When to Use

- Users paste or type addresses manually.
- Wrong-address sends are irreversible.
- Your app displays addresses anywhere.

### When to Avoid

- Addresses come only from QR scan with embedded checksum.
- Non-EVM address formats use different validation.
- Read-only display with no user input.

## Problems It Solves

### Inconsistent behavior across apps

Impact: high

Old way: Each team reinvents copy and edge cases

New way: Shared standard gives predictable UX patterns

### Users surprised by on-chain rules

Impact: high

Old way: Generic transfer UI fails at submit time

New way: Standard-aware UI sets expectations upfront

### Support burden from opaque errors

Impact: medium

Old way: Raw revert reasons in toasts

New way: Mapped states explain what to do next

## Anti-Patterns

### Hiding standard-imposed restrictions until submit

Severity: critical

Users feel tricked when actions fail at the last step

Instead: Show eligibility and badges before the primary CTA

### Protocol jargon in user-facing copy

Severity: high

Non-technical users cannot consent informedly

Instead: Use outcome language with optional technical disclosure

### No fallback when wallet lacks support

Severity: high

Dead-end flows increase churn

Instead: Explain limitation and offer alternate path or network

## Design Decisions

### How much protocol detail do users see?

Recommendation: Lead with outcomes; tuck identifiers behind review.

Rationale: Users decide on consequences, not function selectors.

### What happens when support is missing?

Recommendation: Block with explanation and fallback path.

Rationale: Silent failure feels like a broken product.

### 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.

## States to Design

### Ready

Trigger: Prerequisites met.

User need: Understand what happens next.

Design response: Enable primary action with plain-language preview.

### Awaiting signature

Trigger: Wallet prompt open.

User need: Know what they are approving.

Design response: Mirror human-readable summary in app and wallet.

### Pending

Trigger: Transaction submitted.

User need: Confidence it is progressing.

Design response: Show status strip with explorer link.

### Succeeded

Trigger: On-chain confirmation.

User need: See updated ownership or balance.

Design response: Celebrate outcome and show new state clearly.

### Failed or reverted

Trigger: Validation or execution failed.

User need: Fix or retry without guessing.

Design response: Name the failed constraint and offer a concrete next step.

## Vocabulary

- Use "Your balance / Your item" instead of "Token ID / Token contract": Ownership language matches mental models.

- Use "Cannot transfer yet" instead of "Transfer reverted": Explain restriction without EVM vocabulary.

- Use "Confirm in wallet" instead of "Sign transaction": Matches wallet UX users already know.

## What to Prototype First

### Primary happy path

Prove the core user promise before edge cases.

Covers: Success state, Clear outcome copy

- Primary CTA
- Confirmation feedback
- Next step

### Blocked or unsupported state

Users discover limits when wallets or chains lack support.

Covers: Unsupported wallet, Wrong network

- Plain-language reason
- Fallback action

### Failure recovery

Trust breaks when errors look like bugs.

Covers: User rejection, Transaction revert

- Retry path
- Support context

### Advanced disclosure

Power users need technical detail without cluttering the default path.

Covers: Contract address, Token ID, Raw status

- Expandable section
- Copy buttons
- Explorer link

## Seen in the Wild

- MetaMask: Validates checksum on send and warns on invalid addresses. (https://metamask.io/)

- Etherscan: Displays checksummed addresses on all pages. (https://etherscan.io/)

- MyCrypto: Early advocate for checksum validation in send flows. (https://www.mycrypto.com/)

## On Monad

### Confirmation speed

Ethereum: Multi-step flows can feel slow between signatures

Monad: Sub-second finality tightens feedback loops

Design implication: Prefer inline status over long pending modals on Monad.

### Transaction cost

Ethereum: Gas can discourage exploratory actions

Monad: Lower fees enable lighter-weight interactions

Design implication: Safe to offer preview retries and social actions more freely.

## UX Patterns

### Instant Checksum Validation

Validate on paste with clear error state.

Components: AddressInput, ChecksumValidator, ErrorInline

User flow:

- User pastes address
- Checksum validated
- Green check or red error
- Send blocked on invalid

Mockup registry key: `concept/verify-safety` (React UI on the live standard page).

### Checksummed Display

Always render proper mixed-case.

Components: ChecksummedText, CopyButton

User flow:

- Address loaded
- Checksummed format applied
- User copies valid format
- Recipient apps validate successfully

Mockup registry key: `concept/verify-safety` (React UI on the live standard page).

## Related Standards

- EIP-1191: Chain-specific checksum extension

- ERC-7930: Chain-aware address format complement

## Technical Notes

ERC-55 checksum uses mixed case; ~0.02% of random typos pass — still validate.
