{"id":"ERC-7730","name":"Clear Signing Metadata","status":"Draft","chain":"both","category":{"id":"comprehension","name":"Comprehension & Display","description":"Making blockchain data readable to humans"},"journeyStages":[{"id":"reading","name":"Reading & Understanding","description":"Interpreting what you're being asked to do"},{"id":"approving","name":"Approving & Permissioning","description":"Granting permissions for actions"}],"uxImpact":"Builds on EIP-712 to provide full human-readable transaction summaries — transforms 'sign this hex blob' into 'Send 100 USDC to vitalik.eth.' Design implications: display complete transaction summaries in plain language, show contract interaction details (function name, parameters) in human terms, enable 'Domain verified on-chain' indicators, integrate with transaction simulation for balance change previews. Design decisions: how to handle contracts without clear signing metadata (fallback to raw data vs blocking), trust model for metadata providers, how prominently to warn when clear signing data is unavailable. Critical priority across 5+ pain points (blind signing, blanket warnings, scam prevention). The standard that powers the clear-signing movement (clear-signing.org). ","hasDetailedContent":true,"content":{"id":"ERC-7730","sources":[{"label":"Official specification","url":"https://eips.ethereum.org/EIPS/erc-7730","type":"official-spec"}],"lastReviewed":"2026-05-25","lastUpdated":"2026-05-25","summary":"Builds on EIP-712 to provide full human-readable transaction summaries — transforms 'sign this hex blob' into 'Send 100 USDC to vitalik.eth.","designerTakeaways":["You can show complete transaction summaries in plain language before wallet prompts.","Your UI can warn prominently when clear-signing data is unavailable.","You can integrate domain verification indicators for trust."],"applicability":{"whenToUse":["Users sign complex contract interactions.","Blind signing is a support and security risk.","Your contracts can publish ERC-7730 metadata."],"whenToAvoid":["Simple native token sends need no metadata layer.","Target contracts lack clear-signing registration.","You cannot block or warn on missing metadata."]},"prototypeFirst":[{"screen":"Primary happy path","why":"Prove the core user promise before edge cases.","covers":["Success state","Clear outcome copy"],"include":["Primary CTA","Confirmation feedback","Next step"]},{"screen":"Blocked or unsupported state","why":"Users discover limits when wallets or chains lack support.","covers":["Unsupported wallet","Wrong network"],"include":["Plain-language reason","Fallback action"]},{"screen":"Failure recovery","why":"Trust breaks when errors look like bugs.","covers":["User rejection","Transaction revert"],"include":["Retry path","Support context"]},{"screen":"Advanced disclosure","why":"Power users need technical detail without cluttering the default path.","covers":["Contract address","Token ID","Raw status"],"include":["Expandable section","Copy buttons","Explorer link"]}],"mentalModel":[{"label":"Contract intent","description":"The smart contract defines what the transaction will do. Without metadata, wallets fall back to calldata hex."},{"label":"ERC-7730 registry","description":"Contracts publish clear-signing metadata that maps function calls to human-readable summaries and field labels."},{"label":"Wallet fetch","description":"Before the sign prompt, the wallet loads metadata for the target contract and function. Missing metadata is a design failure state."},{"label":"Plain-language preview","description":"Your app and wallet should show the same summary, e.g. Send 100 USDC to vitalik.eth, before anything is irreversible."},{"label":"Verification","description":"Domain and contract context confirm the summary matches the intended app. Block or warn when clear-signing data is unavailable."}],"statesToDesign":[{"state":"Ready","trigger":"Prerequisites met.","userNeed":"Understand what happens next.","designResponse":"Enable primary action with plain-language preview."},{"state":"Awaiting signature","trigger":"Wallet prompt open.","userNeed":"Know what they are approving.","designResponse":"Mirror human-readable summary in app and wallet."},{"state":"Pending","trigger":"Transaction submitted.","userNeed":"Confidence it is progressing.","designResponse":"Show status strip with explorer link."},{"state":"Succeeded","trigger":"On-chain confirmation.","userNeed":"See updated ownership or balance.","designResponse":"Celebrate outcome and show new state clearly."},{"state":"Failed or reverted","trigger":"Validation or execution failed.","userNeed":"Fix or retry without guessing.","designResponse":"Name the failed constraint and offer a concrete next step."}],"designDecisions":[{"question":"How much protocol detail do users see?","recommendation":"Lead with outcomes; tuck identifiers behind review.","rationale":"Users decide on consequences, not function selectors."},{"question":"What happens when support is missing?","recommendation":"Block with explanation and fallback path.","rationale":"Silent failure feels like a broken product."},{"question":"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."}],"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":"Standard-aware UI sets expectations upfront","impact":"high"},{"problem":"Support burden from opaque errors","oldWay":"Raw revert reasons in toasts","newWay":"Mapped states explain what to do next","impact":"medium"}],"uxPatterns":[{"name":"Human Transaction Summary","description":"Plain-language preview of every parameter.","mockup":"concept/typed-data","components":["SummaryCard","ParameterList","DomainBadge"],"userFlow":["User initiates action","App fetches 7730 metadata","Summary renders","User confirms with understanding"]},{"name":"Missing Metadata Gate","description":"Block or warn when clear signing unavailable.","mockup":"concept/typed-data","components":["WarningBanner","AdvancedToggle"],"userFlow":["Metadata missing","UI warns user","Offers cancel or advanced view","Never silent blind sign"]}],"seenInTheWild":[{"app":"Ledger Live","url":"https://www.ledger.com/ledger-live","note":"Hardware wallets pioneered clear signing for security."},{"app":"Clear Signing","url":"https://www.clear-signing.org/","note":"Industry movement ERC-7730 powers."},{"app":"Safe","url":"https://safe.global/","note":"Multi-sig flows depend on readable transaction previews."}],"antiPatterns":[{"pattern":"Hiding standard-imposed restrictions until submit","why":"Users feel tricked when actions fail at the last step","instead":"Show eligibility and badges before the primary CTA","severity":"critical"},{"pattern":"Protocol jargon in user-facing copy","why":"Non-technical users cannot consent informedly","instead":"Use outcome language with optional technical disclosure","severity":"high"},{"pattern":"No fallback when wallet lacks support","why":"Dead-end flows increase churn","instead":"Explain limitation and offer alternate path or network","severity":"high"}],"vocabulary":[{"use":"Your balance / Your item","avoid":"Token ID / Token contract","why":"Ownership language matches mental models."},{"use":"Cannot transfer yet","avoid":"Transfer reverted","why":"Explain restriction without EVM vocabulary."},{"use":"Confirm in wallet","avoid":"Sign transaction","why":"Matches wallet UX users already know."}],"onMonad":[{"aspect":"Confirmation speed","ethereum":"Multi-step flows can feel slow between signatures","monad":"Sub-second finality tightens feedback loops","designImplication":"Prefer inline status over long pending modals on Monad."},{"aspect":"Transaction cost","ethereum":"Gas can discourage exploratory actions","monad":"Lower fees enable lighter-weight interactions","designImplication":"Safe to offer preview retries and social actions more freely."}],"technicalNotes":"ERC-7730 extends EIP-712 with contract-specific human-readable metadata.","relatedStandards":[{"id":"EIP-712","relationship":"Typed data foundation for clear signing"},{"id":"ERC-6093","relationship":"Standardized error messages complement previews"}]},"sources":[{"label":"Official specification","url":"https://eips.ethereum.org/EIPS/erc-7730","type":"official-spec"},{"label":"Discussion","url":"https://ethereum-magicians.org/search?q=ERC-7730","type":"discussion"},{"label":"Official specification","url":"https://eips.ethereum.org/EIPS/erc-7730","type":"official-spec"}],"urls":{"canonical":"https://www.eipsfordesigners.com/standards/ERC-7730","markdown":"https://www.eipsfordesigners.com/standards/ERC-7730/content.md","agent":"https://www.eipsfordesigners.com/standards/ERC-7730/agent.md","api":"https://www.eipsfordesigners.com/api/standards/ERC-7730","official":"https://eips.ethereum.org/EIPS/erc-7730","discussion":"https://ethereum-magicians.org/search?q=ERC-7730"},"freshness":{"lastReviewed":"2026-05-25","lastUpdated":"2026-05-25"}}