{"id":"ERC-8019","name":"Auto-Login","status":"Draft","chain":"both","category":{"id":"transaction-friction","name":"Transaction Friction","description":"Reducing clicks, signatures, and mental overhead"},"journeyStages":[{"id":"authentication","name":"Authentication & Identity","description":"Proving who you are and logging in"}],"uxImpact":"Persistent wallet authentication across sessions — eliminates repeated login signatures when returning to dApps. Design implications: implement automatic session restoration on return visits, show 'remembered' connection status, design opt-in/opt-out for persistent auth, handle session expiration gracefully. Design decisions: security tradeoffs of persistent auth (convenience vs risk on shared devices), whether to require re-authentication for sensitive actions, how to handle multiple wallets with persistent sessions. Draft standard, Ambire implementing. Listed as a solution to Signing Fatigue — competes with/complements ERC-4361 (SIWE) for the auth flow.","hasDetailedContent":true,"content":{"id":"ERC-8019","sources":[{"label":"Official specification","url":"https://eips.ethereum.org/EIPS/erc-8019","type":"official-spec"}],"lastReviewed":"2026-05-25","lastUpdated":"2026-05-25","summary":"Persistent wallet authentication across sessions — eliminates repeated login signatures when returning to dApps.","designerTakeaways":["You can restore wallet sessions automatically on return visits.","Your settings can offer Remember me with clear security tradeoff copy.","You can require re-authentication for withdrawals or settings changes."],"applicability":{"whenToUse":["Returning users dominate your traffic.","Repeated SIWE signatures cause drop-off.","Your app can store session state securely server-side."],"whenToAvoid":["Shared-device or kiosk contexts where persistence is dangerous.","Regulatory requirements mandate fresh auth every session.","Wallet does not support persistent auth extension."]},"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":"First visit sign-in","description":"The user signs once with SIWE to prove wallet ownership. This is the only signature required if they opt into persistence."},{"label":"Session credential","description":"The app and server store a scoped session token tied to wallet and expiry. It replaces repeated sign-in on return visits."},{"label":"Auto-restore","description":"On return, the app validates the stored session before showing account content. Show a brief restoring state, not a blank error."},{"label":"Sensitive re-auth","description":"Withdrawals, settings changes, or high-value actions trigger a fresh signature even when Remember me is on."},{"label":"Revoke and logout","description":"Clear server session and local storage on logout. Users need a visible path to end persistence on shared devices."}],"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":"Silent Reconnect","description":"Restore session on page load without modal.","mockup":"concept/siwe-sign-in","components":["SessionRestore","AccountChip"],"userFlow":["User returns","Session restored","Account chip appears","Optional re-auth for sensitive actions"]},{"name":"Remember Me Toggle","description":"Explicit opt-in for persistent auth.","mockup":"concept/siwe-sign-in","components":["RememberToggle","SecurityNote"],"userFlow":["First sign-in","User opts into remember","Future visits skip sign-in","User can disable in settings"]}],"seenInTheWild":[{"app":"Ambire","url":"https://www.ambire.com/","note":"Implementing persistent auth for smoother return visits."},{"app":"OpenSea","url":"https://opensea.io/","note":"Session persistence patterns for marketplace return users."},{"app":"Zora","url":"https://zora.co/","note":"Creator platforms benefit from reduced re-auth friction."}],"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-8019 is a draft standard for auto-login; balance convenience with shared-device risk.","relatedStandards":[{"id":"ERC-4361","relationship":"SIWE auth that 8019 extends with persistence"},{"id":"ERC-6492","relationship":"Auth for undeployed smart accounts"}]},"sources":[{"label":"Official specification","url":"https://eips.ethereum.org/EIPS/erc-8019","type":"official-spec"},{"label":"Discussion","url":"https://ethereum-magicians.org/search?q=ERC-8019","type":"discussion"},{"label":"Official specification","url":"https://eips.ethereum.org/EIPS/erc-8019","type":"official-spec"}],"urls":{"canonical":"https://www.eipsfordesigners.com/standards/ERC-8019","markdown":"https://www.eipsfordesigners.com/standards/ERC-8019/content.md","agent":"https://www.eipsfordesigners.com/standards/ERC-8019/agent.md","api":"https://www.eipsfordesigners.com/api/standards/ERC-8019","official":"https://eips.ethereum.org/EIPS/erc-8019","discussion":"https://ethereum-magicians.org/search?q=ERC-8019"},"freshness":{"lastReviewed":"2026-05-25","lastUpdated":"2026-05-25"}}