{"id":"EIP-658","name":"Transaction Status Code in Receipts","status":"Final","chain":"both","category":{"id":"infrastructure","name":"Infrastructure","description":"Foundational patterns enabling other standards"},"journeyStages":[{"id":"status","name":"Status & Confirmation","description":"Waiting for and confirming outcomes"}],"uxImpact":"Transaction receipts include explicit success (1) or failure (0) status — no more guessing from gas usage. Design implications: show clear green checkmark/red X for transaction outcomes, display revert reason when available, distinguish between 'transaction included but failed' vs. 'transaction not included'. Design decisions: how to present failed transactions (some users expect failed = not charged, need education); whether to auto-expand failure details or keep UI clean.","hasDetailedContent":true,"content":{"id":"EIP-658","summary":"EIP-658 added a simple status field to transaction receipts: 1 for success, 0 for failure. Before this, wallets had to use hacky methods to determine if a transaction actually worked. Now every wallet can show a clear checkmark or X after any transaction, making blockchain feel more like normal software.","applicability":{"whenToUse":["Your product addresses: no reliable way to know if transaction succeeded.","Your users saw \"confirmed\" but funds didn't move.","The flow should deliver: receipt contains explicit status: 1 = success, 0 = failure.","You are designing a transaction status indicator experience with visible states and recovery paths."],"whenToAvoid":["Always check status field and show Success or Failed explicitly.","Parse revert reason and show actionable suggestion.","Clearly show \"Gas charged: 0.01 ETH (transaction failed but gas was used)\".","Protocol plumbing is invisible and never surfaces in user-facing UI."]},"designerTakeaways":["You can design UI that delivers receipt contains explicit status: 1 = success.","You can clear \"Transaction Failed\" message with status in the interface.","You can design UI that delivers simple boolean check: receipt.status === 1."],"problemsSolved":[{"problem":"No reliable way to know if transaction succeeded","oldWay":"Compare gas used to gas limit, hope remaining gas indicated success","newWay":"Receipt contains explicit status: 1 = success, 0 = failure","impact":"critical"},{"problem":"Users saw \"confirmed\" but funds didn't move","oldWay":"Transaction confirmed but reverted, user confused why nothing happened","newWay":"Clear \"Transaction Failed\" message with status","impact":"critical"},{"problem":"Apps couldn't reliably track transaction outcomes","oldWay":"Complex heuristics to guess success, sometimes wrong","newWay":"Simple boolean check: receipt.status === 1","impact":"high"},{"problem":"Block explorers showed ambiguous results","oldWay":"\"Transaction included in block\" with unclear outcome","newWay":"Green checkmark for success, red X for failure","impact":"high"}],"uxPatterns":[{"name":"Transaction Status Indicator","description":"Clear visual feedback for transaction outcome","mockup":"concept/verify-safety","userFlow":["User submits transaction","Pending state shown while waiting","Receipt received with status field","Clear success/failure indicator displayed","User knows exactly what happened"]},{"name":"Failed Transaction Explanation","description":"Help users understand why transaction failed","mockup":"concept/verify-safety","userFlow":["Transaction reverts on-chain","Receipt shows status = 0","UI displays clear failure message","Reason explained in plain language","Retry option offered"]},{"name":"Transaction History with Status","description":"Show success/failure status for all past transactions","mockup":"generic/token-approval","userFlow":["User views transaction history","Each transaction shows status icon","Success = checkmark, Failed = X","At-a-glance understanding of outcomes"]}],"uiComponents":[{"name":"TransactionStatusBadge","description":"Visual indicator of transaction success/failure","states":["pending","success","failed"],"props":["status","showLabel","size"]},{"name":"ReceiptDisplay","description":"Show full transaction receipt details","states":["loading","success","failed"],"props":["receipt","showTechnical","onRetry"]},{"name":"FailureExplanation","description":"Human-readable failure reason","states":["generic","specific","actionable"],"props":["errorCode","errorMessage","suggestion"]}],"antiPatterns":[{"pattern":"Showing \"Confirmed\" for failed transactions","why":"Confirmation means included in block, not success. Users think it worked.","instead":"Always check status field and show Success or Failed explicitly","severity":"critical"},{"pattern":"Not explaining why transaction failed","why":"User knows it failed but not what to do about it","instead":"Parse revert reason and show actionable suggestion","severity":"high"},{"pattern":"Hiding gas charges on failed transactions","why":"Users don't understand why they lost money on a failed tx","instead":"Clearly show \"Gas charged: 0.01 ETH (transaction failed but gas was used)\"","severity":"high"},{"pattern":"Using same color for pending and success","why":"Users can't distinguish waiting from done","instead":"Distinct colors: yellow=pending, green=success, red=failed","severity":"medium"}],"onMonad":[{"aspect":"Fast Status Updates","ethereum":"Wait 12+ seconds for receipt with status","monad":"Sub-second finality means instant status feedback","designImplication":"Can skip elaborate \"waiting\" animations, show status almost immediately"},{"aspect":"Error Recovery","ethereum":"Failed tx means wait and retry manually","monad":"Fast enough to auto-retry failed transactions","designImplication":"Consider \"Auto-retry on failure\" option for common error types"},{"aspect":"Status Display Duration","ethereum":"Show pending state for 15+ seconds","monad":"Pending state lasts <1 second","designImplication":"Pending indicator may flash by too fast, ensure success state is prominent"}],"relatedStandards":[{"id":"EIP-2718","relationship":"Typed transactions still use the same receipt status format"},{"id":"ERC-6093","relationship":"Custom errors provide detailed failure reasons beyond just status=0"},{"id":"ERC-7751","relationship":"Wrapped errors give even more context about why transactions failed"}]},"sources":[{"label":"Official specification","url":"https://eips.ethereum.org/EIPS/eip-658","type":"official-spec"},{"label":"Discussion","url":"https://ethereum-magicians.org/search?q=EIP-658","type":"discussion"}],"urls":{"canonical":"https://www.eipsfordesigners.com/standards/EIP-658","markdown":"https://www.eipsfordesigners.com/standards/EIP-658/content.md","agent":"https://www.eipsfordesigners.com/standards/EIP-658/agent.md","api":"https://www.eipsfordesigners.com/api/standards/EIP-658","official":"https://eips.ethereum.org/EIPS/eip-658","discussion":"https://ethereum-magicians.org/search?q=EIP-658"},"freshness":{"lastReviewed":"2026-04-05","lastUpdated":"2026-04-05"}}