{"id":"MONAD-ASYNC","name":"Asynchronous Execution","status":"Active","chain":"monad","category":{"id":"infrastructure","name":"Infrastructure","description":"Foundational patterns enabling other standards"},"journeyStages":[{"id":"status","name":"Status & Confirmation","description":"Waiting for and confirming outcomes"}],"uxImpact":"Consensus finalizes before execution completes — transactions are 'in' but state updates follow. Design implications: show transaction stages (Proposed → Voted → Finalized → Verified), display 'Awaiting execution' status after inclusion, indicate state root finality separately from transaction finality. Design decisions: whether to show Finalized (800ms, safe for most) or wait for Verified (1.6s, guaranteed state) for confirmations; how to explain the 3-block execution lag simply.","hasDetailedContent":true,"content":{"id":"MONAD-ASYNC","summary":"Monad uses asynchronous execution — transactions are executed optimistically before consensus is complete, then validated. This is why Monad feels instant. For UX, this means showing \"Confirming...\" briefly (~400ms), then \"Confirmed\" (~800ms). The two-phase feedback model replaces Ethereum's long pending state.","applicability":{"whenToUse":["Your product addresses: long wait times feel like something is broken.","Your product addresses: no intermediate feedback during execution.","The flow should deliver: \"Confirming...\" → \"Confirmed\" in under a second.","You are designing a two-phase confirmation experience with visible states and recovery paths."],"whenToAvoid":["Match animation speed to actual ~1s confirmation.","Design for instant, not for waiting.","Subtle phase labels or just smooth fast transition.","Protocol plumbing is invisible and never surfaces in user-facing UI."]},"designerTakeaways":["You can design UI that delivers \"Confirming...\" → \"Confirmed\" in under a second.","You can design UI that delivers two clear phases: executing → confirming → done.","You can design UI that delivers fast feedback, no confusion about status."],"problemsSolved":[{"problem":"Long wait times feel like something is broken","oldWay":"15 seconds of \"Pending...\" — is it stuck?","newWay":"\"Confirming...\" → \"Confirmed\" in under a second","impact":"critical"},{"problem":"No intermediate feedback during execution","oldWay":"Spinner spins, user waits, no idea what's happening","newWay":"Two clear phases: executing → confirming → done","impact":"high"},{"problem":"Users retry transactions thinking they failed","oldWay":"Slow = must be broken, click again","newWay":"Fast feedback, no confusion about status","impact":"high"}],"uxPatterns":[{"name":"Two-Phase Confirmation","description":"Show execution then confirmation phases","mockup":"generic/instant-confirm","userFlow":["User submits transaction","Phase 1: Execution (optimistic)","Phase 2: Consensus confirmation","Phase 3: Final confirmation","Show completion time"]},{"name":"Inline Quick Confirmation","description":"Minimal inline status for fast transactions","mockup":"generic/instant-confirm","userFlow":["User clicks confirm","Button shows \"Sending...\"","Updates to \"Confirming...\"","Shows \"Sent! (0.8s)\"","No page change needed"]}],"uiComponents":[{"name":"AsyncStatusIndicator","description":"Shows current phase of async execution","states":["submitting","executing","confirming","confirmed","failed"],"props":["currentPhase","estimatedTime"]},{"name":"PhaseProgressBar","description":"Visual progress through execution phases","states":["phase-1","phase-2","complete"],"props":["phase","progress"]},{"name":"FastConfirmAnimation","description":"Quick animation for sub-second confirmations","states":["idle","animating","complete"],"props":["duration","onComplete"]}],"antiPatterns":[{"pattern":"Long loading animations on Monad","why":"Animation takes longer than actual confirmation","instead":"Match animation speed to actual ~1s confirmation","severity":"high"},{"pattern":"Not showing phase distinction","why":"Users don't understand why there are two steps","instead":"Subtle phase labels or just smooth fast transition","severity":"medium"},{"pattern":"Using Ethereum-speed expectations","why":"Designing for 15s when reality is <1s","instead":"Design for instant, not for waiting","severity":"high"}],"onMonad":[{"aspect":"Execution Model","ethereum":"Sequential: execute after consensus","monad":"Async: execute optimistically, confirm after","designImplication":"Show two quick phases instead of one long wait"},{"aspect":"Total Time","ethereum":"12-15 seconds for block + execution","monad":"~800ms total","designImplication":"Feedback should be nearly instant"},{"aspect":"Optimistic Display","ethereum":"Wait for block before showing result","monad":"Can show likely result after execution phase","designImplication":"Optimistic UI updates are safe"}],"keyTakeaways":["Monad = async execution (execute then confirm)","Total time: ~800ms (execution + confirmation)","Show quick two-phase feedback, not long spinner","Design for instant, not for waiting","Animation should match actual speed"],"technicalNotes":"Monad executes transactions optimistically before consensus is finalized. Execution happens in parallel across transactions without conflicts. Consensus confirms the execution was valid. If conflicts detected, transactions re-execute. Result: apparent instant confirmation because execution begins immediately on submission. Finality in single slot."},"sources":[],"urls":{"canonical":"https://www.eipsfordesigners.com/standards/MONAD-ASYNC","markdown":"https://www.eipsfordesigners.com/standards/MONAD-ASYNC/content.md","agent":"https://www.eipsfordesigners.com/standards/MONAD-ASYNC/agent.md","api":"https://www.eipsfordesigners.com/api/standards/MONAD-ASYNC"},"freshness":{"lastReviewed":"2026-04-05","lastUpdated":"2026-04-05"}}